PHP会话的问题

PHP会话的问题,php,session,Php,Session,更新解决问题 在检查代码之后,奇怪的问题是我错过了}else{}之后 header ('location:referraldone.php?say=blankfields'); } 我现在真的很迷茫这个会话代码。我不明白为什么会议不起作用。我哪里出错了?当有人在没有填写必填字段时出错,我试图将字段中输入的数据转到下一页。代码如下: <?php if (!$_POST['cname'] | !$_POST['cphone'] | !$_POST['caddress'] | !$_PO

更新解决问题

在检查代码之后,奇怪的问题是我错过了
}else{}
之后

header ('location:referraldone.php?say=blankfields');
}


我现在真的很迷茫这个会话代码。我不明白为什么会议不起作用。我哪里出错了?当有人在没有填写必填字段时出错,我试图将字段中输入的数据转到下一页。代码如下:

<?php

if (!$_POST['cname'] | !$_POST['cphone'] | !$_POST['caddress'] | !$_POST['ccity'] | !$_POST['cstate'] | !$_POST['czip'] | !$_POST['cbirthday']) {

$rname = $_REQUEST['rname'];
$rdate = $_REQUEST['rdate'];
$ragency = $_REQUEST['ragency'];
$rphone = $_REQUEST['rphone'];
$cname = $_REQUEST['cname'];
$cphone = $_REQUEST['cphone'];
$caddress = $_REQUEST['caddress'];
$ccity = $_REQUEST['ccity'];
$cstate = $_REQUEST['cstate'];
$czip = $_REQUEST['czip'];
$cbirthday = $_REQUEST['cbirthday'];
$medmemid = $_REQUEST['medmemid'];
$medclaim = $_REQUEST['medclaim'];
$marital = $_REQUEST['marital'];
$income = $_REQUEST['income'];
$gender = $_REQUEST['gender'];
$race = $_REQUEST['race'];
$caregiver = $_REQUEST['caregiver'];
$relationship = $_REQUEST['relationship'];
$memphone = $_REQUEST['memphone'];
$physician = $_REQUEST['physician'];
$phyphone = $_REQUEST['phyphone'];

session_start();
$_SESSION['rname'] = $rname;
$_SESSION['rdate'] = $rdate;
$_SESSION['ragency'] = $ragency;
$_SESSION['rphone'] = $rphone;
$_SESSION['cname'] = $cname;
$_SESSION['cphone'] = $cphone;
$_SESSION['caddress'] = $caddress;
$_SESSION['ccity'] = $ccity;
$_SESSION['cstate'] = $cstate;
$_SESSION['czip'] = $czip;
$_SESSION['cbirthday'] = $cbirthday;
$_SESSION['medmemid'] = $medmemid;
$_SESSION['medclaim'] = $medclaim;
$_SESSION['marital'] = $marital;
$_SESSION['income'] = $income;
$_SESSION['gender'] = $gender;
$_SESSION['race'] = $race;
$_SESSION['caregiver'] = $caregiver;
$_SESSION['relationship'] = $relationship;
$_SESSION['memphone'] = $memphone;
$_SESSION['physician'] = $physician;
$_SESSION['phyphone'] = $phyphone;

header ('location:referraldone.php?say=blankfields');
}

?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <table style="text-align:left; width: 500px; left:45px; position:relative; padding:2px; border:1px solid #1A1A1A">
    <tr>
        <td colspan="2" style="vertical-align:top; text-align:center; border:1px solid #1A1A1A; background-color:#A52A2A; color:#FFFFFF;">REFERRAL FORM</td>
    </tr>
    <tr>
    <td colspan="2"><center>Choose us as your Home Care Agency!<br />We provide services 24 hours per day, 7 days a week.<br /><br />Please submit form below and your respond time<br />will be 48 hours.<br /><br /><strong>*Bold Fields Required</strong><br /><br /></td>
    </tr>
    <tr>
        <td valign="top">Reffered By:<br /><input name="rname" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Reffered Date:<br /><input name="rdate" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Reffered Agency:<br /><input name="ragency" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Phone:<br /><input name="rphone" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br /><strong>* Client Name:</strong><br /><input name="cname" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br /><strong>* Phone:</strong><br /><input name="cphone" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br /><strong>* Address:</strong><br /><input name="caddress" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br /><strong>* City:</strong><br /><input name="ccity" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br /><strong>* State:</strong><br /><input name="cstate" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br /><strong>* Zip Code:</strong><br /><input name="czip" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br /><strong>* Birthday:</strong><br /><input name="cbirthday" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Medicaid Member ID:<br /><input name="medmemid" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Medicare Claim:<br /><input name="medclaim" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Marital Status:<br /><input name="marital" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Monthly Income:<br /><input name="income" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Gender:<br /><input name="gender" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Race:<br /><input name="race" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Caregiver Name:<br /><input name="caregiver" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Relationship:<br /><input name="relationship" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Phone:<br /><input name="memphone" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Physician:<br /><input name="physician" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top"><br />Phone:<br /><input name="phyphone" type="text" style="width:98%" /></td>
    </tr>
    <tr>
        <td valign="top" style="color:#C00000"><br />Please make sure all the <strong>BOLD</strong> fields are completed before submitting form.<br /><br /></td>
    </tr>
    <tr>
        <td align="right"><input type="reset" value="Clear Fields"> <input type="submit" name="send" value="Send" /></td>
    </tr>
    </table>
