我正在尝试在我的应用程序中注册用户,我试图检查年龄是否存在然后停止注册过程,我编写了我的代码来注册用户并且工作得很好但是当我尝试使用check_age函数验证注册时即使年龄已经存在,它也不能很好地工作并且仍然允许注册,任何人都可以告诉我我的代码错过了什么: 这是我的代码:
<?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 :(得分: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);
}
然后在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";
}
谢谢,杰伊。
答案 1 :(得分:0)
我添加了另一个字段,你应该将它添加到数据库并形成数据库中应该是唯一VAR_CHAR的“userName”。
但是如果你想学习真正的PHP,你应该去寻求更多的OOP版本。
为DB创建一个抽象的Entity类,然后数据库表可以像类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!";
}
}