2011-06-04 44 views
1

我有一個我爲朋友做的基於網絡的自定義門票銷售,每當我嘗試它(在任何瀏覽器上),它的工作非常好。然而,當它昨天上線時,有些人試圖預訂門票,他們會收到他們的電子郵件,稱他們的座位已經預訂(一切正常),但系統只會記錄其中一些座位。無法調試隨機錯誤

假設他們預訂了A1 - A10,他們收到一封電子郵件說他們預訂了這些服務,但系統只會預訂A1 - A5(或者A6左右,看起來是隨機的)。另外,這種情況不會發生在每個人都隨機發生的情況下(至少我還沒有找到合適的理由讓它發生)。

的代碼是這裏的時候,我訂機票:

$cantTotal=0; 

$boletosF1 = $_POST['funcion1Hidden']; 
if($boletosF1!=""){ 
$lugares = explode(" ", $boletosF1); 
$cant = count($lugares); 
$cantTotal += $cant; 

$f1 = ""; 
$sqlAP = "SELECT * FROM apartados"; 
if ($resultAP = mysql_query($sqlAP)) { 
    while ($rowAP = mysql_fetch_array($resultApP)) { 
     $f = $rowAP['funcion']; 
     $lugar = $rowAP['lugar']; 
     $count++; 
     if ($f == "F1") { 
      $f1.= ($lugar . " "); 
     } 
    } 
} 
$sqlPag2 = "SELECT * FROM pagados"; 
if ($resultPag2 = mysql_query($sqlPag2)) { 
    while ($rowPag2 = mysql_fetch_array($resultPag2)) { 
     $f = $rowPag2['funcion']; 
     $lugar = $rowPag2['lugar']; 
     $count++; 
     if ($f == "F1") { 
      $f1.= ($lugar . " "); 
     } 
    } 
} 
$func = explode(" ", $f1); 
$cantUtilizados = count($func); 
$repetidos = 0; 
for ($int = 0; $int < $cant; $int++) { 
    for ($r = 0; $r < $cantUtilizados; $r++) { 
     if ($func[$r] == $lugares[$int]) { 
      $repetidos++; 
     } 
    } 
} 
if ($repetidos > 0) { 
    redirect("apartadoBoletos.php?error=1"); 
} 
} 
$boletosF2 = $_POST['funcion2Hidden']; 
if($boletosF2!=""){ 
$lugares2 = explode(" ", $boletosF2); 
$cant2 = count($lugares2); 
$cantTotal+=$cant2; 

$f2 = ""; 
$sqlAP = "SELECT * FROM apartados"; 
if ($resultAP = mysql_query($sqlAP)) { 
    while ($rowAP = mysql_fetch_array($resultApP)) { 
     $f = $rowAP['funcion']; 
     $lugar = $rowAP['lugar']; 
     $count++; 
     if ($f == "F2") { 
      $f2.= ($lugar . " "); 
     } 
    } 
} 
$sqlPag2 = "SELECT * FROM pagados"; 
if ($resultPag2 = mysql_query($sqlPag2)) { 
    while ($rowPag2 = mysql_fetch_array($resultPag2)) { 
     $f = $rowPag2['funcion']; 
     $lugar = $rowPag2['lugar']; 
     $count++; 
     if ($f == "F2") { 
      $f2.= ($lugar . " "); 
     } 
    } 
} 
$func2 = explode(" ", $f2); 
$cantUtilizados = count($func2); 
for ($int = 0; $int < $cant2; $int++) { 
    for ($r = 0; $r < $cantUtilizados; $r++) { 
     if ($func2[$r] == $lugares2[$int]) { 
      $repetidos++; 
     } 
    } 
} 
if ($repetidos > 0) { 
    redirect("apartadoBoletos.php?error=1"); 
} 
} 
function redirect($url) { 
    echo "<script language=\"JavaScript\"> window.location='$url'; </script>"; 
} 
$totalAPagar=120*$cantTotal; 

,當我將它們保存到數據庫和發送電子郵件:

