Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.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-首次登录页面_Php - Fatal编程技术网

PHP-首次登录页面

PHP-首次登录页面,php,Php,我试图建立一个网站,将知道如果一个用户登录到该网站之前。MYSQL表有一个用户名、密码和firstLogin字段。firstLogin字段是一个整数字段,如果用户未登录,则包含1;如果用户过去登录,则包含2 登录系统登录并启动一个会话,因为它应该这样做,因此我确定计数返回的值为1。我遇到的问题是,即使firstLogin整数设置为1,网站也会直接转到homepage.php。在执行更新操作将整数更改为2的同时,网站应该会运行welcome.php。我已经盯着这个看了大约一个星期了。希望你能帮忙

我试图建立一个网站,将知道如果一个用户登录到该网站之前。MYSQL表有一个用户名、密码和firstLogin字段。firstLogin字段是一个整数字段,如果用户未登录,则包含1;如果用户过去登录,则包含2

登录系统登录并启动一个会话,因为它应该这样做,因此我确定计数返回的值为1。我遇到的问题是,即使firstLogin整数设置为1,网站也会直接转到homepage.php。在执行更新操作将整数更改为2的同时,网站应该会运行welcome.php。我已经盯着这个看了大约一个星期了。希望你能帮忙

<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
$tbl_name=""; // Table name


// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

// username and password sent from form
$myusername=$_POST['myusername'];
$mypassword=$_POST ['mypassword'];

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT username, password,firstLogin FROM $tbl_name WHERE username='".$myusername."' and password= sha1('".$mypassword."'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row

if($count==1){

    $row = mysql_fetch_array($result);
     print_r($row); 
     exit;

    if ($row ['firstLogin']=="1")
        {
        $sql2 ="UPDATE $tbl_name SET firstLogin = '2' WHERE username ='".$myusername."'";  
        session_start();

        session_register("myusername");
        session_register("mypassword");
        header("welcome.php");
        }
        else

        {
        session_start();        
        session_register("myusername");
        session_register("mypassword");
        header("location:home.php");
        }
        }else
     {
    echo "Wrong Username or Password";
}
?>

你在做作业。这应该是一个比较

if ($row ['firstLogin'] == "1") // right

用于检索用户数据的查询中也存在错误

// -- This is wrong, missing the ending parenthesis, and will not run.
$sql="SELECT username, password,firstLogin FROM $tbl_name WHERE
    username='".$myusername."' and password= sha1('".$mypassword."'";

// -- This includes the ending parenthesis, and should run.
$sql="SELECT username, password,firstLogin FROM $tbl_name WHERE 
    username='".$myusername."' and password= sha1('".$mypassword."')";

除了Jeff Parker的修复之外,我可能建议将会话开始代码提取到函数中,这样就不会重复代码。我已经看到您的代码引入了复制粘贴错误

另外,我认为
$row['firstLogin']==1
是可以接受的,因为该行将返回一个整数而不是字符串

if ($row ['firstLogin']=="1")
    {
    $sql2 ="UPDATE $tbl_name SET firstLogin = '2' WHERE username ='".$myusername."'";  
    session_start();

    session_register("myusername"); //!! This is possibly an error, you're saving myusername as opposed to $myusername
    session_register("mypassword"); // Same as above
    header("welcome.php");  // This is possibly an error since the header is missing the "location:" part
    }
    else

    {
    session_start();        
    session_register("myusername");
    session_register("mypassword");
    header("location:home.php");
    }
可以变成

if ($row ['firstLogin']=="1")
    {
    $sql2 ="UPDATE $tbl_name SET firstLogin = '2' WHERE username ='".$myusername."'";  
    start_session_and_redirect('welcome.php');
    }
    else

    {
    start_session_and_redirect('home.php');
    }
然后放置一个函数

function start_session_and_redirect($location){
session_start();
session_register("myusername"); // I'm also wondering if that's supposed to be $myusername instead of "myusername...
session_register("mypassword");
header("location:$location");
}

如果php没有自动修复上述代码,则可能会出现错误,其中welcome.php前面没有“location:”,这可以通过具有重复功能的函数来完全避免,这是您应该始终从代码中消除的。

FYI,您的代码易受SQL注入的影响。@Daniel,只有在未转义
$myusername
的情况下才可以。这是真的,但无论如何我都要发出警告。您只是做错了。您容易受到SQL注入攻击和会话劫持的影响。$myusername=stripslashes($myusername)$mypassword=stripslashes($mypassword)$myusername=mysql\u real\u escape\u字符串($myusername)$mypassword=mysql\u real\u escape\u字符串($mypassword);这有用吗?我没有包括脚本的这一部分,因为我觉得它不适用。在您粘贴的代码中,我没有看到任何其他错误。尝试打印$row变量,并让我们知道结果是什么?(即,“print_r($row);exit;”在mysql_fetch_数组调用之后)。这没有任何作用,我将编辑问题以包含整个脚本。指出新代码中的第二个错误。更正后,使用print\u r和exit,现在应该输出一个用户行。如果是这种情况,请告诉我们它是什么,然后删除打印并退出:)在“location:welcome.php”上很好地找到了,我完全错过了那个+1.哦顺便说一句,你从来没有真正执行过更新代码,所以我非常怀疑你的
if($row['firstLogin']=“1”)
从来都不是真的,因此它总是重定向到home.php,而且即使它是真的,你也不会改变表中的值。我发现了这个,但是更新将firstLogin改为2。。。这将带回“home.php”页面,这显然是目前正在发生的事情。1是我们想要的状态,显然。。。这似乎是个错误,但我不认为这与这个具体问题有关。@Jeff Parker你确定吗?他说它实际上从来没有进入welcome.php,这意味着
$row['firstLogin']==1
永远都不是真的,而不一定是
==2
。另外,由于从来没有执行过
$sql2
,所以表中的值应该仍然是1,因为他从来没有调用过
mysql\u query($sql2)
,或者任何函数。。@另外,我想你刚刚重新表述了我说的话。我们可以同意firstLogin值不是1,并且未运行的查询应该将其设置为2。。。但我们想知道它是否应该是1。查询的运行首先取决于值是否为1,因此这是不正确的,但这是我们无法实现的步骤,因为值不是1。。。至少看起来是这样。我希望印刷品能对此有所帮助。
function start_session_and_redirect($location){
session_start();
session_register("myusername"); // I'm also wondering if that's supposed to be $myusername instead of "myusername...
session_register("mypassword");
header("location:$location");
}