0

如果用户没有登录,但是点击到了订单页面,那么它应该被重定向到登录页面。然而,它并没有按预期运行。它只停留在登录页面,无法登录或进入订购页面。wt是问题吗??

订单::

// Connects to your Database 
$connect = mysql_connect("127.0.0.1","root","") or die("not connecting");
mysql_select_db("shop") or die("no db :'(");

// is the one accessing this page logged in or not?
if ( !isset($_SESSION['logged-in']) || $_SESSION['logged-in'] !== true) 
{

// not logged in, move to login page
header('Location: member_login.php');
exit();
}

else
{

//count the number of food
$food_num = mysql_query("select count(*) as sum from food");
$ttl_num= mysql_fetch_array($food_num);

//select the price of each food item
for($i=1; $i<=$ttl_num['sum']; $i++){
$price_query = mysql_query("SELECT price FROM food where foodid = '$i'");
$price_array= mysql_fetch_array($price_query);
$price_food[$i]=$price_array['price'];

//select the name of each food item
$name_query = mysql_query("SELECT name FROM food where foodid = '$i'");
$name_array= mysql_fetch_array($name_query);
$name_food[$i]=$name_array['name'];

 mysql_close($connect); 
 }
 }  


?>

登录检查:

<?php

$connect = mysql_connect("127.0.0.1","root","") or die("not connecting");
mysql_select_db("shop") or die("no db :'(");


$form = $_POST['submit'];
$email = $_POST['loginID_member'];
$password = $_POST['password_member'];

if( isset($form) ) 
{

if( isset($email) && isset($password) && $email !== '' && $password !== '' ) 
{ 


$sql = mysql_query("SELECT * FROM member WHERE memberemail='$email' and memberpw='$password';");

if( mysql_num_rows($sql) != 0 ) { //success

 $_SESSION['logged-in'] = true;

 header('Location: order_form.php');

 exit;

  } 

 else 

   { 

echo "<script>alert('Incorrect email or password!');window.location.href='member_login.php';</script>";

  }

  } 

  else

   { 

die('<script type="text/javascript">alert("Please enter a username and password!");location.replace("member_login.php")</script>');

 }

 }


  mysql_close($connect); 
?>
4

1 回答 1

1

在这里我有几点建议:

  • 只需单独使用会话开始,因此您根本不需要$_COOKIE(如果您希望会话在浏览器会话之间持续存在,可以稍后添加)
  • 在您访问之前,$_SESSION您需要调用session_start(),让 PHP 知道您需要会话功能
  • 因此,您的第一个检查应该是:

    if (isset($SESSION['logged'])) {
        header("order_form.php");
        exit();
    }
    
  • 您现有的if子句中有两个错误:您拼错了要重定向到的文件,并且您没有使用大括号,因此将始终执行退出。对于控制块(循环和条件),您应该始终使用大括号(一些样式指南鼓励单行无括号if块,我认为这是不好的做法)

我建议你解决这些问题,解决你的 SQL 注入安全问题,然后从那里开始。下一步将是调试,即在会话中设置某些内容,并确保它在下一个请求时在会话数组中可用。

如果您可以设置一个版本控制系统(例如 Git),那么事情会变得容易得多,这样您就可以定期对您的工作进行快照。然后,如果出现问题,您可以回滚到最后一个众所周知的点。

于 2013-05-23T12:59:38.767 回答