我使用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';
}
}
答案 0 :(得分:0)
PHP是服务器端,您想要做的是在客户端上。因此,您需要使用(客户端)Javascript将数据提交到服务器端PHP验证,然后使用结果更新页面。有关背景信息,请参阅AJAX;有关实际示例,请参阅jQuery.post()。
答案 1 :(得分:0)
您可以使用javascript在客户端验证您的表单,可以直接在浏览器中使用,也可以使用ajax在服务器端进行检查。
但是,您需要更改服务器端处理脚本,以自动添加访问者添加的额外行,因为可以禁用javascript。
我假设你要处理额外的行,所以当你构建它时,你也可以将它们添加回表单......