所以我用自己的方式用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());
提前谢谢!
答案 0 :(得分:1)
那里有许多不好的做法,让我指出一些事情。
$_POST[pass_w]
这不起作用,pass_w
不是常数。见this article。您必须使用索引的引号:$_POST['pass_w']
。
您可以使用SQL注入,并且应该使用prepared statements。
您也无法混合mysqli
和mysql
。 不要使用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()
,原因有两个:
$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的解决方案,因为我会指出同样的错误,但正如他已经提到的那样没有意义,
由于