Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.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_Password Protection - Fatal编程技术网

PhP-用户名和密码验证工作,但是,清除其他行

PhP-用户名和密码验证工作,但是,清除其他行,php,password-protection,Php,Password Protection,我有一个html页面,带有用户名和密码的登录表单。当人们输入正确的密码时,它将把他们带到php页面和他们的账单。如果密码不正确,它将显示错误消息,然后退出程序。我让登录功能开始工作。然而,这也影响了我的其他计划。现在,每当我尝试在item/amount行中写入内容时,它也会显示错误消息并退出程序。我知道这与$numresult>0条件有关。当我取消该条件时,我的金额/项目行可以工作,但登录页面也允许用户名/密码中的空白条目登录。你知道我如何确保人们必须输入正确的密码(不是空白条目)才能登录,同时

我有一个html页面,带有用户名和密码的登录表单。当人们输入正确的密码时,它将把他们带到php页面和他们的账单。如果密码不正确,它将显示错误消息,然后退出程序。我让登录功能开始工作。然而,这也影响了我的其他计划。现在,每当我尝试在item/amount行中写入内容时,它也会显示错误消息并退出程序。我知道这与$numresult>0条件有关。当我取消该条件时,我的金额/项目行可以工作,但登录页面也允许用户名/密码中的空白条目登录。你知道我如何确保人们必须输入正确的密码(不是空白条目)才能登录,同时在第二页中获取我的项目/金额行的行为正常吗?我的代码如下。对不起,有点长

</head>

<body style="font-family: Arial, Helvetica, sans-serif; color: black;" onload=>
<h1>My Bills</h1>
<form method=post>

<?php
//*************************************************
//Connect to Database
//*************************************************


//*************************************************
//Verify password and username
//*************************************************
$password = $_POST['password']; //retrieve variables for password and userId
$userid = $_POST['userid'];

$query  = "SELECT * FROM valid_logon WHERE userid = '$userid' AND
           password='$password'";  //get query from database

$result = mysql_query($query);

$numresults = mysql_num_rows($result); //get row number
$row = mysql_fetch_array($result); //get array into variable
$dbuserid = $row['userid'];
$dbpassword = $row['password'];

if ($numresults>0)
{
   if ($userid == $dbuserid && $password == $dbpassword)
   {
       process();
   }   
}else{
   err_msg();
}


//*************************************************
//Error message.
//*************************************************
function err_msg()
{
   print "The username and/or password you have entered are invalid.";
   print "</body>";
   print"</html>";
   exit;
}

//*************************************************
//Write out records with data if they exist.
//*************************************************
function process()
{
  print "<table>";
  print "<tr><th>Item</th><th>Amount</th></tr>";

  $action = $_POST['action'];

  if ($action == 'update')
  {
$write_ctr = 1;

// Delete all rows in the table

$query  = "DELETE FROM n1417_expenses ";

$result = mysql_query($query);

if (mysql_error()) {
    echo("<br>MySQL Error - Cannot delete from table: ".mysql_error());
    echo("<br>SQL Statement: ".$query);
}


// Loop through table and insert values into the database

while (true)
{
    $item_name = 'item'."$write_ctr";
    $item_value = $_POST[$item_name];

    $amount_name = 'amount'."$write_ctr";
    $amount_value = $_POST[$amount_name];

    if (empty($item_value)) 
    {
        break;
    }

    // Insert an item to the table
    if(!is_numeric($amount_value))
    { 
        print "<font color=red>I'm sorry, amount \"".$amount_value."\" is not a valid number.</font><br>\n";
    }else{

        $query  = "INSERT INTO n1417_expenses (item, amount) 
                  VALUES('".$item_value."','".$amount_value."') ";

        $result = mysql_query($query);
    }

    if (mysql_error()) 
    {
        echo("<br>MySQL Error - Cannot insert a row into table: ".mysql_error());
        echo("<br>SQL Statement: ".$query);
    }

    $write_ctr++;
}

 }



//*************************************************
//Now Select from table and Display
//*************************************************

$err_cnt = 0;
$read_ctr = 1;

$query  = "SELECT item, amount FROM n1417_expenses ";

$result = mysql_query($query);

if (mysql_error()) {
echo("<br>MySQL Error- Cannot select from table: ".mysql_error());
echo("<br>SQL Statement: ".$query);
}

if (!empty($result))
{
$rowresults = mysql_num_rows($result);

if ($rowresults > 0)
{
    for ($read_ctr=1; $read_ctr<=$rowresults; $read_ctr++)
    {
        $row = mysql_fetch_array($result);

        $item_value = $row['item'];
        $item_name = 'item'."$read_ctr";

        $amount_value = $row['amount'];
        $amount_name = 'amount'."$read_ctr";

        print "<tr>";
        print "<td><input type=text name=$item_name value='$item_value'></td>\n";
        print "<td><input type=text name=$amount_name value='$amount_value'></td>\n";
        print "<td>";
        print "</tr>";

        $total_amt = $total_amt + $amount_value;

    }
}
}



//*************************************************
//Now write the blank lines
//*************************************************

for ($i = $read_ctr; $i < $read_ctr + 2; $i++)
{

    $item_name = 'item'."$i";
$amount_name = 'amount'."$i";

print '<tr>';
print "<td><input type=text name=$item_name value=''></td>\n";
print "<td><input type=text name=$amount_name value=''></td>\n";
print '</tr>';
}

print "</table>";
print "<br>Total Bills: $total_amt";

}
?>

