【问题标题】:PHP&html: emailing form's checkboxesPHP html:电子邮件表单复选框
【发布时间】:2015-11-09 08:08:19
【问题描述】:

我正在尝试制作一个简单的表单,将用户输入发送到我的电子邮件。我不知道PHP,所以我在这里遇到了一些麻烦。我无法让表单在邮件中包含复选框的结果。我尝试了几次,但我无法让它工作。这是西班牙语,对不起! 代码如下:

contactoformescritorio.php:

<?php
$where_form_is = "contacto.html".$_SERVER['SERVER_NAME'].strrev(strstr(strrev($_SERVER['PHP_SELF']),"/"));

mail("MY@MAIL.com","Formulario de pedido de copias","Form data:

Nombre: " . $_POST['cd-name'] . " 
Email: " . $_POST['cd-email'] . " 
Tamanio: " . $_POST['tamanio'] . " 
Acabado: " . $_POST['acabado'] . " 
Incluir en la cotizacion: " .implode(',',$_POST['agregados'])."\n" . "
Foto elegida e información adicional: " . $_POST['cd-textarea'] . " 
.
");

include("confirm.html");

/*
 * Procesar el formulario unicamente si el usuario lo envió. En cambio,
 * si se accede directamente a esta página, redirigir al formulario.
 */
if ($_SERVER['REQUEST_METHOD'] == "POST") {

    function check_input_value($input_value) {
        // Remove extra spaces of strings (beginning and end)
        $input_value = trim($input_value);
        // Prevent XSS
        $input_value = htmlspecialchars($input_value);

        return $input_value;
    }

    // Obtenemos los valores que el usuario ingresó
    $tamanio = $_POST['tamanio'];
    $acabado = $_POST['acabado'];
    $tamanio = check_input_value($tamanio);
    $acabado = check_input_value($acabado);

    if (empty($tamanio) || (empty($acabado)) || (empty($agregados))) {
        echo "Error: sin completar";
        exit;
    }

    echo $tamanio . "<br />";
    echo $acabado . "<br />";

    // Muestra los checkbox seleccionados por el usuario
    if (!empty($_POST['agregados'])) {
        foreach ($_POST['agregados'] as $agregados) {
            echo $agregados . "<br />";
        }
    }

} else {
    header("Location: formulario.php");
}
?>

朋友帮我填了表格,所以在我复制和粘贴一些部分时可能有点乱。

contacto.html

<form class="cd-form floating-labels" name="htmlform" method="post" action="contactoformescritorio.php"> 
    <fieldset>
        <legend>Información personal</legend>
        <div class="error-message">
            <p>Por favor ingresa un email valido</p>
        </div>
        <div class="icon">
            <label class="cd-label" name="cd-name" for="cd-name">Nombre</label>
            <input class="user" type="text" name="cd-name" id="cd-name" required>
        </div> 
        <div class="icon">
            <label class="cd-label" name="cd-email" for="cd-email">Email</label>
            <input class="email error" type="email" name="cd-email" id="cd-email" required>
        </div>
    </fieldset>
    <fieldset>
        <legend>Informacion de la impresion</legend>
        <div>
            <h4>Tamaño</h4>
            <p class="cd-select icon">
                <select class="size" name="tamanio" id="cd-size">
                    <option value="0">Seleccionar Tamaño</option>
                    <option value="1">Impresion 20x30</option>
                    <option value="2">Iman de 6 fotos 5x5</option>
                    <option value="3">Tamaño 3</option>
                </select>
            </p>
        </div> 
        <div>
            <h4>Acabado</h4>
            <ul class="cd-form-list">
                <li>
                    <input type="radio" name="acabado" value="mate" id="mate" checked="checked"/><label for="mate">Mate</label>
                </li>
                <li>
                    <input type="radio" name="acabado" value="brillo" id="brillo"/><label for="brillo">Brillo</label>
                </li>
            </ul>
        </div>
        <div>
            <h4>Agregar a la cotización</h4>
            <ul class="cd-form-list">
                <li><input type="checkbox" name="agregados[]" value="marco" id="marco"><label for="marco">Marco</label></li>

                <li><input type="checkbox" name="agregados[]" value="envio" id="envio"><label for="envio">Envio (indicar direccion)</label></li>
            </ul>
        </div>
        <div class="icon">
            <label class="cd-label" for="cd-textarea">Foto elegida e información adicional</label>
            <textarea class="message" name="cd-textarea" id="cd-textarea" required></textarea>
        </div>
        <div>
            <input type="submit" value="Enviar mensaje">
        </div>
    </fieldset>
</form>

【问题讨论】:

    标签: php forms email checkbox checkboxlist


    【解决方案1】:

    您的复选框都是名称agregados[],这使它们成为一个数组。您目前通过implode 处理它们,然后稍后使用foreach

    mail 之前,像这样运行foreach

    if (!empty($_POST['agregados'])) {
        foreach ($_POST['agregados'] as $key=>$value) {
            if ($key > 0) {
                $agregados .= ", $value";
            } else {
                $agregados .= "$value";
            }
        }
    } else {
        $agregados .= "(nothing selected)";
    }
    

    这将使用从复选框中选择的值设置变量$agregados,如果未选择任何内容,则显示这样的消息。

    然后,在您的 mail 中,将处理复选框的行替换为变量。

    替换:

     Incluir en la cotizacion: " .implode(',',$_POST['agregados'])."\n" . "
    

    $agregados
    

    另外,请注意,无论您何时输入contactoformescritorio.php,您的邮件都会被发送,因为不会检查是否已向其发送表单。您正在执行的检查 (if ($_SERVER['REQUEST_METHOD'] == "POST")) 紧随其后。


    最后一点,不是与您的问题直接相关的问题,您的 select 没有要求属性,因此如果未选择任何内容,您的 PHP 脚本将退出(您正在检查三个语句之一为空) .只需在您的选择中添加一个required 属性,例如这个

    <select class="size" name="tamanio" id="cd-size" required>
    

    那么你的Seleccionar Tamaño可以设置成这样的一行

    <option value="" selected style="display:none;">Seleccionar Tamaño</option>
    

    这将使您的表单更加“用户友好”,并且不会让用户在忘记从下拉列表中选择某些内容时重新填写表单。只是提示,您无需执行任何操作。

    【讨论】:

    • 嘿!我试过你说的,但我仍然无法让它工作。 XAMPP 说:警告:第 8 行 C:\xampp\htdocs\Prueba 投资组合\contactoformescritorio.php 中为 foreach() 提供的参数无效注意:未定义变量:C:\xampp\htdocs\Prueba 投资组合\contactoformescritorio.php 中的 agregados第 29 行我无法弄清楚问题所在。谢谢!
    • 好像你的$_POST['agregados'] 不是一个数组(它可能是一个字符串吗?),或者它没有被解析为你的contactoformescritorio.php。在contactoformescritorio.php 的开头添加var_dump($_POST['agregados']) 以检查它是数组还是字符串。
    • 它似乎无法识别 foreach() 语句,是吗?当我尝试使用 foreach() 时,我继续收到此错误
    • 查看我上面的评论,它可能不是您使用的数组。
    • 它返回了 string(5) "envio" (选中了 "marco" 和 "envio")
    猜你喜欢
    • 2013-08-04
    • 2011-08-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2011-02-28
    • 2018-11-05
    相关资源
    最近更新 更多