2015-01-26 5 views
0

Что мне нужно для ввода пользовательских данных из этой формы (викторины) для отправки на мою почту. Тем не менее, я как бы потерян. Я использую базу данных для хранения вопросов, возможных ответов и правильных ответов, затем я повторяю их как форму. И затем, я использую другую страницу для оценки теста и отображения правильных/неправильных ответов (так что действие уже выполнено). Это выглядит примерно так:Форма действия + почта

<form action="./evaluate.php" method="post"> 
<?php 
$server = mysql_connect ('localhost', 'user', 'password'); 
mysql_select_db("database", $server); 

$question = mysql_query("SELECT * FROM `Questions`;"); 
$x = 0; 
while ($row = mysql_fetch_assoc($question)) 
{ 
    echo $row['question'] . '<br />'; 
    echo '<input type="radio" name="a'.$x.'" value=1 />' .$row['answer1'] . '<br />'; 
    echo '<input type="radio" name="a'.$x.'" value=2 />' .$row['answer2'] . '<br />'; 
    echo '<input type="radio" name="a'.$x.'" value=3 />' .$row['answer3'] . '<br />'; 
    echo '<input type="radio" name="a'.$x.'" value=4 />' .$row['answer4'] . '<br />'; 
    $x = $x + 1; 

} 
mysql_close($server); 
?> 

<input type="submit" name="Submit" value="Submit" /> 
<br> 
</form> 

И другой страницы:

<?php 
$server = mysql_connect ('localhost', 'user', 'password'); 
mysql_select_db("database", $server); 

$question = mysql_query("SELECT * FROM `Questions`;"); 
$x = 0; 
$score = 0; 
while ($row = mysql_fetch_assoc($question)) 
{ 
    echo $row['question'] . '?<br />'; 

    $answered = $row['answer'.$_POST['a'.$x]] ; 
    $correct = $row['correct'] ; 

    if ($answered == $correct) { 
     $score++; 
     $acolor = 'green' ; 
    } 
    else { 
     $acolor = 'red' ; 
    } 

    echo 'you answered <font color=' . $acolor . '>' . $answered . '<font color=black> <br />'; 


    echo 'the correct answer was ' . $correct . '<br />' ; 
    echo '-------------------------------------- <br />' ; 

    $x = $x + 1; 
} 
echo 'You had a total of ' . $score . ' out of ' . $x . ' questions right!'; 
mysql_close($server); 
?> 

Я хотел бы, чтобы иметь возможность автоматически отправить результаты, когда «Отправить» нажата, а затем показать пользователю (я добавлю поле для электронной почты пользователя после последнего вопроса). Может ли кто-нибудь указать мне в правильном направлении? Большое спасибо.

+0

Просто выполните поиск в Интернете для отправки почты в php и попробуйте отправить. Затем, если вы не можете сделать это, задайте вопрос. И многие люди используют phpmailer для отправки почты. Для получения дополнительной информации http://phpmailer.worxware.com/, и это дает вам дополнительную ясность https://github.com/PHPMailer/PHPMailer – sailesh

ответ

1

В коде есть несколько ошибок.

  1. Вы все еще используете функции mysql. Они устарели и не должны использоваться. Они были обескуражены уже несколько лет. Используйте mysqli или PDO и используйте подготовленные инструкции для защиты от SQL-инъекций.

  2. Вы используете SELECT * FROM questions. Вы не должны использовать select all, даже лет назад, когда мы использовали mysql. Если в вашей таблице было 100 тыс. Или миллион строк, вы создавали огромные накладные расходы, чтобы вытащить все строки. Вместо этого выберите случайным образом. Для запросов sql существует функция rand, хотя некоторые рекомендуют не использовать ее. Вместо этого получите подсчет всех ваших записей и выберите случайное число, затем потяните только ту строку, где id - это число.

  3. mysql_close закрыт, когда скрипт заканчивается в любом случае.

  4. Если пользователь снова загружает страницу evaluate.php, она снова загрузится. Если у них нет данных POST, это может привести к ошибкам повсюду и привести к неожиданным результатам. Поскольку у вас есть форма, которая отправляет данные через POST, вам нужно проверить, установлен ли POST на странице оценки. Если вы хотите, чтобы страница запускалась только в том случае, если форма была отправлена, то бросайте сообщение об ошибке или перенаправляете, когда не обнаруживаются данные POST.

Плюс несколько других второстепенных вещей, но это те основные, что я заметил с места в карьер.

Код не выглядит так, как будто он даже работает. Так вот эта половина «псевдокода» или на самом деле то, что вы пытаетесь использовать?

Ответ: Что касается ответа на ваш вопрос, вы можете использовать PHP встроенный почтовый функции: http://php.net/manual/en/function.mail.php

У вас есть все, что нужно, где эхо счет пользователя в конце файла evaluate.php. Назовите функцию почты там, чтобы отправить электронное письмо, говорящее, что вы хотите, например, дать им свой балл. Я предполагаю, что у вас есть свой адрес электронной почты? Таким образом, вы можете вытащить его из своей пользовательской записи в базе данных. Если вы этого не сделаете, вам нужно показать другую форму с указанием своего адреса электронной почты на странице оценки под их счетом. Когда они отправят это, позвоните по почте() и отправьте по электронной почте счет.

Лично я не использую встроенную функцию почты. Я использую PHPMailer, который позволяет вам использовать учетную запись SMTP-почты (например, созданную на вашем сервере). Это позволит вам использовать проверки SPF и DKIM для исходящих писем.Такие места, как Yahoo , отклоняют сообщения, если они не поддаются проверке SPF и/или DKIM! Поэтому для этого вам потребуется не менее использовать PHPMailer или альтернативный способ использования SMTP для отправки ваших писем. И убедитесь, что SPF и DKIM настроены на электронную почту и подтверждают использование онлайн-шашек. Если вы этого не сделаете, вы все равно можете отправлять электронные письма, но вы часто будете входить в папку спама. Нет, нет способа заставить себя приземлиться в папке «Входящие». Вы можете только увеличить свои шансы.

Это технически отвечает на ваш вопрос. Теперь, что касается лучшего решения для отправки электронной почты, я бы использовал SendGrid или Mailgun или что-то еще. Это похоже на использование Aweber или GetResponse, только вы можете управлять списками и отправлять электронные письма с вашего сервера через них. Для тестовой среды или сайта, который только начинается, вы можете отправлять почту с сервера на небольшой трафик. Вы бы хотели увеличить до лучшего решения для электронной почты, если оно начнет привыкать много.

+0

Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы будете быть в состоянии [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). – dmg

+0

Я ответил на его вопрос. Он спросил, как отправить электронное письмо. Этот вопрос задавался много раз. Если он хочет знать, как отправить электронное письмо, посмотрите, как отправить электронное письмо. Это не должно быть трудно отказаться от того, где он ХОЧЕТ, что письмо будет отправлено. Ему не нужно, чтобы кто-то написал для него код. - mail() было бы достаточно, и ответ был бы вопросом, потому что он не спрашивал, что является лучшим способом отправить электронное письмо, он просто спросил, КАК это сделать. Он, очевидно, положил бы функцию mail() в ТО ЖЕ МЕСТО, ЧТО ЭТО - это оценка человека! У него есть все, что ему нужно, кроме почты(). –

+0

Plus - Если никто не указывает на что-то вроде «Мы перестали использовать mysql несколько лет назад», тогда как он узнает? Если бы я использовал что-то десятилетие после истечения срока годности, я бы хотел, чтобы кто-то меня тоже впустил. Возможно, у него нет хороших ресурсов, чтобы «оставаться в курсе» или «в цикле» и следовать учебнику, написанному в 2002 году. - Я не был груб, указывая на большие проблемы, и был довольно вежлив в своем длинном ответе на его вопрос. Я хотя бы потратил 20 минут своего времени, чтобы попытаться помочь ему ... –