PHP丢失两个变量的数据

PHP丢失两个变量的数据,php,session,variables,get,Php,Session,Variables,Get,我正在编写两个脚本。第一个通过GET接收$agentID,以及通过其他GET变量接收一些其他数据,然后通过$agentID在数据库中查找$firstName和$lastName。完成后,它将在屏幕上显示$firstName、$lastName和$agentID,作为表单中的文本,而不是表单输入中的文本。提交表单后,$agentID和表单数据将作为新记录的一部分写入数据库,然后,$agentID、$firstName、$lastName和表单数据存储在会话变量中,以便在确认页面上显示数据。我遇到的

我正在编写两个脚本。第一个通过GET接收$agentID,以及通过其他GET变量接收一些其他数据,然后通过$agentID在数据库中查找$firstName和$lastName。完成后,它将在屏幕上显示$firstName、$lastName和$agentID,作为表单中的文本,而不是表单输入中的文本。提交表单后,$agentID和表单数据将作为新记录的一部分写入数据库,然后,$agentID、$firstName、$lastName和表单数据存储在会话变量中,以便在确认页面上显示数据。我遇到的问题是,$agentID、$firstName、$lastName没有写入数据库、会话变量,它甚至不会将值写入电子邮件!这两个脚本首先启动一个会话。我已经反复检查了第一个脚本,以确保变量没有被过度写入、取消设置或任何事情

这里有一些代码,我希望有人能看到我显然不是什么。这来自第一个脚本:

session_start();
$mySQLdb = EstablishConnection("table");
$agentID = $_GET['agent'];
$agentData = SurveyAgent($agentID);
$agentDataArray = explode(".", $agentData);
$agentFirstName = $agentDataArray[0];
$agentLastName = $agentDataArray[1];
$agentFullName = $agentFirstName." ".$agentLastName;
对SurveyAgent的调用使用与上一个块中第一行相同的代码建立自己与数据库的连接。SurveyAgent位于包含的文件中。以下是SurveyAgent的重要信息:

$mySQLselect = "SELECT lname, fname FROM table WHERE id_no='$userID';";
$sponsorData = $mySQLrow[1].".".$mySQLrow[0];
return $sponsorData;
$userID = $userID; // $userID is passed in by the function call.
$mySQLdatabase = EstablishConnection("database");
// EstablishConnection connects to the server and selects the database provided as an argument. This code is known good, as it is used in multiple PHP scripts on the same domain.
$mySQLselect = "SELECT lname, fname FROM table WHERE id_no='$userID';";
$mySQLquery = mysql_query("$mySQLselect") or die ("This user id does not exist.");
$mySQLrow = mysql_fetch_row($mySQLquery);
$sponsorData = $mySQLrow[1].".".$mySQLrow[0];
return $sponsorData;
我最初将从数据库返回的数据放入一个数组并返回该数组,但当事情不起作用时,我将其更改为仅将两个片段连接在一起,中间有一个句点,以便像代码当前所做的那样使用explode。最后,第一个脚本在写入数据库后以这种方式结束:

$_SESSION['agentID'] = $agentID;
$_SESSION['agentName'] = $agentFullName;
$body = $agentFullName.", ".$agentID;
mail("email@address", "test", $body, "From: email@address");
header("Location: http://www.domain.com/path/to/script.php");
第二个脚本是这样开始的:

session_start();
$agentID = $_SESSION['agentID'];
$agentName = $_SESSION['agentName'];

第二个脚本通过会话从第一个脚本接收几个其他变量$agentID和$agentName是我唯一遇到问题的两个变量。我尝试过更改变量的名称,包括会话键的名称。如果我硬编码$agentID的值,而不是通过GET接收它,那么一切正常。为什么第一个脚本显示通过GET和数据库查询接收到的数据,但不将它们传递到任何地方,这对我来说毫无意义。感谢您的帮助。如果我需要发布更多的代码,我会这样做。谢谢

是否试图从函数内部引用全局变量而不声明它们为全局变量?

脚本位于同一域上。变量范围不是问题所在,因为我正在存储和显示GET接收的数据或从function SurveyAgent返回的数据。很抱歉,我遗漏了实际执行select查询的代码。我不认为这很重要,因为我知道SurveyAgent正在做它应该做的事情,否则第一个脚本将无法在浏览器中显示代理的名字和姓氏。但是,根据要求,以下是SurveyAgent的完整代码:

$mySQLselect = "SELECT lname, fname FROM table WHERE id_no='$userID';";
$sponsorData = $mySQLrow[1].".".$mySQLrow[0];
return $sponsorData;
$userID = $userID; // $userID is passed in by the function call.
$mySQLdatabase = EstablishConnection("database");
// EstablishConnection connects to the server and selects the database provided as an argument. This code is known good, as it is used in multiple PHP scripts on the same domain.
$mySQLselect = "SELECT lname, fname FROM table WHERE id_no='$userID';";
$mySQLquery = mysql_query("$mySQLselect") or die ("This user id does not exist.");
$mySQLrow = mysql_fetch_row($mySQLquery);
$sponsorData = $mySQLrow[1].".".$mySQLrow[0];
return $sponsorData;
这就是功能调查的主体。我在主脚本中的两个不同位置使用了var_dump。第一次调用var_dump时,它会显示变量的数据和有关它们的信息,这符合预期。但是,第二次调用时,变量都是空的!我使用一个名为“sent”的隐藏表单输入,其值为“true”,以指示表单是否已提交

以下是目前的完整代码:

$agentID = $_GET['agent'];
//$agentID = "000001";
$ipAddress = $_GET['ip_address'];
// Uncomment the following line and comment out the line after when a date is passed via GET.
//$date_generated = $_GET['date_generated'];
$date_generated = date("n/j/Y");
$time_generated = $_GET['time_generated'];
$first_name = $_GET['first_name'];
$last_name = $_GET['last_name'];
$mailing_address = $_GET['address1'];
$mailing_city = $_GET['city'];
$mailing_state = $_GET['state'];
$mailing_postal_code = $_GET['postal_code'];
$mailing_country = "US";
$primary_phone = $_GET['phone_number'];
$email = $_GET['email'];

$dateMassacre = explode("/", $date_generated);

$dateMassacre[0] = preg_replace("/[^\d]/", "", $dateMassacre[0]);
$dateMassacre[1] = preg_replace("/[^\d]/", "", $dateMassacre[1]);
$dateMassacre[2] = preg_replace("/[^\d]/", "", $dateMassacre[2]);

if ($dateMassacre[0] < 10)
{
    $dateMassacre[0] = "0".$dateMassacre[0];
}

if ($dateMassacre[1] < 10)
{
    $dateMassacre[1] = "0".$dateMassacre[1];
}

$date_generated = $dateMassacre[2]."-".$dateMassacre[0]."-".$dateMassacre[1];

$agentData = SurveyAgent($agentID);
$agentDataArray = explode(".", $agentData);
$agentFirstName = $agentDataArray[0];
$agentLastName = $agentDataArray[1];
$agentFullName = $agentFirstName." ".$agentLastName;

var_dump($agentFirstName, $agentLastName, $agentFullName, $agentID, $agentData, $agentDataArray); // var_dump #1
var_dump($first_name, $last_name, $mailing_address, $mailing_city, $mailing_postal_code, $mailing_state, $primary_phone, $email); // var_dump #2

if (isset($_POST['sent']))
{
    var_dump($agentFirstName, $agentLastName, $agentFullName, $agentID, $agentData, $agentDataArray); // var_dump #3
    var_dump($first_name, $last_name, $mailing_address, $mailing_city, $mailing_postal_code, $mailing_state, $primary_phone, $email); // var_dump #4
提交表单前的var_dump 1输出: string7 Clement string5 Smith string13 Clement Smith string6 000002 string13 Clement.Smith array2{[0]=>string7 Clement[1]=>string5 Smith}

提交表单前的var_dump 2输出: string6 Norrin string4 Radd string19 1234 S.Shepherd路string9城市名称string5 12345 string2 WI string10 1234567890 string24emailaddress@charter.net

提交表单后,var_dump 1、3和5的输出: string0 string0 string1空string1。数组2{[0]=>string0[1]=>string0}

提交表单后,var_dump 2和4的输出: 空空空空空空空空空空

提交表单后的var_dump 6输出: string6 Norrin string4 Radd string19 1234 S.Shepherd路string9城市名称string5 12345 string2 WI string10 1234567890 string24emailaddress@charter.net

我发现有趣的是,偶数var_dump调用中的变量在表单提交后会丢失数据,直到我从POST重新导入数据。另一个有趣的事实是,如果我使用这个注释掉的行//$agentID=000001;并注释掉它上面的GET行,那么奇数var_dump调用中的变量永远不会丢失它们的数据。此外,我不知道为什么有些变量会被报告为Strug0和其他为空,但我不认为这是非常重要的。也许是这样,如果是,请告知

我将尝试添加表单输入,在提交表单后,我可以从中重新获取代理的信息,看看这是否会产生影响。我会把结果发回来

编辑 我加了一双鞋
从den表单输入中,我可以从POST中重新获得代理的数据,这很有效!谢谢你建议使用VARYDUMP来解决这个问题,因为这对解决问题至关重要。

是你的脚本在不同的领域吗?在中间可以打印PrrtPyr或ValdUp变量,并将输出与你认为应该在那里的输出进行比较,这也是一个好主意。它也有助于显示你所有的代码。与您使用的代码相同。如图所示,$sponsorData示例执行您所说的操作。但它不会从数据库中获取数据。