2016-07-16 36 views
0

我有一個使用StringRequest記錄用戶的Android應用程序。我最近更改了一些PHP代碼,現在它返回了Server Error 500.(我知道錯誤的含義)不幸的是,我找不到錯誤。PHP返回錯誤代碼500.錯誤在哪裏?

我的PHP代碼:

<?php 
    require("password.php"); 

    $con = mysqli_connect("mywebsite.com", "username", "password", "dbname"); 

    $username = $_POST["username"]; 
    $password = $_POST["password"]; 

    $statement = mysqli_prepare($con, "SELECT * FROM user WHERE username = ?"); 
    mysqli_stmt_bind_param($statement, "s", $username); 
    mysqli_stmt_execute($statement); 
    mysqli_stmt_store_result($statement); 
    mysqli_stmt_bind_result($statement, $colUserID, $colName, $colUsername, $colTheme, $colEmail, $colDefaultRadius, $colPassword, $timeElapsed1, $timeElapsed2, $timeElapsed3, $timeElapsed4, $timeElapsed5, $timeElapsed6, $timeElapsed7); 

    $response = array(); 
    $response["success"] = false; 

    while(mysqli_stmt_fetch($statement)){ 
     if (password_verify($password, $colPassword)) { 
      $response["success"] = true; 
      $response["name"] = $colName; 
      $response["user_id"] = $colUserID; 
      $response["theme"] = $colTheme; 
      $response["email"] = $colEmail; 
      $response["radius"] = $colDefaultRadius; 
      $response["timeElapsed1"] = $timeElapsed1; 
      $response["timeElapsed2"] = $timeElapsed2; 
      $response["timeElapsed3"] = $timeElapsed3; 
      $response["timeElapsed4"] = $timeElapsed4; 
      $response["timeElapsed5"] = $timeElapsed5; 
      $response["timeElapsed6"] = $timeElapsed6; 
      $response["timeElapsed7"] = $timeElapsed7; 
     } 
    } 

    mysqli_stmt_close($statement); 

    $statement2 = mysqli_prepare($con, "SELECT * FROM location WHERE username = ?"); 
    mysqli_stmt_bind_param($statement2, "s", $username); 
    mysqli_stmt_execute($statement2); 
    mysqli_stmt_store_result($statement2); 
    mysqli_stmt_bind_result($statement2, $colUsername, $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44, $45, $46, $47, $48, $49); 

    while(mysqli_stmt_fetch($statement2)) { 
     if($response["success"] == true) { 
      $response["1"] = $1; 
      $response["2"] = $2; 
      $response["3"] = $3; 
      $response["4"] = $4; 
      $response["5"] = $5; 
      $response["6"] = $6; 
      $response["7"] = $7; 
      $response["8"] = $8; 
      $response["9"] = $9; 
      $response["10"] = $10; 
      $response["11"] = $11; 
      $response["12"] = $12; 
      $response["13"] = $13; 
      $response["14"] = $14; 
      $response["15"] = $15; 
      $response["16"] = $16; 
      $response["17"] = $17; 
      $response["18"] = $18; 
      $response["19"] = $19; 
      $response["20"] = $20; 
      $response["21"] = $21; 
      $response["22"] = $22; 
      $response["23"] = $23; 
      $response["24"] = $24; 
      $response["25"] = $25; 
      $response["26"] = $26; 
      $response["27"] = $27; 
      $response["28"] = $28; 
      $response["29"] = $29; 
      $response["30"] = $30; 
      $response["31"] = $31; 
      $response["32"] = $32; 
      $response["33"] = $33; 
      $response["34"] = $34; 
      $response["35"] = $35; 
      $response["36"] = $36; 
      $response["37"] = $37; 
      $response["38"] = $38; 
      $response["39"] = $39; 
      $response["40"] = $40; 
      $response["41"] = $41; 
      $response["42"] = $42; 
      $response["43"] = $43; 
      $response["44"] = $44; 
      $response["45"] = $45; 
      $response["46"] = $46; 
      $response["47"] = $47; 
      $response["48"] = $48; 
      $response["49"] = $49; 
     } 
    } 

    echo json_encode($response); 
?> 

請注意,我知道錯誤在$statement2聲明發生。我嘗試了幾件事情,但無法修復錯誤。 $1$49鏈接到數據庫中的變種。誰能告訴我發生了什麼事?我嘗試過使用Volley Response.ErrorListener,它不會顯示任何內容。預先感謝任何幫助!

回答

2

PHP Docs狀態:

一個有效的變量名以字母或下劃線開始,隨後 任意數量的字母,數字或下劃線。

所以$1,$2等在PHP中不是有效的變量名稱。


要查找實際的錯誤的原因和位置,你也可以檢查服務器錯誤日誌的內容,如果是可用的(和PHP進行適當配置;配置參數error_log必須被設置爲true) 。


另外一個提示爲分配綁定結果時使用的動態變量的名字,這樣你就可以在一個循環中爲它們分配:

而不是

$response["timeElapsed1"] = $timeElapsed1; 
$response["timeElapsed2"] = $timeElapsed2; 
// and so on 

你可以使用

foreach (range(1, 7) as $num) { 
    $var = 'timeElapsed'.$num; 
    $response['timeElapsed'.$num] = $$var; 
} 

