你好,我有一个问题,
我无法弄清楚为什么我的脚本无法正常工作。有人可以帮我弄清问题是什么吗?
我的目的是通过(php_self)在同一页面上验证表单,所以当某些内容无效时,它会通过输入旁边的echo函数显示错误。
问题是它没有回应错误
----------------这是PHP代码-----------------
//define variables and set te empty//
$name = $email = $remark = "";
// errors //
$ErrEmail = $ErrName = $ErrRemark = "";
// pre match //
$ErrMatchEmail = "";
// succes & fail //
$error = $succes = "";
if (isset($_POST['submit'])) {
$name = Trim(stripslashes($_POST['name']));
$lastname = Trim(stripslashes($_POST['lastname']));
$number = Trim(stripslashes($_POST['number']));
$email = Trim(stripslashes($_POST['email']));
$remark = Trim(stripslashes($_POST['remark']));
if (empty($name)) {
$ErrName = 'Empty';
} else {
$ErrName = '';
}
if (empty($email)) {
$ErrEmail = 'Empty';
} else {
$ErrEmail = '';
}
if (empty($remark)) {
$ErrRemark = 'Empty';
} else {
$ErrRemark = '';
}
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) {
$ErrMatchEmail = "email is not valid";
} else {
$ErrMatchEmail = "";
}
if (empty($ErrEmail) && empty($ErrName) && empty($ErrRemark) && empty($ErrMatchEmail)) {
$to = 'contact@domain.nl';
$subject = 'Contact Form: domain.nl';
$body = 'test';
$headers = 'From: '.$email."\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
if (mail($to, $subject, $body, $headers)) {
$succes = 'form is send';
}
} else {
$error = 'something went wrong';
}
}
--------------这个HTML代码----------------
<form action="<?=$PHP_SELF?>" method="POST" enctype="multipart/form-data">
<input placeholder="Name*" name="name" type="text"/><?php echo $ErrName; ?>
<input placeholder="Last name" name="lastname"/>
<input placeholder="Number" name="number"/>
<input placeholder="E-mail*" name="email"/><?php echo $ErrMatchEmail; ?><?php echo $ErrEmail; ?>
<textarea placeholder="Remark/Question*" name="remark"/></textarea><?php echo $ErrRemark;
<button type="submit">Send</button><button type="Reset">Reset</button>
<?php echo $succes; echo $error; ?>
</form>
答案 0 :(得分:1)
尝试以下代码。验证用户输入不需要多个变量。我使用数组来存储所有错误。
<?php
if(isset($_GET['flag']) and isset($_GET['msg'])) {
if($_GET['flag'] == 1 ) {
echo "<span style='color: green'>$_GET[msg]</span>";
}
if($_GET['flag'] == 0) {
echo "<span style='color: red'>$_GET[msg]</span>";
}
}
?>
<form action="<?=$_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
<table>
<tr>
<td><input type="text" name="firstname" placeholder="First Name*"/></td>
</tr>
<tr>
<td><input type="text" name="lastname" placeholder="Last Name"/></td>
</tr>
<tr>
<td><input type="number" name="number" placeholder="Number"/></td>
</tr>
<tr>
<td><input type="email" name="email" placeholder="Email*"/></td>
</tr>
<tr>
<td><textarea name="remarks" placeholder="Remarks/Questions*" cols="30" rows="10"></textarea></td>
</tr>
<tr>
<td><input type="submit" value="Submit" name="btnSub"/> <input type="reset" value="Reset"/></td>
</tr>
</table>
</form>
<?php
if (isset($_POST['btnSub'])) {
$errors = array();
if (empty($_POST['firstname'])) {
$errors[] = 'Please enter your first name';
} else {
$firstname = $_POST['firstname'];
}
if (empty($_POST['lastname'])) {
$lastname = '';
} else {
$lastname = $_POST['lastname'];
}
if (empty($_POST['number'])) {
$number = '';
} else {
$number = $_POST['number'];
}
if (empty($_POST['email'])) {
$errors[] = 'Please enter your email address';
} else {
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$errors[] = 'Invalid email address supplied';
} else {
$email = $_POST['email'];
}
}
if (empty($_POST['remarks'])) {
$errors[] = 'Please enter your remarks or question';
} else {
$remarks = $_POST['remarks'];
}
//Now check for the errors
if (!empty($errors)) {
$error = '';
foreach($errors as $err) {
$error .= $err.'<br>';
}
header("Location: $_SERVER[PHP_SELF]?flag=0&msg=$error");
exit;
}
$to = 'contact@domain.nl';
$subject = 'Contact Form: domain.nl';
$body = 'test';
$headers = 'From: '.$email."\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
if(mail($to,$subject,$body,$headers)){
$success = 'Form is send';
header("Location: $_SERVER[PHP_SELF]?flag=1&msg=$success");
exit;
} else {
$error = 'Something goes wrong...';
header("Location: $_SERVER[PHP_SELF]?flag=0&msg=$error");
exit;
}
}
答案 1 :(得分:0)
您检查名为submit
的表单字段,但表单中没有。检查您的表单验证,如下所示:
if(isset($_POST))
甚至更好
if(!empty($_POST))
或者只是检查方法
if($_SERVER['REQUEST_METHOD'] == 'POST')
有很多方法可以检查表单是否已经提交,而不依赖于特定的字段检查。通过检查,如果必须删除该字段,则您的验证将不再有效。
答案 2 :(得分:0)
您需要先在此行中更改代码中的部分行
if (isset($_POST['submit'])){
将其更改为
if($_SERVER['REQUEST_METHOD']=='POST'){
第二个按钮不发送信息,
更改HTML CODE中的这一行
<button type="submit">Send</button>
到此
<input type="submit" value='submit'/>
同样重置按钮
第二次改变形式动作
action="<?=$PHP_SELF?>"
到
action=""
并记住这不要在php中发送信息
由于
答案 3 :(得分:0)
required
。见下文
<form action="<?=$PHP_SELF?>" method="POST" enctype="multipart/form-data">
<input placeholder="Name*" name="name" type="text" required/><?php echo $ErrName; ?>
<input placeholder="Last name" name="lastname" required/>
<input placeholder="Number" name="number" required/>
<input placeholder="E-mail*" name="email" required/><?php echo $ErrMatchEmail; ?><?php echo $ErrEmail; ?>
<textarea placeholder="Remark/Question*" name="remark" required/></textarea><?php echo $ErrRemark;
<button type="submit">Send</button><button type="Reset">Reset</button>
<?php echo $succes; echo $error; ?>
</form>
此外,你有你的php post方法听$ _POST [&#34;提交&#34;]但是提交按钮没有给出名字。以下是整体代码的外观:
<?php
//define variables and set te empty//
$name = $email = $remark = "";
// errors //
$ErrEmail = $ErrName = $ErrRemark = "";
// pre match //
$ErrMatchEmail = "";
// succes & fail //
$error = $succes = "";
if (isset($_POST['submit'])) {
$name = Trim(stripslashes($_POST['name']));
$lastname = Trim(stripslashes($_POST['lastname']));
$number = Trim(stripslashes($_POST['number']));
$email = Trim(stripslashes($_POST['email']));
$remark = Trim(stripslashes($_POST['remark']));
if (empty($name)) {
$ErrName = 'Empty';
} else {
$ErrName = '';
}
if (empty($email)) {
$ErrEmail = 'Empty';
} else {
$ErrEmail = '';
}
if (empty($remark)) {
$ErrRemark = 'Empty';
} else {
$ErrRemark = '';
}
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/", $email)) {
$ErrMatchEmail = "email is not valid";
} else {
$ErrMatchEmail = "";
}
if (empty($ErrEmail) && empty($ErrName) && empty($ErrRemark) && empty($ErrMatchEmail)) {
$to = 'contact@domain.nl';
$subject = 'Contact Form: domain.nl';
$body = 'test';
$headers = 'From: '.$email."\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
if (mail($to, $subject, $body, $headers)) {
$succes = 'form is send';
}
} else {
$error = 'something went wrong';
}
}
?>
<form action="<?php echo $_SERVER["PHP_SELF"];?>" method="POST" enctype="multipart/form-data">
<input placeholder="Name*" name="name" type="text" required/><?php echo $ErrName; ?>
<input placeholder="Last name" name="lastname" required/>
<input placeholder="Number" name="number" required/>
<input placeholder="E-mail*" name="email" required/><?php echo $ErrMatchEmail; ?><?php echo $ErrEmail; ?>
<textarea placeholder="Remark/Question*" name="remark" required/></textarea><?php echo $ErrRemark;?>
<button type="submit" name="submit">Send</button><button type="Reset">Reset</button>
<?php echo $succes; echo $error; ?>
</form>
答案 4 :(得分:0)
例如,而不是写这个:
<input placeholder="Name*" name="name" type="text"/>
在斜杠前面添加“必需”。
<input placeholder="Name*" name="name" type="text" required/>