2016-07-16 6 views
0

私はStringRequestを使用してユーザーをログインするアンドロイドアプリを持っています。最近、いくつかのPHPコードが変更されました。サーバーエラー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はデータベースのvarcharsにリンクしています。誰が私に何が起こっているか教えてもらえますか?私は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ですが、付与されていますが、これはより良い形式であり、ソースがあります): –

+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のように手前に単純なアンダースコアまたは小文字を追加してみてください。

関連する問題