【发布时间】:2017-01-03 06:55:23
【问题描述】:
这是我的 php 代码:-
<?php
$servername="localhost";
$username="root";
$password="";
$db_name="login";
//Create connection
$conn=new mysqli($servername,$username,$password,$db_name);
$db=mysql_select_db($conn,$db_name);
//check connection
if($db)
{
echo"Conneceted successfully";
$username=$_POST['username'];
$password=$_POST['password'];
$fname=$_POST['First_Name'];
$sname=$_POST['Second_Name'];
$query=mysqli_query($conn,"insert into accounts(First_Name,Second_Name,email_id,password) VALUES('".$fname."','".$sname."','".$username."','".$password."')");
}
else{
echo "notdone".mysql_error($conn);
}
?>
这是我的html代码:-
<html>
<head>
</head>
<body>
<form action="database\signup.php" method="post">
Email id:<input type="text" name="username"><br>
Password:<input type="text" name="password"><br>
First Name:<input type="text" name="First_Name"><br>
Second Name<input type="text" name="Second_Name"><br>
<input type="submit">
</form>
</body>
</html>
当我填写表格并提交时,我得到输出“未完成”,这是我得到的两个警告:-
警告:mysql_error() 期望参数 1 是资源、对象 在第 27 行的 C:\wamp64\www\mywebsite\database\signup.php 中给出
警告:mysql_select_db() 期望参数 1 是字符串,对象 在第 10 行的 C:\wamp64\www\mywebsite\database\signup.php 中给出
请任何人帮助我在这里做错了什么?
【问题讨论】:
-
混合
mysqli和mysql。使用mysqli_select_db -
您不能将 mysql_* 与 mysqli_* 混合使用。它们是完全不同的库。请don't use
mysql_*;mysql_*函数已过时、deprecated 且不安全。请改用MySQLi或PDO。 -
而且你真的不想创建一个自制的登录系统
-
另外,您对SQL injection 持开放态度。您需要使用准备好的语句,而不是将变量连接到查询中。见How can I prevent SQL injection in PHP?。
-
警告:编写自己的访问控制层并不容易,而且有很多机会会严重错误。这有很多危险的SQL injection vulnerabilities,因为你没有properly escape values。此代码允许 anyone 从您的站点获取 anything。 不要编写您自己的身份验证系统。像Laravel 这样的任何development framework 都带有一个内置的authentication system。