$boletosF1 = $_POST['boletosF1']; 
$boletosF2 = $_POST['boletosF2']; 
$nombre = $_POST['name']; 
$correo = $_POST['mail']; 
$cant1=0; 
$cant2=0; 
if($boletosF1!=""){ 
$lugares1 = explode(" ", $boletosF1); 
echo $lugares1; 
$cant1 = count($lugares1); 
echo $cant1; 
$f1 = ""; 
$sqlAP = "SELECT * FROM apartados"; 
if ($resultAP = mysql_query($sqlAP)) { 
    while ($rowAP = mysql_fetch_array($resultApP)) { 
     $f = $rowAP['funcion']; 
     $lugar = $rowAP['lugar']; 
     $count++; 
     if ($f == "F1") { 
      $f1.= ($lugar . " "); 
     } 
    } 
} 
$sqlPag2 = "SELECT * FROM pagados"; 
if ($resultPag2 = mysql_query($sqlPag2)) { 
    while ($rowPag2 = mysql_fetch_array($resultPag2)) { 
     $f = $rowPag2['funcion']; 
     $lugar = $rowPag2['lugar']; 
     $count++; 
     if ($f == "F1") { 
      $f1.= ($lugar . " "); 
     } 
    } 
} 
$func1 = explode(" ", $f1); 
$cantUtilizados1 = count($func1); 
$repetidos = 0; 
for ($int = 0; $int < $cant1; $int++) { 
    for ($r = 0; $r < $cantUtilizados1; $r++) { 
     if ($func1[$r] == $lugares1[$int]) { 
      $repetidos++; 
     } 
    } 
} 
if ($repetidos > 0) { 

    redirect("apartadoBoletos.php?error=1"); 
} 
} 
if($boletosF2!=""){ 
$lugares2 = explode(" ", $boletosF2); 
echo $lugares2; 
$cant2 = count($lugares2); 
echo $cant2; 
$f2 = ""; 
$sqlAP = "SELECT * FROM apartados"; 
if ($resultAP = mysql_query($sqlAP)) { 
    while ($rowAP = mysql_fetch_array($resultApP)) { 
     $f = $rowAP['funcion']; 
     $lugar = $rowAP['lugar']; 
     $count++; 
     if ($f == "F2") { 
      $f2.= ($lugar . " "); 
     } 
    } 
} 
$sqlPag2 = "SELECT * FROM pagados"; 
if ($resultPag2 = mysql_query($sqlPag2)) { 
    while ($rowPag2 = mysql_fetch_array($resultPag2)) { 
     $f = $rowPag2['funcion']; 
     $lugar = $rowPag2['lugar']; 
     $count++; 
     if ($f == "F2") { 
      $f2.= ($lugar . " "); 
     } 
    } 
} 
$func2 = explode(" ", $f2); 
$cantUtilizados2 = count($func2); 
$repetidos = 0; 
for ($int = 0; $int < $cant2; $int++) { 
    for ($r = 0; $r < $cantUtilizados2; $r++) { 
     if ($func2[$r] == $lugares2[$int]) { 
      $repetidos++; 
     } 
    } 
} 
if ($repetidos > 0) { 
    redirect("apartadoBoletos.php?error=1"); 
} 
} 
$rand = rand(0, 500); 
$clave = sha1($rand . date("shd")); 
$clave = substr($clave, 5, 5); 
//insertar nuevo cliente 
//mysql_query('BEGIN'); 
$sql = "INSERT INTO cliente(`idCliente`,`fecha`,`Nombre`,`correo`)VALUES('$clave',NOW(),'$nombre','$correo')"; 
$result = mysql_query($sql); 
//crear arrays para guardar lugares 
//insertar apartado F1 

for ($i = 0; $i < $cant1; $i++) { 
    $sqlF1 = "INSERT INTO apartados(`lugar`,`idCliente`,`funcion`)VALUES('$lugares1[$i]','$clave','F1')"; 
    $resultF1 = mysql_query($sqlF1); 
} 
for ($i = 0; $i < $cant2; $i++) { 
    $sqlF1 = "INSERT INTO apartados(`lugar`,`idCliente`,`funcion`)VALUES('$lugares2[$i]','$clave','F2')"; 
    $resultF1 = mysql_query($sqlF1); 
} 

