mysqli_num_rows($)在文本编辑器中没有“彩色”,代码不起作用

时间:2016-07-18 17:44:11

标签: php mysqli

我查看了有关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>

所以,当我输入我在数据库中的用户名和密码时,没有任何反应,页面只是重新加载。

1 个答案:

答案 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'])."';";