Так что я не гуру PHP, и я едва кодировал его (в основном HTML-изменения внутри сценария PHP). У меня есть базовая настройка на странице, над которой я работаю.
На странице есть 4 кнопки, и все они отправляют отчет по электронной почте на адрес нашей службы поддержки, чтобы сообщить о любых проблемах с принтером в наших лабораториях печати. У меня отправка почты работает и закодирована. Проблема в том, что каждая кнопка должна отправлять различное закодированное электронное письмо в службу поддержки.
У меня есть четыре кнопки в качестве изображений (не так много людей, как обычные скучные кнопки), вот код:
<form action="" method="post">
<br/>
<br/>
<h2>Please select issue</h2>
<br/><input type="image" src="testing/images/need_toner.png"/>
<input type="hidden" name="toner" id="toner" tabindex="1" />
<input type="image" src="testing/images/paper_jam.png" /><br> <input type="hidden" name="paper-jam" id="paper-jam" tabindex="2" /><input type="image" src="testing/images/printer_fault.png" />
<input type="hidden" name="printer-fault" id="printer-fault" tabindex="3" />
<input type="image" src="testing/images/other.png" />
<input type="hidden" name="other" id="other" tabindex="4" />
</form>
Таким образом, кнопки выглядят хорошо и хорошо выглядят и все такое, но когда вы нажимаете на любую из кнопок, он выполняет только первый PHP, если код, и игнорирует, чтобы проверить другие.
Вот мой код PHP (имейте в виду, что я на самом деле не PHP человек, я просто знаю немного общего кодирования).
<?php
$url = 'testing/floor4/marketing'; // Setting the URL parameter for PHP
if(isset($_REQUEST['toner']))
{
$to = 'XXX@XXX.com';
$subject = 'TONER NEEDED - AKRON_32 Marketing Printer';
$message = 'A request for toner has been reported for printer AKRON_32 on the 4th floor in the marketing department.';
$headers = 'From: XXX@XXX.com' . "\r\n" .
'Reply-To: XXX@XXX.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);header('Refresh: 6;URL=testing/floor4/marketing' );
echo '<center><h2>Report Sent! - Page will refresh after a few seconds.</h2></center>';
}
if(isset($_REQUEST['printer-fault']))
{
$to = 'XXX@XXX.com';
$subject = 'PRINTER FAULT - AKRON_32 Marketing Printer';
$message = 'A printer fault has been reported for printer AKRON_32 on the 4th floor in the marketing department.';
$headers = 'From: XXX@XXX.com' . "\r\n" .
'Reply-To: XXX@XXX.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
header('Refresh: 6;URL=testing/floor4/marketing' );
echo '<center><h2>Report Sent! - Page will refresh after a few seconds.</h2></center>';
}if(isset($_POST['paper-jam']))
{
$to = 'XXX@XXX.com';
$subject = 'PAPER JAM - AKRON_32 Marketing Printer';
$message = 'A paper jam has been reported for printer AKRON_32 on the 4th floor in the marketing department.';
$headers = 'From: XXX@XXX.com' . "\r\n" .
'Reply-To: XXX@XXX.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
header('Refresh: 6;URL=testing/floor4/marketing' );
echo '<center><h2>Report Sent! - Page will refresh after a few seconds.</h2></center>';
}if(isset($_POST['other']))
{
$to = 'XXX@XXX.com';
$subject = 'OTHER - AKRON_32 Marketing Printer';
$message = 'An issue marked "other" has been reported for printer AKRON_32 on the 4th floor in the marketing department.';
$headers = 'From: XXX@XXX.com' . "\r\n" .
'Reply-To: XXX@XXX.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
header('Refresh: 6;URL=testing/floor4/marketing' );
echo '<center><h2>Report Sent! - Page will refresh after a few seconds.</h2></center>';
}
?>
Так что код не самый лучший, я уверен, что если вы поможете мне, это будет здорово, как я сказал, я не PHP-кодер. Просто странно, как у меня изначально работало хорошо кодирование, прежде чем я изменил эхо-текст и перенаправил заголовки, только он ТОЛЬКО выполняет первое электронное письмо для тонера.
$_REQUEST['toner']
относится к <input type="hidden" name="toner" id="toner" tabindex="1" />
, Поскольку все входные данные имеют одинаковую форму, этот всегда отправляется, поэтому всегда выполняется первая часть кода.
Вы должны добавить name
приписать к вашему <input type="image" />
элементы:
<input type="image" name="img_need_toner" src="testing/images/need_toner.png"/>
<input type="hidden" name="toner" id="toner" tabindex="1" />
<input type="image" name="img_paper_jam" src="testing/images/paper_jam.png" /><br>
<input type="hidden" name="paper-jam" id="paper-jam" tabindex="2" />
<input type="image" name="img_printer_fault" src="testing/images/printer_fault.png" />
<input type="hidden" name="printer-fault" id="printer-fault" tabindex="3" />
<input type="image" name="img_other" src="testing/images/other.png" />
<input type="hidden" name="other" id="other" tabindex="4" />
Помня, что нажав на <input type="image" />
отправит x
а также y
координаты клика, вам нужно проверить $_POST['img_need_toner_x']
а также $_POST['img_need_toner_y']
(если нажать на первое изображение).
Все входные данные находятся внутри одного тега формы, поэтому все входные данные отправляются в установленном виде. Есть несколько вещей, которые вы могли бы сделать, не уверен, почему вы используете $ _REQUEST, если честно.
Быстрое исправление и способ дать вам немного лучшее понимание — разделить их на 4 отдельные формы и добавить атрибуты NAME и VALUE в скрытые поля. Затем проверьте массив $ _POST на предмет значения (VALUE) ошибки (NAME). Смотрите мой пример ниже.
<?php
$url = 'testing/floor4/marketing'; // Setting the URL parameter for PHP
if(isset($_POST['error'])){
$error = $_POST['error'];
if($error === 'toner' ){echo 'TONER ERROR';}
if($error === 'paper-jam' ){echo 'PAPER JAM';}
if($error === 'printer-fault' ){echo 'PRINTER FAULT';}
if($error === 'other' ){echo 'OTHER';}
}
?>
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Untitled Document</title>
</head>
<body><h2>Please select issue</h2>
<form action="" method="post">
<input type="image" src="testing/images/need_toner.png"/>
<input type="hidden" name="error" value="toner" id="toner" tabindex="1" />
</form>
<form action="" method="post">
<input type="image" src="testing/images/paper_jam.png" />
<input type="hidden" name="error" value="paper-jam" id="paper-jam" tabindex="2" />
</form>
<form action="" method="post">
<input type="image" src="testing/images/printer_fault.png" />
<input type="hidden" name="error" value="printer-fault" id="printer-fault" tabindex="3" />
</form>
<form action="" method="post">
<input type="image" src="testing/images/other.png" />
<input type="hidden" name="error" value="other" id="other" tabindex="4" />
</form>
</body>
</html>
Вы можете сделать намного больше, чтобы было чище, и есть сотни способов сделать что-то в PHP, например, вы можете использовать радиокнопки для каждой ошибки и иметь их все в одной форме, и если вы не хотите кнопку отправки Вы можете использовать JavaScript для отправки формы при нажатии переключателя. Это только одна из многих возможностей.