</form>


您的代码有几个明显的问题:

  • 您使用的是二进制或
    |
    而不是
    if
    子句中的布尔或
    |
  • 与其手动本地化变量,不如
    extract($\u请求)-这可能是一个错误的建议,因为您可能不理解完全在全局范围内运行的脚本的安全含义
  • 因此(更好的)替代方法是手动
    foreach($\u请求为$key=>$value)
    ,从而填充您的$\u会话。在第二个脚本中也要这样做。
    记住:Foreach循环是我们的朋友
  • 同样,html输出也可以在循环中完成,从而减少总体代码大小
  • 您可能错过了一个会话开始,或者也可能:输出过早,收到了一个您没有告诉我们的通知

在读取或写入$\u session变量之前,必须调用session\u start。在第二个页面“错误页面”中,您放置了session\u start,但在尝试读取$\u session var之后,请将其放置在“错误页面”的顶部,而不是中间。

除了已经讨论过的内容之外,您还需要将会话ID放入重定向到的URL中,如果无法使用Cookie,请将其显示

header ('location:referraldone.php?say=blankfields&'.SID);

这不会自动完成,即使在使用会话时也不会。请使用\u trans\u sid好的,提供一些重写帮助

我最终将从创建字段名和标题的描述性数组开始。这样,您就有了一个可接受的输入字段的安全列表,并简化了以后的输出

$allowed_fields = array("
      "cname" => "* Client name",  // titles may include <b>HTML</b>
      "phone" => "PHone number",
      "caddress" => "Address",
      ...
");
all表单字段输出可以通过以下方式简化:

foreach ($allowed_fields as $field=>$title) {
    ?><tr>
    <td valign="top"><?=$title?>:<br /><input name="<?=$field?>" type="text" value="<?=htmlspecialchars($_SESSION[$field])?>" style="width:98%" /></td>
    </tr><?php
}
foreach($field=>title时允许的字段){
?>


你是在开玩笑吧?发布一堆这样的代码不是一种有用的提问方式。将其缩减到演示问题的最低代码。嗯……这就是问题所在。会话由于某种原因没有注册。请查看它。抱歉@yanike,这需要基本调试和更详细的错误描述在第一页。到底什么不起作用,在哪一点上?我无法让会话从表单中的字段收集信息并在下一页中重新输入。字段保持空白。@yanike如果这是您的完整代码,这就不足为奇了,因为您没有执行
会话\u start()
?看到了,但它不起作用。还有其他建议吗?我会重新启动浏览器,可能会删除此域的Cookie,因为会话主要使用Cookie。试试看。你能给我发一个foreach($\u请求为$key=>$value)的示例吗使用我的代码。这会有帮助,因为我还是PHP初学者,而且都是自学成才的。谢谢!我发现了这个问题。我忘了在“header('location:referraldone.PHP?say=blankfields');}”之后添加“}else{}”。
session_start();
foreach ($_REQUEST as $field=>$value) {
    $_SESSION[$field] = $_REQUEST[$field];
}
foreach ($allowed_fields as $field=>$title) {
    ?><tr>
    <td valign="top"><?=$title?>:<br /><input name="<?=$field?>" type="text" value="<?=htmlspecialchars($_SESSION[$field])?>" style="width:98%" /></td>
    </tr><?php
}