PHP iki değişken için veri kaybetme

2 Cevap php

Ben üzerinde çalışıyorum iki komut var. İlk (diğer GET değişkenleri vasıtasıyla yanı sıra bazı diğer veriler) GET $ agentid alır, sonra $ agentid bir veritabanında $ firstName ve $ lastName arar. Bir kez yapılır, (değil bir form girişi olarak) bir formda metin olarak, ekranda $ firstName, lastName $ $ ve agentid görüntüler. Veri olabilir bu yüzden form gönderildikten sonra, $ agentid ve form verilerini bir yeni kaydın parçası olarak veritabanına yazılacak, o zaman $ agentid, $ firstName, $ velastName ve form veri OTURUM değişkenlere kaydedilir Bir onay sayfası görüntülenir. Ben yaşıyorum sorun $ agentid, $ firstName, $ velastName OTURUM değişkenlere, and hatta bir e-posta değerleri koymak olmaz, veritabanına yazılmaz ki! Her iki komut ilk şey olarak bir oturumu başlatın. Ben değişkenleri unset, yazılı aşırı olmak, ya da bir şey olmadığından emin olmak için tekrar tekrar ilk senaryoyu kontrol ettik.

İşte bazı kod ve Birisi ben görünüşte değilim görebilirsiniz umuyoruz. Bu ilk komut şöyledir:

session_start();
$mySQLdb = EstablishConnection("table");
$agentID = $_GET['agent'];
$agentData = SurveyAgent($agentID);
$agentDataArray = explode(".", $agentData);
$agentFirstName = $agentDataArray[0];
$agentLastName = $agentDataArray[1];
$agentFullName = $agentFirstName." ".$agentLastName;

SurveyAgent için çağrı önceki blokta ilk satırı olarak aynı kodu kullanarak, veritabanı kendi bağlantı kurar. SurveyAgent () dahil bir dosya olduğunu. İşte SurveyAgent gelen önemli bit var ():

$mySQLselect = "SELECT lname, fname FROM table WHERE id_no='$userID';";
$sponsorData = $mySQLrow[1].".".$mySQLrow[0];
return $sponsorData;

Ben aslında bir diziye veritabanından döndürülen veri koymak ve dizi döndü, ama şeyler değil çalışma, ben sadece (kod şu anda yaptığı gibi) patlayabilir kullanmak arasında bir süre ile iki adet birleştirerek bunu değişmişti. Son olarak, ilk komut (veritabanına yazılmasından sonra) bu şekilde tamamladı:

$_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");

İkinci komut böyle başlar:

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

İkinci komut birinci senaryodan OTURUM aracılığı ile çeşitli diğer değişkenleri alır. $ Agentid ve $ agentName ben sorun yaşıyorum sadece iki değişken vardır. Ben isimleri değişkenler 'oturum anahtarlarını birlikte adları,' değiştirmeyi denedim. Ben sabit kod yerine GET yoluyla aldıktan $ agentid değeri, eğer, her şey çalışıyor. Bu ilk komut GET ve veritabanı sorgu üzerinden alınan verilerin görüntülenmesi neden bana hiç mantıklı, ama her yerde onları geçmek olmaz. Herhangi bir yardım takdir edilmektedir. Ben daha fazla kod göndermek gerekiyorsa, bunu yapacağız. Teşekkürler!

2 Cevap

Bunları bildirmek olmayan bir işlev içinde global değişkenler başvurmak için çalışıyoruz global?

Komut aynı etki vardır. Ben depolama ve veri GET veya fonksiyon SurveyAgent döndü () içtiler görüntüleme olduğum gibi Değişken kapsamı, sorun değildir. Ben aslında bir seçme sorgusu gerçekleştirir kodunu bırakmak için özür dileriz. Ben önemli ilk komut tarayıcıda vekilin ilk ve son adlarını görüntülemek mümkün olacaktır () o başka, yapmak gerekiyordu ne yapıyor ben SurveyAgent biliyorum çünkü dikkate almadı. Ancak, istendiği gibi, burada SurveyAgent gelen tam kodu ():

$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;

