PHP表单中的mysql_query()错误
所以我用我自己的方式用PHP编程,然后有人告诉我开始用他的方式。 这当然导致我犯了一些错误。 这就是代码:PHP表单中的mysql_query()错误,php,sql,forms,Php,Sql,Forms,所以我用我自己的方式用PHP编程,然后有人告诉我开始用他的方式。 这当然导致我犯了一些错误。 这就是代码: <?php function SignIn() { $con = mysqli_connect('localhost','root','avi1574','test'); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } session_st
<?php
function SignIn()
{
$con = mysqli_connect('localhost','root','avi1574','test');
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
session_start();
if(!empty($_POST['user_w']))
{
$query = mysql_query($con, "SELECT * FROM `Users` where `User` = '$_POST[user_w]' AND Password = '$_POST[pass_w]'") or die(mysql_error());
$row = mysql_fetch_array($query) or die(mysql_error());
if(!empty($row['User']) AND !empty($row['Password'])){
$_SESSION['user_w'] = $row['Password'];
echo "Logged in.";
}
else{
echo "Sorry, wrong password."; } }}
if(isset($_POST['submit'])){
SignIn();
}
?>
<h1>My login page</h1>
<form action="tsql.php" method="POST" >
<input type="text" name="user_w" size="20"></input>
<input type="password" name="pass_w" size="20"></input>
<button type="submit" name="submit">Sumbit</button>
</form>
这里有很多不好的做法,让我指出一些事情
$_POST[pass_w]
这不起作用,因为pass\w
不是常数。看见索引必须使用引号:$\u POST['pass\u w']
您对SQL注入开放,应该使用
您也不能将mysqli
和mysql
混合使用不要使用mysql\ucode>函数,它们没有那么安全,不推荐使用
对于错误消息,您只是试图将一个资源放入mysql\u query
函数期望查询为字符串的位置,如SELECT…
。您必须切换参数
选择密码和用户名时,请使用BINARY
并将限制1
放在末尾,以确保只返回1条记录
SELECT * FROM ... WHERE BINARY username = ... LIMIT 1
还可以使用一些散列函数(请不要使用sha1和md5:-)作为密码,使用salt 您应该将正在使用的函数从mysql\u query($con,“SELECT*from
Userswhere
User='$\u POST[User\u w]'和Password='$\u POST[pass\u w]'”
更改为mysqli\u query($con,“SELECT*from
Userswhere
UserUser='$\POST[User\u w]'和Password='$\u POST[pass\u\u w]'”)/code>
(mysqli\u查询
而不是mysql\u查询
)
在进行此操作时,您可能还应该将mysql\u fetch\u array()
更改为mysqli\u fetch\u assoc()
,原因有二:
您应该使用mysql,而不是mysqli,因为它已被弃用
您正在访问$row
的关联数组键,因此需要函数返回关联数组,而mysqli\u fetch\u array()返回数字键
许多虫子
User
='$\u POST[User\u w]'应该是User
='$\u POST['User\u w']
以下是一些可能有用的链接
关于mysql函数:
关于mysqli函数:
Mysql函数是原始函数,Mysqli是Mysql函数的扩展
$query = mysql_query($con, "SELECT * FROM `Users` where User = '".$_POST['user_w']."' AND Password = '".$_POST['pass_w']."'");
但是请阅读德国Danfrom的解决方案,因为我要指出同样的错误,但正如他已经提到的,没有任何意义
谢谢您正在混合使用mysqli_
和mysqli_
函数,只需将它们全部更改为mysqli_
仅使用mysqli,然后运行sql并记录错误。@user3932619我不知道“您的方式”但“某人的方式”不是好的做法。首先,必须将UI(HTML)和逻辑(PHP)分开。然后,也只是关于数据库关注的问题,请自己阅读。如果您知道SQL注入,请允许我说,您的源代码是脆弱的。始终在$\u POST或$\u GET中对密钥使用单或双QOUTE。