簡體   English   中英

PHP&html:通過電子郵件發送表單的復選框

[英]PHP&html: emailing form's checkboxes

我正在嘗試制作一個將用戶輸入發送到我的電子郵件的簡單表單。 我不了解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>

您的復選框都名為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沒有require-attribute,因此,如果未選擇任何內容(檢查三個語句之一為空),PHP腳本將退出。 只需在您的選擇中放入一個required屬性,例如

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

然后您的Seleccionar Tamaño可以設置為這樣的行

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

這將使您的表單更加“用戶友好”,如果用戶忘記從下拉列表中選擇內容,則不會使用戶再次填寫表單。 只是一個提示,您實際上不需要執行任何操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM