Как добавить сообщение об ошибке на страницу с помощью PHP без обновления страницы? - PullRequest
0 голосов
/ 27 октября 2011

Я использую PHP для обработки формы и обработки ошибок.Ошибки работают нормально, но проблема в том, что я хочу добавить его на страницу с моей формой (если обнаружена ошибка) без обновления страницы.Это связано с тем, что пользователь может динамически добавлять строки в мою форму, и я не хочу, чтобы эти дополнительные строки были потеряны (что происходит при обновлении страницы).

На данный момент у меня просто естьследующая строка на странице формы (PHP):

<?=$errorString?>

А затем я определяю $errorString в booking-engine.php и добавляю include 'workshops.php';, который обновляет страницу, чтобы добавить ошибку.

Возможно ли добавить ошибку, не обновляя страницу, и если да, то как бы я поступил об этом?

Спасибо,

Ник

Полный текст PHP:

$row_count = count($_POST['name']);
if ($row_count > 0) {

mysql_select_db($database, $connection);
$name = array();
$workshop = array(); 
$not_found = array();

for($i = 0; $i < $row_count; $i++) {
// variable sanitation...
$name[$i] = mysql_real_escape_string(ucwords($_POST['name'][$i]));
$workshop[$i] = mysql_real_escape_string($_POST['workshop'][$i]);
}
$names = "('".implode("','",$name)."')";

$not_in = Array();

// lets say all names doesn't exist in `conference`
foreach($name as $value) {
    // names in array are keys, not values
    $not_in[$value] = true;
}


$query = mysql_query("SELECT Name FROM conference WHERE Name IN $names"); 
while(list($dbname) = @mysql_fetch_row($query)) {
    // delete those name from $not_in who exists
    unset($not_in[$dbname]);
}

// names in $not_in array are keys, not values
$not_in = array_keys($not_in);

if(empty($not_in)) {
    // its ok, all names have been found. do the magic.
    for($i = 0; $i < $row_count; $i++) {
    $sql = "UPDATE conference SET Workshop = '$workshop[$i]' WHERE Name LIKE '$name[$i]'";
    mysql_query($sql);
    $body .= "Name: " . $name[$i] . "    Workshop: " . $workshop[$i] . "\n\n";
          }

    // send email 
    $success = mail($emailTo, $subject, $body, "From: <$emailFrom>");

    // redirect to success page 
    if ($success){
      print "<meta http-equiv=\"refresh\" content=\"0;URL=thanks-workshop.html\">";
    }
    else{
      print "<meta http-equiv=\"refresh\" content=\"0;URL=error.htm\">";
    }

}else{
    $errorString = "<div id=\"error\">".'<strong>The following name(s) have not been found on our database of bookings</strong>:<div id=\"names\">'.join(', ',$not_in)."</div><div id=\"error-sub\">Please check the name(s) and try submitting your booking again.  Each name needs to be identical to the name you first booked on to the conference, as described above.</div></div>";
    include 'workshops.php';
}
}

Ответы [ 2 ]

0 голосов
/ 27 октября 2011

Вы можете использовать javascript для проверки вашей формы на стороне клиента, либо непосредственно в браузере, либо с помощью ajax для проверки на стороне сервера.

Однако вам потребуется изменить скрипт обработки на стороне сервера, чтобы автоматически добавлять дополнительные строки, добавленные посетителем, поскольку JavaScript можно отключить.

Я предполагаю, что вы все равно будете обрабатывать дополнительные строки, так что вы могли бы также добавить их обратно в форму при ее создании ...

0 голосов
/ 27 октября 2011

PHP на стороне сервера, и вы хотите, чтобы на клиенте.Поэтому вам нужно будет использовать (на стороне клиента) Javascript для отправки данных на серверную проверку PHP, а затем обновить страницу с результатами.См. AJAX для фона и jQuery.post () для некоторых практических примеров.

...