如何使用PHP在不刷新页面的情况下向页面添加错误消息?


How do I add an error message to a page using PHP without refreshing the page?

我使用PHP来处理表单和处理错误。错误工作正常,但问题是,我想把它添加到页面与我的表单打开(如果发现错误),而不刷新页面。这是因为用户可以动态地向表单添加行,我不希望这些额外的行丢失(当页面刷新时发生这种情况)。

现在,我只在我的表单(PHP)页面上有以下一行:

<?=$errorString?>

然后我在booking-engine.php中定义$errorString,并添加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';
}
}

PHP是服务器端,而您要做的是在客户端。因此,您需要使用(客户端)Javascript将数据提交给服务器端PHP验证,然后使用结果更新页面。参考AJAX的背景和jQuery.post()的一些实际例子。

您可以使用javascript在客户端验证表单,可以直接在浏览器中验证,也可以使用ajax在服务器端验证。

但是,您需要更改服务器端处理脚本,以自动添加访问者添加的额外行,因为javascript可以被禁用。

我假设你要处理额外的行无论如何,所以你不妨把它们添加回表单当你构建它…