2011-06-04 43 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']; 
} 

更快速,更清洁。