【问题标题】:"Can't use function return value in write context" error in PHPPHP中的“无法在写入上下文中使用函数返回值”错误
【发布时间】:2011-04-22 17:58:45
【问题描述】:

致命错误:无法使用函数返回 第 3 行写入上下文中的值,

在哪些情况下会触发此类错误?

我的程序:

 //QUERY VARIABLE
 $query="select * form user where user_name='$user_name' and user_password='sha($user_password)'";

 //ESTABLISHING CONNECTION
 $result=mysqli_query($dbc,$query)or die('Error Querying Database');

 while($row=mysqli_num_rows($result)==1)
 {
  //SET COOKIE
  setcookie('user_name',$row['user_name']);
  setcookie('user_id',$row['id']);
  $query="select * form user";
  $result=mysqli_query($dbc,$query)or die('Error Querying Database');
  $page_url='http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/index.php';
  header('Location'.$page_url);
 }

 //TERMINATING CONNECTION
 mysqli_close($dbc);
 }
 else
 {
  $error_msg='Please type both user name and password correctly to login';
 }
//}
}
else
{
 $page_url='http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/register.php';
 header('Location'.$page_url);
}
}
if($output_form)
{
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
 <title>Mismatch - Log In</title>
 <link rel="stylesheet" href="stylesheets/style.css" media="all" />
</head>
<body class="body_style">
 <?php
 echo('<label class="signin_label">'.$error_msg.'</label>');
 ?>

<h2>Mismatch - Where Matches Happen...</h2>
<fieldset>
 <legend>Mismatch - Log In</legend>
 <form method="post" action="<?php $_SERVER['PHP_SELF']; ?>"><!--Self Referencing Form-->
 <label class="signin_label">USER NAME</label>
 <input type="text" name="user_name" title="Enter Your Account User Name" class="signin_textbox" value="<?php if(!empty($_POST['user_name']))$_POST['user_name']; ?>" /><br />
 <label class="signin_label">PASSWORD</label>
 <input type="password" name="user_pwd" title="Enter Your Account Password" class="signin_textbox" value="" /><br />
</fieldset>
 <input type="submit" name="login_submit" title="Click To Log In" value="Log In" class="button" />
<?php
}
?>
</body>
</html>

【问题讨论】:

    标签: arrays cookies fatal-error php


    【解决方案1】:

    尝试改变

    if(!isset($_COOKIE(user_id)))
    

    if(!isset($_COOKIE['user_id']))
                      ^^       ^^
    

    $_COOKIE 是一个关联数组。

    【讨论】:

    • 感谢 codaddict 我很沮丧,我漏掉了最简单的东西——语法。
    【解决方案2】:

    【讨论】:

      【解决方案3】:

      我在这里整理了你的代码:

      <?php
      
      //CLEAR THE ERROR MESSAGE
      $error_msg = '';
      
      //CHECK TO SEE IF COOKIE IS SET
      if ( ! isset($_COOKIE['user_id']))
      {
          $output_form = TRUE;
      
          if (isset($_POST['login_submit']))
          {
              //GRAB DATA
               $user_name = $_POST['user_name'];
               $user_password = $_POST['user_pwd'];
      
              if ( ! empty($user_name) && ! empty($user_password))
              { 
                  //DATABASE CONNECTION VARIABLE
                  $dbc = mysqli_connect('localhost','root','','mismatch') or die('Error Connecting To Database');
      
                  //QUERY VARIABLE
                  $query = 'SELECT id FROM `user` WHERE user_name = \''.mysql_real_escape_string($user_name).'\' and user_password = \''.sha($user_password).'\'';
      
                  //ESTABLISHING CONNECTION
                  $result = mysqli_query($dbc,$query) or die('Error Querying Database');
      
                  if (mysql_num_rows($result)) {
                      $row = mysql_fetch_assoc($result);
      
                      //SET COOKIE
                      setcookie('user_name', $user_name);
                      setcookie('user_id', $row['id']);
                      header('Location: /index.php');
                      die();
                  }
                          else {
                              $error_msg = 'Please type both user name and password correctly to login';
                          }
      
                  //TERMINATING CONNECTION
                  mysqli_close($dbc);
              }
              else {
                  $error_msg = 'Please type both user name and password correctly to login';
              }
          }
          else {
              header('Location: /register.php');
              die();
          }
      }
      
      if ($output_form)
      {
      
      ?>
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
      <html>
          <head>
              <title>Mismatch - Log In</title>
              <link rel="stylesheet" href="stylesheets/style.css" media="all" />
          </head>
          <body class="body_style">
              <?php
                  echo '<label class="signin_label">'.$error_msg.'</label>';
              ?>
              <h2>Mismatch - Where Matches Happen...</h2>
              <fieldset>
              <legend>Mismatch - Log In</legend>
              <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"><!--Self Referencing Form-->
              <label class="signin_label">USER NAME</label>
              <input type="text" name="user_name" title="Enter Your Account User Name" class="signin_textbox" value="<?php if(!empty($_POST['user_name'])) echo $_POST['user_name']; ?>" /><br />
              <label class="signin_label">PASSWORD</label>
              <input type="password" name="user_pwd" title="Enter Your Account Password" class="signin_textbox" value="" /><br />
              </fieldset>
              <input type="submit" name="login_submit" title="Click To Log In" value="Log In" class="button" />
          </body>
      </html>
      <?php
      
      }
      
      ?>
      

      我记得发现的一些问题:

      • $_COOKIE(user_id) 而不是 $_COOKIE['user_id']
      • MySQL 输入无转义
      • while() 子句有大问题。我已将其替换为 ifmysql_fetch_assoc()
      • SQL 查询说form 而不是FROM

      还有一些我可能已经忘记了。

      享受吧!

      【讨论】:

      • @vasanth_bruce - 我能问一下为什么您最初接受了我的答案,但现在接受了一个不太具体的答案吗?只是想知道......
      • 你的回答非常具有描述性,但我找到了一个小而简单的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多