Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP表单中的mysql_query()错误_Php_Sql_Forms - Fatal编程技术网

PHP表单中的mysql_query()错误

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编程,然后有人告诉我开始用他的方式。 这当然导致我犯了一些错误。 这就是代码:

<?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
Users
where
User
='$\u POST[User\u w]'和Password='$\u POST[pass\u w]'”
更改为
mysqli\u query($con,“SELECT*from
Users
where
User
User
='$\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。