2017-01-25 1 views
1

Ich folge derzeit this tutorial die über die Erstellung einer API mit Slim. Also versuche ich ein Registersystem mit dem gleichen Code zu machen.Slim Micro Framework, warum kann ich den Datensatz nicht in die Datenbank einfügen?

Hier ist meine Funktion der Registerfunktion innerhalb DBHandler.php

public function createUser ($username,$email,$password){ 
    require_once 'PassHash.php'; 
    //check whether email exist or not 
    if(!$this->isUserEmailExisted($email)) { 
     //hash the password 
     $password_hash = PassHash::hash($password); 
     //generate api_key 
     $api_key = $this->generateApiKey(); 
     //insert query 
     $stmt = $this->conn->prepare("INSERT INTO users(username,email,password_hash,api_key,status)VALUES(:username,:email,:password,:api_key,1)"); 
     $stmt->bind_param("ssss",$username,$email,$password_hash,$api_key); 

     $result = $stmt->execute(); 
     $stmt->close(); 

     if ($result) { 
      return USER_CREATED_SUCCESSFULLY; 
     } else { 
      return USER_CREATE_FAILED; 
     } 
    } else{ 
     return USER_ALREADY_EXISTED; 
    } 
} 

Ich überprüfe nur die Insert-Abfrage meine mal, aber ich weiß nicht, was das Problem dafür ist.

//insert query 
    $stmt = $this->conn->prepare("INSERT INTO users(username,email,password_hash,api_key,status)VALUES(:username,:email,:password,:api_key,1)"); 
    $stmt->bind_param("ssss",$username,$email,$password_hash,$api_key); 

Das Ergebnis ist immer die

{ "Fehler": true, "message": "Oops ist ein Fehler aufgetreten bei der Registrierung" }

Und meine Abfrageparameter ist

username = abc email = abc @ gm ail.com password = 123456

sollte dieses Ergebnis der erfolgreichen Registrierung erhalten. Aber es kommt vom Ergebnis des Fehlers, der erfolglos in die Datenbank einfügen. Hier

ist der Funktionsaufruf in meinem index.php

$app->post('/register', function() use ($app) { 
    // check for required params 
    verifyRequiredParams(array('username', 'email', 'password')); 

    $response = array(); 

    // reading post params 
    $username = $app->request->post('username'); 
    $email = $app->request->post('email'); 
    $password = $app->request->post('password'); 

    // validating email address 
    validateEmail($email); 

    $db = new DbHandler(); 
    $res = $db->createUser($username, $email, $password); 

    if ($res == USER_CREATED_SUCCESSFULLY) { 
     $response["error"] = false; 
     $response["message"] = "You are successfully registered"; 
     echoRespnse(201, $response); 
    } else if ($res == USER_CREATE_FAILED) { 
     $response["error"] = true; 
     $response["message"] = "Oops! An error occurred while registereing"; 
     echoRespnse(200, $response); 
    } else if ($res == USER_ALREADY_EXISTED) { 
     $response["error"] = true; 
     $response["message"] = "Sorry, this email already existed"; 
     echoRespnse(200, $response); 
    } 
}); 

Hier meine Datenbank

CREATE TABLE `users` (
    `id` int(11) NOT NULL, 
    `username` varchar(255) DEFAULT NULL, 
    `email` varchar(255) NOT NULL, 
    `password_hash` text NOT NULL, 
    `api_key` varchar(32) NOT NULL, 
    `status` int(1) NOT NULL DEFAULT '1', 
    `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='all user data '; 

ist ich nur mein Bestes versuchen, alle erwarten zu überprüfen, und die Suche für alle Fragen zu Schlank , aber mein Wissen und meine Erfahrung sind immer noch sehr begrenzt, so dass ich immer noch nicht verstehe, was mein Fehler ist, jede Richtlinie wird sehr geschätzt.

Vielen Dank im Voraus.

Ich mache einen Versuch created_at in der Abfrage enthalten sein und $status=1 und bind_param in der Aussage machen, aber der Ausgang ist immer noch der gleiche

// Generating API key 
      $api_key = $this->generateApiKey(); 
      $status = 1; 
      // insert query 
      $stmt = $this->conn->prepare("INSERT INTO users(username, email, password_hash, api_key, status,created_at) values(?, ?, ?, ?, ?,NOW())"); 
      $stmt->bind_param("sssss", $username, $email, $password_hash, $api_key,$status); 

      $result = $stmt->execute(); 

      $stmt->close(); 

@Dusan Jovanov, ich eine Veränderung in meinem Code zu machen, kann Siehst du, mache ich richtig? Inside my createUser() Methode

// Check for successful insertion 
     if ($result) { 
      // User successfully inserted 
      return USER_CREATED_SUCCESSFULLY; 
     } else { 
      $error = $stmt->error_list; 
      // Failed to create user 
      return $error; 

     } 
    } else { 
     // User with same email already existed in the db 
     return USER_ALREADY_EXISTED; 
    } 

In '/ Register' Rückruf

 else if ($res == $error) { 
     $response["error"] = true; 
     $response["message"] =$error; 

     echoRespnse(200, $response); 

Bin ich tun, was Sie erwähnen ??

Weil ich diesen Fehler

error after following Dusan Jovanov Entschuldigung, weil ich noch neu in php..still Lernen ..Dank für Hilfe

+0

Haben Sie versucht, einen Wert für 'created_at' anzugeben? Gemäß Ihrem Datenbankschema darf dieser Wert nicht null sein und Sie geben ihn nicht in Ihrer createUser-Funktion an. – mickdev

+0

Ich mache die Änderungen, aber die Ausgabe immer noch gleich.I bei 'NOW()' und 'created_at' in der Abfrage.und' $ status = 1' statt 1 in der Abfrage – ken

+0

den Wert von $ stmt ausgeben -> error' oder '$ stmt-> error_list' –

Antwort

0

Kürzlich gerade löste ich diese problem.I nur einen sehr dummen Fehler machen. In der Tat ist dieser Code kein Problem hat, aber ich brauche nur die Anforderung in dem ‚Data Form‘ statt an dem ‚Adresse‘ Abschnitt hier

Statt macht die Abfrage Abschnitt zu machen, not insert here

ich soll meine Frage hier, die ‚Daten aus‘ Teil im Voraus REST-Client should make the query here

Nachdem ich das machen, ich mein Problem nur lösen ich bin ein Anfänger und ich mache einen dummen Fehler, Hoffnung kann lösen Das gleiche Problem für die nächste Person, die diesem nützlichen Tutorial folgen

http://www.androidhive.info/2014/01/how-to-create-rest-api-for-android-app-using-php-slim-and-mysql-day-12-2/

0

Status Spaltentyp ist int so versuchen, die Parameter auf diese Weise verbindlich:

$stmt->bind_param("ssssi", $username, $email, $password_hash, $api_key, $status); 
+0

Ich versuche es einfach..aber es scheint immer noch die gleiche Ausgabe – ken

Verwandte Themen