<br><input type=submit value=Submit>
<br<br>

<!--  Hidden Action Field -->
<input type=hidden name=action value=update>

</form>

我的账单

要回答张贴的问题,您的问题似乎是在用户提交表单时再次检查用户名和密码。由于字段不存在,查询将查找零行,从而触发错误消息

有许多方法可以解决您的问题,其中一种方法是使用来记住用户已登录。这可以通过如下更改密码检查来实现:

session_start();

if (!isset($_SESSION['logged_in']) || !$_SESSION['logged_in']) 
{

    $password = $_POST['password']; //retrieve variables for password and userId
    $userid = $_POST['userid'];

    $query  = "SELECT * FROM valid_logon WHERE userid = '".mysql_real_escape_string($userid)."' AND
               password='".mysql_real_escape_string($password)."'";  //get query from database

    $result = mysql_query($query);

    $numresults = mysql_num_rows($result); //get row number
    $row = mysql_fetch_array($result); //get array into variable
    $dbuserid = $row['userid'];
    $dbpassword = $row['password'];

    if ($numresults>0)
    {
       if ($userid == $dbuserid && $password == $dbpassword)
       {
           $_SESSION['logged_in'] = TRUE;
           process();
       }   
    }else{
       err_msg();
    }
}

我已经尽可能地保留了与原始代码相似的代码,但是我将回应上面关于需要保护SQL调用的评论。如果可能的话,看看如何使用,或者至少按照上面的方法开始使用。

要回答发布的问题,您的问题似乎是在用户提交表单时再次检查用户名和密码。由于字段不存在,查询将查找零行,从而触发错误消息

有许多方法可以解决您的问题,其中一种方法是使用来记住用户已登录。这可以通过如下更改密码检查来实现:

session_start();

if (!isset($_SESSION['logged_in']) || !$_SESSION['logged_in']) 
{

    $password = $_POST['password']; //retrieve variables for password and userId
    $userid = $_POST['userid'];

    $query  = "SELECT * FROM valid_logon WHERE userid = '".mysql_real_escape_string($userid)."' AND
               password='".mysql_real_escape_string($password)."'";  //get query from database

    $result = mysql_query($query);

    $numresults = mysql_num_rows($result); //get row number
    $row = mysql_fetch_array($result); //get array into variable
    $dbuserid = $row['userid'];
    $dbpassword = $row['password'];

    if ($numresults>0)
    {
       if ($userid == $dbuserid && $password == $dbpassword)
       {
           $_SESSION['logged_in'] = TRUE;
           process();
       }   
    }else{
       err_msg();
    }
}

我已经尽可能地保留了与原始代码相似的代码,但是我将回应上面关于需要保护SQL调用的评论。如果可能的话,看看如何使用,或者至少按照上面的方法开始使用。

FYI,您对SQL注入非常开放,如果您还没有进行过SQL注入,您将被黑客攻击。学习使用PDO进行预先准备好的查询以完全避免这个问题。我的2美分建议是,如果你想要答案,你应该隔离引起你头痛的代码,只问一个与之相关的问题。仅供参考,你对SQL注入非常开放,如果你还没有被入侵,你将被黑客攻击。学习使用PDO进行准备好的查询,以完全避免这个问题。我的2美分建议是,如果你想要答案,你应该隔离引起你头痛的代码,只问与之相关的问题。在处理用户提交的变量时,一定要试着习惯准备好的语句。非常容易做到,一旦你习惯了,你就再也不会使用直接的mysql查询了。在处理用户提交的变量时,一定要尝试并习惯准备好的语句。非常容易做到,一旦你习惯了,你就再也不会使用直接的mysql查询了。