2015-08-21 1 views
0

J'insère des données dans ma base de données. Les données ont été insérées mais je suis supposé obtenir OK comme résultat après que les données sont insérées mais je reçois mon autre "Enregistrement non terminé".Insérer des données dans mysql en utilisant pgo

Quelqu'un peut-il vous aider?

ici est mon code

<?php 

require 'functions.php'; 
require 'lib/password.php'; 

if(isset($_POST['username']) && isset($_POST['password'])){ 
    $username = $_POST['username']; 
    $password = $_POST['password']; 



    if(!empty($username) && !empty($password)){ 
     $hash = password_hash($password, PASSWORD_BCRYPT); 
     $query = "INSERT INTO users (id, username, password) VALUES ('','".$username."','".$hash."')"; 
     if($conn->query($query)===TRUE){ 
      echo 'Ok'; 
     } else{ 
      echo 'Registration not complete'; 
     } 
    } 
} 

?> 

<form action="register.php" method="POST"> 
    Username: <input type="text" name="username"><br> 
    Password: <input type="password" name="password"><br> 
    <input type="submit" value="Register"> 
</form> 

Répondre

1

pdo::query() ne retourne pas vrai en cas de succès. Il renvoie un objet PDOStatement. Vérifiez votre déclaration de condition et vous verrez pourquoi elle échoue:

if($conn->query($query)===TRUE) 

Votre requête est sujette aux injections SQL. C'est un bon exemple de quand vous devriez utiliser pdo::prepare() et PDOStatement :: execute() (aka instructions préparées). Vous ne devez pas utiliser l'entrée utilisateur (POST) directement dans une requête, dans ce cas $username.

+1

Oui, mais je ne veux pas tolérer le code qui a une vulnérabilité d'injection SQL claire qui est spécifiquement pourquoi je ne lui ai pas donné la solution. – Devon

+0

C'est un bon point – RiggsFolly