PHP表单中的mysql_query()错误

时间:2014-08-18 08:20:21

标签: 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_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>

当我提交表单时,我收到以下错误: Warning: mysql_query() expects parameter 1 to be string, object given in test-main/htdocs/test/tsql.php on line 10

第10行是:$query = mysql_query($con, "SELECT * FROM用户where用户= '$_POST[user_w]' AND Password = '$_POST[pass_w]'") or die(mysql_error());

提前谢谢!

4 个答案:

答案 0 :(得分:1)

那里有许多不好的做法,让我指出一些事情。

$_POST[pass_w]

这不起作用,pass_w不是常数。见this article。您必须使用索引的引号:$_POST['pass_w']

您可以使用SQL注入,并且应该使用prepared statements

您也无法混合mysqlimysql不要使用mysql_函数,它们不安全且不推荐使用。

对于您的错误消息,您只是尝试将资源放入mysql_query,其中函数期望查询为字符串,如SELECT...。您必须切换参数。

在选择密码和用户名时,请使用BINARY确保区分大小写 并将LIMIT 1放在最后,以确保只有1条记录作为回报。

SELECT * FROM ... WHERE BINARY username = ... LIMIT 1

还使用一些散列函数(不是sha1而不是md5请:-)作为密码,加盐!

答案 1 :(得分:0)

您应该将mysql_query($con, "SELECT * FROM用户where用户= '$_POST[user_w]' AND Password = '$_POST[pass_w]'")改为mysqli_query($con, "SELECT * FROM用户where用户= '$_POST[user_w]' AND Password = '$_POST[pass_w]'")使用的功能 (mysqli_query代替mysql_query)。

虽然您正在使用它,但您也应该将mysql_fetch_array()更改为mysqli_fetch_assoc(),原因有两个:

  1. 你应该使用mysql而不是mysqli,因为它已被弃用
  2. 您正在访问$row的关联数组键,因此您需要函数返回关联数组whild mysqli_fetch_array()返回数字键。

答案 2 :(得分:0)

很多错误 User =&#39; $ _ POST [user_w]&#39;应为User =&#34;。$ _ POST [&#39; user_w&#39;]。&#34;

以下是一些可能有用的链接

关于mysql函数:http://php.net/manual/en/book.mysql.php

关于mysqli函数:http://php.net/manual/en/book.mysqli.php

Mysql函数是原始函数,而Mysqli是Mysql函数的扩展

答案 3 :(得分:0)

$query = mysql_query($con, "SELECT * FROM `Users` where User = '".$_POST['user_w']."' AND  Password = '".$_POST['pass_w']."'");

但是阅读DanFromGermany的解决方案,因为我会指出同样的错误,但正如他已经提到的那样没有意义,

由于