Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.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会话赢了';开始_Php_Html_Mysql - Fatal编程技术网

Php 我的MySQL会话赢了';开始

Php 我的MySQL会话赢了';开始,php,html,mysql,Php,Html,Mysql,如果$count等于1但不等于1,我的MySQL会话将启动 我不知道如何修复它,我对php相当陌生,我更喜欢使用sha1 而不是BCrypt <?php //login form mysql_connect("xxxxx","xxxxxx","xxxxxx") or die( mysql_error() ); mysql_select_db("u940004575_chat"); $myusername = stripslashes( $myu

如果
$count
等于1但不等于1,我的MySQL会话将启动 我不知道如何修复它,我对php相当陌生,我更喜欢使用sha1 而不是BCrypt

  <?php
     //login form
     mysql_connect("xxxxx","xxxxxx","xxxxxx") or die( mysql_error() );
     mysql_select_db("u940004575_chat");

     $myusername = stripslashes( $myusername );
     $mypassword = stripslashes( $mypassword );
     $sha1mypassword = sha1( $mypassword );
     $myusername = mysql_real_escape_string( $myusername );
     $mypassword = mysql_real_escape_string( $mypassword );
     $sha1mypassword = mysql_real_escape_string( $sha1mypassword );
     $sql = mysql_query("SELECT id FROM users WHERE username='$myusername' and         password='$sha1mypassword'")or die( mysql_error() );
     $result = mysql_query( $sql );

     if ( $sql ) {
         $count = mysql_num_rows( $sql );
     }

     if ( $count == 1 ) {
        session_register("myusername");
        session_register("mypassword"); 
        header("location:home.php");
     } else {
        echo "Wrong Username or Password";
     }
?>
试试:

而不是:

if ( $sql ) {
    $count = mysql_num_rows( $sql );
}

看,一定是这样的:

 $sql = "SELECT id FROM users WHERE username = '$myusername' and password = '$sha1mypassword'";
 // you defined the sql query

 $result = mysql_query( $sql );
 // now you executed it and have the result

 // and you can go on with this result
 if ( $result ) {
     $count = mysql_num_rows( $result );
 }
顺便说一下,请转到
mysqli\u query()
,因为
mysql\u query()
很快就会被弃用。见官方文件。

试一试

if ( !$result ) {
   die( mysqli_error() );
} else {
    // check if $result row == 1
    if ( mysqli_num_rows( $result ) == 1 ) {
        // do stuff here
    }
}

如前所述,请使用mysqli,因为对mysql的开发已经停止

您真的应该使用PHP的PDO或MySQLi,而不是不推荐使用的mysql_*函数

注意:使用PHP PDO,您的参数将自动转义

见:

除非您绝对需要SHA1,否则您将首先查找用户,然后挑战存储的密码哈希。由于一些散列算法(如Bcrypt)无法与简单的字符串比较一起工作,因此这种方法的可移植性要高得多

这就引出了我的下一点:不要使用快速散列算法(SHA、MD5等)进行密码散列。这些散列算法用于快速散列大量数据,这意味着攻击者可以快速为密码等小数据生成反向查找表。诸如Bcrypt、Scrypt、pbkdf2等算法是专门的散列算法的好例子,这些算法的设计速度较慢或更难为其生成查找表


除非您已打开,否则不应使用
条带斜杠。如果您对PHP不熟悉,请不要在使用类似的现代替换时使用陈旧的
mysql\u query
界面。你最好花点时间熟悉一下密码,这样你就不必重新发明轮子了。另外,你做的密码加密是完全错误的。如果您使用的是SHA1,则必须使用加密盐。我还强烈建议您使用基于Bcrypt的解决方案,而不是SHA1。当有人获取您的数据库副本时,您的首选项是不相关的。像这样的参考资料可以帮助你避免犯这些错误。好的,塞巴斯蒂安,谢谢,但是你看,这只是给洛克兰指明方向。整个代码太原始了,没有必要修改,必须重新考虑、重新思考并正确地重做:)那么你真的不应该使用
mysql\u*
,而是
mysqli\u*
或PDO;)正如你所看到的,我提到了它,“顺便说一句,移动到mysqli_query(),因为mysql_query()很快就会被弃用。请参阅官方文档。”这已经奏效了,但现在所有的DEO都会出现未知用户,这是行计数的另一个。这就是它为我工作的领域。确保示例用户存在,或者您正在删除我的示例变量。示例用户行:插入
用户
用户名
密码
)值('foo','40bd001563085fc35165329ea1f5c5ecbdbbeef');
if ( !$result ) {
   die( mysqli_error() );
} else {
    // check if $result row == 1
    if ( mysqli_num_rows( $result ) == 1 ) {
        // do stuff here
    }
}
// run login script

$_SESSION['user_id'] = $row->id;

// redirect to an authenticated page
    session_start()
    // make sure logged in

    if ( ! $_SESSION['user_id'] ) {
       // not logged in
       // redirect to login
       die ('not logged in');
    }       
    $query = 'SELECT * FROM users WHERE id = :id';
    $stmt = $pdo->prepare( $query );
    $stmt->execute( array('id' => $_SESSION['user_id'] ) );

    $user = $stmt->fetch( PDO::FETCH_OBJ );
    print 'Hello, ' . $user->username;