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

如何在不刷新页面的情况下使用PHP向页面添加错误消息?,php,forms,error-handling,refresh,Php,Forms,Error Handling,Refresh,我正在使用PHP处理表单并处理错误。这些错误可以正常工作,但问题是,如果在不刷新页面的情况下发现错误,我希望在打开表单的情况下将其添加到页面中。这是因为用户可以向我的表单动态添加行,我不希望在刷新页面时丢失这些额外的行 现在,我的表单PHP页面上只有以下几行内容: <?=$errorString?> PHP是服务器端的,您要做的是在客户端。因此,您需要使用客户端Javascript将数据提交到服务器端PHP验证,然后使用结果更新页面。有关背景和一些实际示例,请参阅。您可以使用jav

我正在使用PHP处理表单并处理错误。这些错误可以正常工作,但问题是,如果在不刷新页面的情况下发现错误,我希望在打开表单的情况下将其添加到页面中。这是因为用户可以向我的表单动态添加行,我不希望在刷新页面时丢失这些额外的行

现在,我的表单PHP页面上只有以下几行内容:

<?=$errorString?>

PHP是服务器端的,您要做的是在客户端。因此,您需要使用客户端Javascript将数据提交到服务器端PHP验证,然后使用结果更新页面。有关背景和一些实际示例,请参阅。

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

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


我假设您无论如何都要处理这些额外的行,所以您最好在构建表单时将它们添加回表单…

Doh!就在我以为我快接近的时候。。。请原谅我太慢了,我对整个PHP、Javascript和Ajax世界都相当陌生。现在,我已经在上面问题的末尾加入了PHP,它根据MySQL表中已有的数据验证表单。你是说,使用Ajax,我可以将验证保持在PHP文件中吗?另外,您是说我需要使用PHP脚本重新添加额外的行吗?如果是,他们是否会保留已输入的数据?谢谢,多谢!就在我以为我快接近的时候。。。请原谅我太慢了,我对整个PHP、Javascript和Ajax世界都相当陌生。现在,我已经在上面问题的末尾加入了PHP,它根据MySQL表中已有的数据验证表单。你是说,使用Ajax,我可以将验证保持在PHP文件中吗?谢谢,不完全是。通常,浏览器通过在GET或POST中加载新页面来与PHP对话。发布表单时,浏览器会提交所有数据并加载新页面。使用AJAX,您可以使用Javascript发出该请求。因此,PHP不是直接与用户对话,而是与Javascript对话。然后Javascript与用户对话。感谢您提供的信息。刻痕
$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';
}
}