這是更緊湊(但更好的評論它,因爲它不容易察覺)。

+0

謝謝你讓我知道!這解決了我的問題。 – TheAnonymous010

+0

@TheAnonymous010如果它解決了你的問題,考慮將答案標記爲接受的答案(或者我的xd,但是被授予,這個更好格式化並且有一個源代碼:p) –

+0

我將它標記爲答案:) – TheAnonymous010

1

現在允許有一個以數字開頭的變量名。所以也許這就是錯誤,因爲你有一堆。我建議將它們重命名爲$val1等等。

+0

我會改變它,看看是否是這個問題。感謝您的建議! – TheAnonymous010

1

你被綁定到不正確的數值變量。改變這些變量可以影響你的好代碼...這是你的代碼更改爲使用英文字母的變量:

<?php 
     require("password.php"); 

     $con = mysqli_connect("mywebsite.com", "username", "password", "dbname"); 

     $username = $_POST["username"]; 
     $password = $_POST["password"]; 

     $statement = mysqli_prepare($con, "SELECT * FROM user WHERE username = ?"); 
     mysqli_stmt_bind_param($statement, "s", $username); 
     mysqli_stmt_execute($statement); 
     mysqli_stmt_store_result($statement); 
     mysqli_stmt_bind_result($statement, $colUserID, $colName, $colUsername, $colTheme, $colEmail, $colDefaultRadius, $colPassword, $timeElapsed1, $timeElapsed2, $timeElapsed3, $timeElapsed4, $timeElapsed5, $timeElapsed6, $timeElapsed7); 

     $response = array(); 
     $response["success"] = false; 

     while(mysqli_stmt_fetch($statement)){ 
      if (password_verify($password, $colPassword)) { 
       $response["success"] = true; 
       $response["name"] = $colName; 
       $response["user_id"] = $colUserID; 
       $response["theme"] = $colTheme; 
       $response["email"] = $colEmail; 
       $response["radius"] = $colDefaultRadius; 
       $response["timeElapsed1"] = $timeElapsed1; 
       $response["timeElapsed2"] = $timeElapsed2; 
       $response["timeElapsed3"] = $timeElapsed3; 
       $response["timeElapsed4"] = $timeElapsed4; 
       $response["timeElapsed5"] = $timeElapsed5; 
       $response["timeElapsed6"] = $timeElapsed6; 
       $response["timeElapsed7"] = $timeElapsed7; 
      } 
     } 

     mysqli_stmt_close($statement); 

     $statement2 = mysqli_prepare($con, "SELECT * FROM location WHERE username = ?"); 
     mysqli_stmt_bind_param($statement2, "s", $username); 
     mysqli_stmt_execute($statement2); 
     mysqli_stmt_store_result($statement2); 
     mysqli_stmt_bind_result($statement2, $colUsername, $a, $b, $c, $d, $e, $f, $g, $h, $i, $j, $k, $l, $m, $n, $o, $p, $q, $r, $s, $t, $u, $v, $w, $x, $y, $z, $aa, $ab, $ac, $ad, $ae, $af, $ag, $ah, $ai, $aj, $ak, $al, $am, $an, $ao, $ap, $aq, $ar, $as, $at, $au, $av, $aw); 

     while(mysqli_stmt_fetch($statement2)) { 
      if($response["success"] == true) { 
       $response["1"] = $a; 
       $response["2"] = $b; 
       $response["3"] = $c; 
       $response["4"] = $d; 
       $response["5"] = $e; 
       $response["6"] = $f; 
       $response["7"] = $f; 
       $response["8"] = $h; 
       $response["9"] = $i; 
       $response["10"] = $j; 
       $response["11"] = $k; 
       $response["12"] = $l; 
       $response["13"] = $m; 
       $response["14"] = $n; 
       $response["15"] = $o; 
       $response["16"] = $p; 
       $response["17"] = $q; 
       $response["18"] = $r; 
       $response["19"] = $s; 
       $response["20"] = $t; 
       $response["21"] = $u; 
       $response["22"] = $v; 
       $response["23"] = $w; 
       $response["24"] = $x; 
       $response["25"] = $y; 
       $response["26"] = $z; 
       $response["27"] = $aa; 
       $response["28"] = $ab; 
       $response["29"] = $ac; 
       $response["30"] = $ad; 
       $response["31"] = $ae; 
       $response["32"] = $af; 
       $response["33"] = $ag; 
       $response["34"] = $ah; 
       $response["35"] = $ai; 
       $response["36"] = $aj; 
       $response["37"] = $ak; 
       $response["38"] = $al; 
       $response["39"] = $am; 
       $response["40"] = $an; 
       $response["41"] = $ao; 
       $response["42"] = $ap; 
       $response["43"] = $aq; 
       $response["44"] = $ar; 
       $response["45"] = $as; 
       $response["46"] = $at; 
       $response["47"] = $au; 
       $response["48"] = $av; 
       $response["49"] = $aw; 
      } 
     } 

     echo json_encode($response); 
    ?> 
1

的錯誤是在變化的。你不能有一個以數字開頭的變量。嘗試在前面添加一個簡單的下劃線或小寫字母,例如a1-a49。