if (mysql_error()) { 
    //echo mysql_error(); 
    // mysql_query('ROLLBACK'); 

    redirect("apartadoBoletos.php?error=2"); 
} else { 
    $totalAPagar=($cant1+$cant2)*120; 
    // mysql_query('COMMIT'); 
    $to = $correo; 
    $dia=date("d-m-Y"); 
    //echo $dia; 
    //User info 
    $subject = "Boletos"; //The default subject. Will appear by default in all messages. 
    //The message to be received in the inbox 
    $msg .= "[email protected] $nombre: \n\n"; 
    $msg .= "Clave: $clave " . "\r\n\n"; //the message itself 
    $msg .= "Boletos 28 de Junio: $boletosF1 " . "\r\n"; 
    $msg .= "Boletos 27 de Junio: $boletosF2 " . "\r\n\n"; 
    $msg .= "Total a pagar: $ $totalAPagar.00 " . "\r\n\n"; 
    //$header .= "Content-type:text/html;charset=UTF-8" . "\r\n"; 
    $header .= "From: [email protected]" . "\r\n"; 
    $header .= "Reply-To: [email protected]" . "\r\n"; 
    $header .= "Return-Path: $email" . "\r\n"; 

    mail($to, $subject, $msg, $header); 
} 

function redirect($url) { 
    echo "<script language=\"JavaScript\"> window.location='$url'; </script>"; 
} 

到目前爲止,我無法找到錯誤我必須從昨天開始工作,但一切都必須停止= /我真的需要幫助。

此外,可能會有所幫助,我認爲錯誤可能與特定時間的用戶數量有關,但由於它發生在某些使用此功能的人身上,所以我真的不能說這就是原因。

回答

1

如果您不確定發生錯誤的位置,您可以的一段時間內添加廣泛的日誌記錄,以查看是否可以計算出結果。

例如,當用戶點擊保存或購買門票等時,您可以在日誌文件中寫入用戶在表單上輸入的數據。

然後,您可以在將購買信息發送到數據庫時再次登錄。記錄SQL或存儲過程名稱和參數值。

這種廣泛的日誌記錄往往會損害性能,但是當你處於絕望的情況時,有時候這是值得的。

只要你對這個問題有所瞭解,或者認爲你已經記錄了足夠的數據進行分析,就可以關閉日誌記錄。

+0

我從來沒有添加過,我應該在服務器上這樣做嗎?或者在PHP中寫入日誌文件? – Tsundoku 2011-06-04 16:58:39

+1

Luis,我在這裏也有點過頭,因爲我沒有做PHP。由於您沒有任何例外或錯誤,因此您不會尋找錯誤日誌記錄,只需定期記錄日誌,您可能必須在代碼中編寫並進行部署。這裏有一些關於[PHP日誌框架]的建議(http:// stackoverflow。COM /問題/ 341154/PHP的日誌框架)。而這個[教程](http://www.devshed.com/c/a/PHP/Logging-With-PHP/1/)看起來很有希望,特別是因爲它有一個名爲「bare necessities」的部分。祝你好運! – DOK 2011-06-04 17:06:05

0

這實在是一個評論,但它太過以代碼爲中心以適合其中之一。
考慮重寫您的代碼,以便它實際上使用SQL。
此代碼

$f1 = ""; 
$sqlAP = "SELECT * FROM apartados"; 
if ($resultAP = mysql_query($sqlAP)) { 
    while ($rowAP = mysql_fetch_array($resultApP)) { 
     $f = $rowAP['funcion']; 
     $lugar = $rowAP['lugar']; 
     $count++; 
     if ($f == "F1") { 
      $f1.= ($lugar . " "); 
     } 
    } 
} 

看起來傻傻的,你不使用SQL的。
改寫成這樣:

$sqlAP = "SELECT group_concat(lugar SEPARATOR ' ') as lugar 
      , count(*) as count1 
      FROM apartados WHERE funcion = 'F1'"; 
if ($resultAP = mysql_query($sqlAP)) { 
    $rowAP = mysql_fetch_array($result_AP); 
    $count = $rowAP['count1']; 
    $lugar = $rowAP['lugar']; 
} 

更快速,更清潔。