2016-07-16 2 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와 같이 간단한 밑줄이나 소문자를 앞에 추가하십시오.

관련 문제