PHP & html: флажки формы отправки по электронной почте

Я пытаюсь сделать простую форму, которая отправляет пользовательский ввод на мою электронную почту. Я не знаю PHP, поэтому у меня возникли некоторые проблемы. Я не могу сделать так, чтобы форма включала результаты проверки в письме. Я пытался несколько раз, но я не могу заставить его работать. Это по-испански, извините за это!
Вот код:

contactoformescritorio.php:

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

mail("[email protected]","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>

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 не имеет атрибута require, поэтому ваш PHP-скрипт завершает работу, если ничего не выбрано (где вы проверяете одно из трех утверждений — пусто). Просто положить required атрибут в вашем выборе, такой как этот

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

Тогда ваш Seleccionar Tamaño может быть установлен на строку, как это

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

Это сделает вашу форму более «удобной для пользователя», и не заставит пользователя снова заполнять форму, если он забудет выбрать что-то из выпадающего списка. Просто совет, ничего, что вы действительно должны сделать.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]