用户填写第1页上的表单。表单通过POST提交到第2页。第2页使数据库插入,但需要插入存储在会话变量中的用户ID,所以我需要做一个会话启动来获取该会话变量,但这阻止我在最后使用头重定向来停止重新意见书。我不想在第1页上将用户ID设置为隐藏输入,因为这很容易欺骗。我显然做了一些不符合最佳实践的事情,我应该做些什么?
<?php
@session_start();
require_once '../Classes/Communication.php';
require_once '../Classes/Communication_db.php';
$noteDate=$_POST["noteDate"];
$noteContact = $_POST["noteContact"];
$note= $_POST["note"];
$custID = $_POST["custID"];
$comm = new Communication();
$comm->setCustomerID($custID);
$comm->setCommunicationDate(date("Y-m-d", strtotime($noteDate)));
$comm->setCustomerContactID($noteContact);
$comm->setNotes($note);
$comm->setUserID($_SESSION["userID"]);
Communication_db::saveCommunication($comm);
header("Location: ./index.php?action=newCustomer",303);
?>
答案 0 :(得分:6)
摆脱<?php
标记之前的空格。该空格被发送出去,然后您无法拨打header()
。
此外,您可以在较早的位置调用session_start(或者库正在执行此操作)。你只能打电话一次。试试这个:
if (!isset($_SESSION)) {
session_start();
}
答案 1 :(得分:1)
session_start不会阻止你设置任何标题,但是在标题声明之前吐出任何输出,即使这只是一个php警告或通知。摆脱@Ray注意到的空间,并修复在标题行之前可能产生任何类型输出的任何其他事情。