2016-03-01 6 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] * $ /", $ name) 'to'! 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"); 'через http://www.writephponline.com/ –