我查看了有关mysqli_num_rows的所有问题。但似乎没有一个问题我有。我认为我已经得到了正确的代码,但显然不是因为num_rows不起作用。我完成了我的研究,但找不到任何可以回答我问题的东西,所以最后我寻求你的智慧Stackoverflow。 这是我的代码。正如我所说,mysqli_num_rows似乎不起作用。
我确实有mysqli connect
$dbconnect = mysqli_connect($serverName, $userName, $password,$databaseName);
session_start();
if($_POST) {
$q = "SELECT * FROM User WHERE userName = '$_POST[username]' and
userPass = SHA1('$_POST[password]')";
$r = mysqli_query($dbconnect, $q);
if(mysqli_num_rows($r) == 1) {
$_SESSION['username'] = $_POST['username'];
header('Location: index.php')
}
}
?>
<form method="post" action="login.php" role="form">
<div class="form-group">
<label for="text">username</label>
<input type="text" class="form-control" name="username" id="username" placeholder="username">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" name="password" id="password" placeholder="Password">
</div>
<button type="submit" class="btn btn-default">Submit</button>
</form>
所以,当我输入我在数据库中的用户名和密码时,没有任何反应,页面只是重新加载。
答案 0 :(得分:-1)
警告:此代码仍然对SQL injections开放,不得在生产中使用。
1:使用点.
加入包含变量或函数的字符串
而不是WHERE userName = '$_POST[username]'
使用WHERE userName = '".$_POST[username]."'
而不是and userPass = SHA1('$_POST[password]')
使用and userPass = ".SHA1($_POST[password])."
2:使用字符串索引$ _POST
而不是$_POST[username]
使用$_POST["username"]
而不是$_POST[password]
使用$_POST["password"]
3:最好在列名或表名周围使用反引号
而不是User
使用`User`
而不是userName
使用`userName`
而不是userPass
使用`userPass`
所以最终的解决方案是改变这个:
$q = "SELECT * FROM User WHERE userName = '$_POST[username]' and
userPass = SHA1('$_POST[password]')";
到此:
$q = "SELECT * FROM `User` WHERE `userName` = '".$_POST['username']."' and
`userPass` = '".SHA1($_POST['password'])."';";