2016-09-22 2 views
0

Я пытаюсь зарегистрировать пользователей в своем приложении, и я попытался проверить, существует ли возраст, а затем остановить процесс регистрации, я написал свой код для регистрации пользователей и работал очень хорошо, но когда я пытался подтвердить регистрацию с помощью функции check_age она не работает хорошо, и по-прежнему позволяют регистрации, даже если возраст существовал может кто-нибудь сказать мне, что пропустил с моим кодом: вот мой код:PHP Вставить в MYSql после проверки существующего значения

<?php 
if($_SERVER["REQUEST_METHOD"]=="POST") 
{ 
     require "init.php"; 

     creat_Student(); 
} 
function creat_Student() 
{ 
    global $con; 
    $firstname=$_POST["firstname"]; 
    $lastname=$_POST["lastname"]; 
    $age=$_POST["age"]; 

    if(strcmp(check_age(), '0') == 0) 
    { 
    $query="Insert Into student(firstname,lastname,age) values ('$firstname','$lastname','$age');"; 
    mysqli_query($con,$query); 
    mysqli_close($con); 
    } 
    else 
    echo "not true"; 

} 
function check_age() 
{ 
    global $con; 
    $age=$_POST["age"]; 
    echo " $age"; 
    $temp_arr=array(); 

    $query="SELECT * FROM student where age ='{$age}'; "; 
    $result=mysqli_query($con,$query); 
    $num_of_rows=mysqli_num_rows($result); 

    if($num_of_rows==0) 
    return '0'; 
    else 
    return '1'; 

} 
+0

Есть несколько вещей, которые немного не по себе. Почему wold регистрация пользователя будет зависеть от возраста таким образом? Каково применение этого? Вы также нуждаетесь в санировании или использовании подготовленных заявлений. –

+0

Безопасный совет (может не решить вашу проблему), сначала инициализируйте свои переменные, прежде чем пытаться выполнить некоторые задачи на них (например: вы проверяете, больше ли число $ num_of_rows больше 0, но где вы инициализировали эту переменную?). –

+0

О, и strcmp() ??? Зачем??? return false/true или 0 и 1, если это умный, чтобы оценить целое число на true и false. –

ответ

1

Ну как упоминание выше, есть необходимость в санитации.

Но вот что я предлагаю ..

  1. Изменение check_age() функции и передать параметр возраста в нем, как показано ниже, и вернуться $num_of_rows.

    function check_age($age) 
    { 
        global $con; 
    
        $query="SELECT * FROM student where age =".$age; 
        $result=mysqli_query($con,$query); 
        return mysqli_num_rows($result); 
    } 
    
  2. Тогда в creat_Student() функции if состояние будет меняться, как ...

    function creat_Student() 
    { 
        global $con; 
        $firstname=$_POST["firstname"]; 
        $lastname=$_POST["lastname"]; 
        $age=$_POST["age"]; 
    
        if(!check_age($age)) 
        { 
        $query="Insert Into student(firstname,lastname,age) values ('$firstname','$lastname','$age');"; 
        mysqli_query($con,$query); 
        mysqli_close($con); 
    } 
    else 
        echo "not true"; 
    } 
    

Спасибо, Джей.

0

Я добавил другое поле, вы должны добавить его в базу данных и сформировать «имя пользователя», которое должно быть уникальным VAR_CHAR в базе данных.
Но вы действительно должны пойти на более OOP версию, если вы когда-нибудь захотите изучить настоящий PHP.
Создайте абстрактный класс Entity для DB, затем таблицы базы данных могут расширять его, как класс Stundent, расширяет Entity и имеет методы, такие как get, insert, delete, update. (Вы должны взглянуть на некоторые PHP-структуры).
Здесь я попытался сделать быструю и удобную коррекцию для вашего кода:

if($_SERVER["REQUEST_METHOD"]=="POST") 
{ 
    require "init.php"; 

    addStudent(); 
} 

function addStudent() 
{ 
    /** 
    * @var mysqli $conn 
    */ 
    global $conn; 
    $userName = $_POST['userName']; 
    $firstName = $_POST["firstName"]; 
    $lastName = $_POST["lastName"]; 
    $age = $_POST["age"]; 

    $query = "SELECT * FROM student WHERE username ='$userName'; "; 
    if($stmt = $conn->prepare($query)) { 
     $stmt->execute(); 
     $result = $stmt->get_result(); 
     if($result->num_rows == 0) { 
      $query = "INSERT INTO student(`firstname`, `lastname`, `age`) VALUES (?, ?, ?)"; 
      if($stmt = $conn->prepare($query)) { 
       $stmt->bind_param("ssi", $firstName, $lastName, $age); 
       $stmt->execute(); 
      } 
     } 
    } else { 
     echo "Student already registered in the database!"; 
    } 
} 
Смежные вопросы