2012-04-10 6 views
1

Ich habe PHP-Code, der zu MySql verbindet und Daten zu JSON codiert. Später würde ich es filtern und spezifisches JSON-Objekt erhalten. Es funktionierte gut, während ich ein NameValuePair-Objekt verwendete, aber jetzt möchte ich Variablen wie Benutzername und Passwort verwenden. Jetzt bekomme ich diese Warnung in logcat Fehler beim Analysieren von Daten .org.json.JSONException: Wert null des Typs org.json.JSONObject $ 1 kann nicht in JSONArray konvertiert werden.Android NameValuePair sende Werte

Wie sollte ich den Code ändern, der richtig funktionieren könnte?

$q=mysql_query("SELECT username, firstname, lastname, email, phone1, skype, city, description FROM mdl_user WHERE username LIKE '$username' AND password LIKE '$password'"); 
while($e=mysql_fetch_assoc($q)) 
    $output[]=$e; 
print(json_encode($output)); 

-Code, die Anfrage sendet:

ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("usern",""+usr)); 
     nameValuePairs.add(new BasicNameValuePair("passw",""+psw)); 
     InputStream is = null; 
     String result = ""; 
     //http post 
     try{ 
       HttpClient httpclient = new DefaultHttpClient(); 
       HttpPost httppost = new HttpPost("http://ik.su.lt/~jbarzelis/Bdarbas/getUserInfo.php"); 
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
       HttpResponse response = httpclient.execute(httppost); 
       HttpEntity entity = response.getEntity(); 
       is = entity.getContent(); 
     }catch(Exception e){ 
       Log.e("log_tag", "Error in http connection "+e.toString()); 
     } 

Edited

$username = mysql_real_escape_string($_REQUEST['usern']); 
$password = mysql_real_escape_string($_REQUEST['passw']); 
$q=mysql_query("SELECT username, firstname, lastname, email, phone1, skype, city, description 
FROM mdl_user WHERE username LIKE '$username' AND password LIKE '$password'"); 
while($e=mysql_fetch_assoc($q)) 
    $output[]=$e; 
print(json_encode($output)); 

Antwort

1

Ist dies der gesamte Code, den Sie auf Ihrem Server-Seite gestellt haben, dann denke ich Sie müssen sich zuerst Werte in $username und $password mit der $_POST[] Methode wie dieser

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

und das gleiche für password.

da ab jetzt gibt es keinen Wert in den Variablen Ihre SELECT Anweisung null Wert zurückgibt, die in JSON Format an den Client gesendet wird, die einen null Wertfehler gibt.

+0

Es war nicht der ganze Code. Oben bearbeitet. – LTnewbie

+0

Jetzt macht meine Post keinen Sinn, also werde ich es löschen :) –

+0

Aber immer noch sollten Sie lieber "=" als "LIKE" in der Autorisierung verwenden. Und versuchen Sie, Ihren Benutzernamen und Ihr Passwort fest zu codieren, um zu überprüfen, ob Ihre Ausgabe gedruckt wird. Wenn dies der Fall ist und das Problem verschwindet, haben Sie Probleme mit dem Senden der Daten an das PHP-Skript, anstatt es zu empfangen. –

1

Basierend auf Ihrem Kommentar "Ich benutzte LIKE, während ich nur Benutzernamen versuchte und es hat gut funktioniert."

In welcher Form speichern Sie Ihr Passwort? Klartext (ich hoffe nicht) oder Hashed? Wenn Hashed, wo führst du Hashing durch? In PHP tun Sie nicht, wenn es ganzer Code ist, tun Sie es in Ihrem Java-Code? Wenn nicht, ist das deine Antwort.

Wie für die LIKE - es hat natürlich funktioniert. LIKE ist weniger streng als = und es erzeugt einen erheblichen Overhead. Es sollte nur in sehr einfachen Suchanweisungen (SEHR EINFACH) verwendet werden, sicherlich nicht in der Autorisierung.

Verwandte Themen