2016-03-01 59 views
0

所以我的php验证有两个检查函数,首先检查一个空的名称或密码项,其次如果用户在输入他的名字时输入不需要的字符,问题是如果用户输入不需要的字符或数字在'名称'条目中,表单仍然保存到数据库中,如果用户将名称和密码字段留空并显示错误,则不会将任何内容保存到数据库,这意味着一半我的验证检查工作正常。谁能帮我吗 ?php/mysql表单验证问题

<?php 
// Connect to data base 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "myDB"; 
// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
// define variables and set to empty values 
$nameErr = $userpasswordErr = ""; 
$name = $userpassword = ""; 
    //check for error 
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    //validate name and password 
    if (
      empty($_POST["name"]) || 
      empty($_POST["userpassword"] || 
      !preg_match("/^[a-zA-Z ]*$/",$name)) 
    ) { 
     $nameErr= "* Incorrect username or password "; 
    } else { 
     $name = test_input($_POST["name"]); 
     $userpassword = test_input($_POST["userpassword"]); 

     $sql = "INSERT INTO users(name,email) 
      VALUES ('$name','$userpassword')"; 
     if ($conn->query($sql) === true) { 
      echo "New record created successfully"; 
     } else { 
      echo "Error: " . $sql . "<br>" . $conn->error; 
     } 
     $conn->close(); 
    } 
}  

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 

    return $data; 
} 

?> 
<span class="error"></span> 
<form method="post" action="<?php echo htmlspecialchars ($_SERVER["PHP_SELF"]);?>"> 
name : <input type="text" name="name" value="<?php echo $name;?>"/> 
<span class="error"><?php echo $nameErr ;?> </span> 
<br/><br/> 
password : <input type="text" name="userpassword" value="<?php echo $userpassword ; ?>"> 
<span class="error"><?php echo $userpasswordErr ;?> </span> 
<br/><br/> 
<input type="submit" name="submit" value="Submit"/> 
</form> 
+0

我想你想改变'!的preg_match( “/^[A-ZA-Z] * $ /”,$名字)'''preg_match(“/^[a-zA-Z] * $ /”,$ _ POST ['name'])'''''''''''''''现在你不会运行正在运行的正则表达式,你的空的$ name变量。 – Drew

+0

我建议你看看[Respect Validator](http://respect.github.io/Validation/)。您可以节省大量时间,而不是再次发明轮子。 – Sanoob

回答

0

在正则表达式检查的$name$_POST['name']

if(empty($_POST["name"]) || empty($_POST["userpassword"] || !preg_match("/^[a-zA-Z ]*$/",$_POST["name"]))) 
{ 
    $nameErr= "* Incorrect username or password "; 
} 
+0

这样做,仍然没有任何变化,存在相同的问题 –

+0

您的正则表达式正在工作检查在这里:http://regexr.com/3ctoa –

+0

也验证'echo preg_match(“/^[a-zA-Z] * $ /” ,“hhhhh45435sdf”);'over http://www.writephponline.com/ –