Yani, bu fonksiyon SurveyAgent () organıdır. Benim ana komut iki farklı yerde var_dump kullandı. İlk kez var_dump bu değişkenlerin 'veri ve onlar hakkında bilgi görüntüler, denir - ve bu beklentilerini karşılamaktadır. Denir, ikinci kez, ancak, değişkenler hepsi boş! Ben formu teslim ya da olup olmadığını belirtmek için 'gerçek' bir değeri olan 'gönderilen' adlı gizli bir form girişini kullanmak.

Şu anda olduğu gibi burada tam bir koddur:

$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

Kod formdan ek giriş işlemek için oradan devam eder. Ben bu noktadan aşağı almak zaman var_dump bir çift, yukarıdaki gibi, aramaları ekledi:

$first_name = $_POST['first_name'];
$firstNameFlag = ValidateFirstName($first_name, false);

$last_name = $_POST['last_name'];
$lastNameFlag = ValidateLastName($last_name, false);

$mailing_address = $_POST['mailing_address'];
$mailingAddressFlag = ValidateAddress($mailing_address, false);

$mailing_city = $_POST['mailing_city'];
$mailingCityFlag = ValidateCity($mailing_city, false);

$mailing_state = $_POST['mailing_state'];
$mailingStateFlag = ValidateState($mailing_state, false);

$mailing_postal_code = $_POST['mailing_postal_code'];
$mailingPostalCodeFlag = ValidatePostalCode($mailing_postal_code, false);

$primary_phone = $_POST['primary_phone'];
$primaryPhoneFlag = ValidateTelephoneAlternate($primary_phone, false);

$email = $_POST['email'];
$validator = new EmailAddressValidator();
if ($validator->check_email_address($email))
{
    $email = strtolower($email);
    $emailFlag = true;
}
else
{
    $emailFlag = false;
}

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

The output of var_dump #1 before submitting the form: string(7) "Clement" string(5) "Smith" string(13) "Clement Smith" string(6) "000002" string(13) "Clement.Smith" array(2) { [0]=> string(7) "Clement" [1]=> string(5) "Smith" }

The output of var_dump #2 before submitting the form: string(6) "Norrin" string(4) "Radd" string(19) "1234 S. Shepherd Rd" string(9) "City Name" string(5) "12345" string(2) "WI" string(10) "1234567890" string(24) "emailaddress@charter.net"

The output of var_dump #1, #3, and #5 after submitting the form: string(0) "" string(0) "" string(1) " " NULL string(1) "." array(2) { [0]=> string(0) "" [1]=> string(0) "" }

The output of var_dump #2 and #4 after submitting the form: NULL NULL NULL NULL NULL NULL NULL NULL

The output of var_dump #6 after submitting the form: string(6) "Norrin" string(4) "Radd" string(19) "1234 S. Shepherd Rd" string(9) "City Name" string(5) "12345" string(2) "WI" string(10) "1234567890" string(24) "emailaddress@charter.net"

Ben ilginç bir şekli POST verileri yeniden ithal sonra kadar teslim sonra çift sayılı var_dump aramalarda değişkenler verilerini kaybetmek bulabilirsiniz. ";" Başka ilginç bir gerçektir ki ben bunu yorumladı satırını kullanın eğer "/ / $ agentid =" 000001 olduğunu Ardından tek sayılı var_dump aramalarda değişkenler never kendi veri kaybetmek, (ve hemen üstündeki GET satırı yorum). Ayrıca, bazı değişkenler "NULL" olarak "dizesi (0)" ve diğerleri olarak rapor olurdu neden emin değilim, ama bu çok önemli düşünmüyoruz. Belki de öyle ve eğer öyleyse, lütfen bildiriniz.

Ben form gönderildikten sonra ajanın bilgilerini yeniden kazanmak ve bir fark yaparsa görebileceğiniz formu girişleri eklemeyi denemek için gidiyorum. Ben sonuçları ile geri göndeririz.

EDIT

Ben POST ajan veri yeniden kazanabilir hangi gizli form girdilerinin bir çift ekledi ve bu işleri! Bu sorunu çözmek için güçlü olmak için kritik çünkü sorun izlemek için var_dump kullanmak Öneriniz için teşekkür ederiz.