2016-06-01 13 views
0

Ich habe einige Schwierigkeiten beim Versuch, eine Verbindung zu meiner Datenbank mit PHP einzurichten ... Ich habe so viele Dinge ausprobiert, meine SQL-Abfragen doppelt überprüft, und einfach nicht ' Warum funktioniert es nicht? Ich bin immer noch ein Neuling, also denke ich, dass mir noch etwas fehlt. Ich versuche eine App zu erstellen, die die Benutzerregistrierung übernimmt.Verbindung mit MySQL mit PHP nicht möglich - Android Studio

Dies ist der Fehler, den ich in Android Studio bekommen bin:

org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject 

Mein PHP-Code ist:

<?php 
$servername = "my server here"; 
$username = "my username here"; 
$password = "my password here"; 
$dbname = "my db here"; 

// Create connection 
$conn = mysqli_connect($servername, $username, $password, $dbname); 
// Check connection 
if (!$conn) { 
die("Connection failed: " . mysqli_connect_error()); 
} 

$sql = "INSERT INTO User (username, email, passcode) VALUES (?, ?, ?)"; 

if (mysqli_query($conn, $sql)) { 
$last_id = mysqli_insert_id($conn); 
echo "New record created successfully. Last inserted ID is: " . $last_id; 
} else { 
echo "Error: " . $sql . "<br>" . mysqli_error($conn); 
} 

mysqli_close($conn); 
?> 

Ein weiterer wichtiger Punkt, der Postbote Plugin Überprüfung und Verifizierung der url ich dies:

Error: INSERT INTO User (username, email, passcode) VALUES (?, ?, ?) 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?, ?, ?)' at line 1 

Ich verstehe nicht wirklich, warum das ein Fehler ist? Da ich Input in Form von dem Benutzer erwarten ...

Wie in den weiteren Informationen, das ist der Code von meinem RegisterActivity:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_register); 

    final EditText etUsername = (EditText)findViewById(R.id.etUsername); 
    final EditText etEmail = (EditText)findViewById(R.id.etEmail); 
    final EditText etPassword = (EditText)findViewById(R.id.etPassword); 
    final Button btnRegister = (Button)findViewById(R.id.btnRegister); 

    if (btnRegister != null) { 
     btnRegister.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       final String username = etUsername.getText().toString(); 
       final String email = etEmail.getText().toString(); 
       final String passcode = etPassword.getText().toString(); 

       Response.Listener<String> responseListener = new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         try { 
          JSONObject jsonResponse = new JSONObject(response); 
          boolean success = jsonResponse.getBoolean("success"); 
          if (success) { 
           Intent intent = new Intent(RegisterActivity.this, LoginActivity.class); 
           RegisterActivity.this.startActivity(intent); 
          } else { 
           AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this); 
           builder.setMessage("Register Failed") 
             .setNegativeButton("Retry", null) 
             .create() 
             .show(); 
          } 
         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }; 

       RegisterRequest registerRequest = new RegisterRequest(username, email, passcode, responseListener); 
       RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this); 
       queue.add(registerRequest); 

So, weiß jemand, wo das herkommt und wo sonst sollte ich nachsehen?

Prost!

+1

Sie ‚Standard‘ SQL mit vorbereiteten Anweisungen mischen. vorbereitete Anweisungen ist der bevorzugte Weg, aber Sie haben keine Werte dafür angegeben! – Jeff

+0

lesen Sie über vorbereitete Aussagen [hier] (http://php.net/manual/en/mysqli.prepare.php) oder [hier] (http://php.net/manual/en/mysqli.quickstart.prepared- Statements.php). Im Allgemeinen haben Sie vergessen, Werte zu binden – Jeff

Antwort

1

Sie haben bind Ihre Werte an die SQL-Anweisung vergessen.

Hier ist ein Code, 'sollte' funktionieren (Ich habe es jetzt nicht mit Android getestet ... und ich bin glücklich, die Antwort zu verbessern, wenn es nicht funktioniert ...):
Beachten Sie auch, dass ich auf objektorientierten Stil umgeschaltet. Für weitere Informationen bitte read the manual!

<?php 
$servername = "my server here"; 
$username = "my username here"; 
$password = "my password here"; 
$dbname = "my db here"; 

// Create connection 
$mysqli = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if (!$mysqli) { 
    // display error 
} 

$sql = "INSERT INTO User (username, email, passcode) VALUES (?, ?, ?)"; 


if ($stmt=$mysqli->prepare($sql)) { 
    // HERE's what you're missing: 
    $stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['passcode']); 
    $stmt->execute(); 
    // you defenitely want some more (error-)checks here 
    $last_id = $mysqli->insert_id($conn); 
    // and here 

    // now return a json back to android. add any data you want (the whole new record f.e.) 
    $return = "{'success':true, 'id': $last_id}"; 
    echo $return; 
} else { 
    // return any errors: 
    $return = "{'success':false, 'errors': [{'DB-Error': '".$sql." ".$mysqli->error."'}]}"; 
    echo $return; 
} 

$mysqli->close($conn); 
?> 

HINWEIS Sie nicht Werte von $ _POST direkt jetzt, da ich nicht bestanden sollen, sie entkommen, validieren, etc ...

+0

Hallo Jeff! Vielen Dank für Ihre Antwort! Es gibt mir einen anderen Fehler obwohl ich versuchte, mich selbst zu debuggen, aber auch kein Glück: Parse Fehler: Syntaxfehler, unerwartete T_OBJECT_OPERATOR, erwartet ',' oder ';' in /home/a8084829/public_html/Register.php on line 26 – Igor

+0

ja, ich habe einen Fehler gemacht, jetzt korrigiert: gegen Ende muss es '$ mysqli-> error;' statt mysqli-> error' sein. Ich habe das '$' vergessen! – Jeff

+0

Dank Jeff, überraschend, jetzt scheint der PHP-Code in Ordnung zu sein - ish? Wenn ich auf Postman nachschaue, gibt es keine Fehler zurück, und es bringt mich tatsächlich zurück zum Neuen Datensatz, der erfolgreich erstellt wurde ... Beim Versuch, einen Benutzer über die App in Android Studio zu registrieren, erhalte ich immer noch den JSON-Fehler: org. json.JSONException: Value Igor

Verwandte Themen