2017-09-06 3 views
1

J'utilise un formulaire Unity en conjonction avec PHP pour envoyer des données à une base de données, je peux entrer avec succès des informations et il atteint la base de données mais le problème est qu'il envoie également les données sont vides. J'essaie d'empêcher cela en utilisant la méthode isset mais cela ne semble pas fonctionner. Quelqu'un peut-il vérifier cela pour moi?PHP envoyant des informations vierges à la base de données

Image de données atteignant la base de données

enter image description here

Image sous forme d'unité

enter image description here

<?php 

    if(!isset($_POST['usernamePost'], $_POST['passwordPost'], $_POST['emailPost'])) 
    { 
     echo "This is not working"; 
    } 
    else 
    { 
    //Enter the data into the database 
    $username = filter_var($_POST['usernamePost'], FILTER_SANITIZE_STRING); 
    $password = filter_var($_POST['passwordPost'], FILTER_SANITIZE_STRING); 
    $email = filter_var($_POST['emailPost'], FILTER_SANITIZE_STRING); 

    //variable for connection 
    $servername = "localhost"; 
    $server_username = "root"; 
    $server_password = ""; 
    $dbName = "ontrigger_game"; 

     try 
     { 
      //connection to the database 
      $dbhandle = mysqli_connect($servername, $server_username, $server_password) 
       or die("Unable to connect to MySQL"); 
      echo "Connected to MySQL<br>"; 

      //select a database to work with 
      $selected = mysqli_select_db($dbhandle, $dbName) 
        or die("Could not select database"); 

      $sql = "INSERT INTO users (username, password, email) 
       VALUES ('".$username."','".$password."','".$email."')"; 
      if(!mysqli_query($dbhandle, $sql)) 
      { 
       die('Error: ' . mysqli_error()); 
      } 
      echo "1 record added"; 

      //close the connection 
      mysqli_close($dbhandle); 

     } 
     catch (Exception $ex) 
     { 

     } 
    } 
?> 
+0

être à des injections sql carefull ... – fred727

+0

** ** Jamais stocker les mots de passe en texte clair. Au lieu de cela, utilisez ['password_hash()'] (http://us3.php.net/manual/fr/function.password-hash.php) et ['password_verify()'] (http://us3.php.net /manual/en/function.password-verify.php). Si vous utilisez une version de PHP antérieure à la version 5.5, n'utilisez ** pas ** MD5 ou SHA1 pour hacher les mots de passe. Au lieu de cela, vous pouvez utiliser [ce pack de compatibilité] (https://github.com/ircmaxell/password_compat). –

+0

'FILTER_SANITIZE_STRING' ne protège pas contre les attaques [** injection SQL **] (https://en.wikipedia.org/wiki/SQL_injection). Vous devez utiliser des instructions préparées avec des paramètres liés, via [** mysqli **] (https://secure.php.net/manual/fr/mysqli.prepare.php) ou [** PDO **] (https : //secure.php.net/manual/fr/pdo.prepared-statements.php) pilotes. [** Cet article **] (https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) a de bons exemples. –

Répondre

2

Vous devriez également vérifier si son vide en utilisant la méthode empty()

if (!isset($_POST['usernamePost']) && empty($_POST['usernamePost'])) { 

// error message here 

} else { 

// What you want to do if not empty and is set. 

} 

Remarque: Utilisez l'opérateur && au lieu de

de virgule
+1

Merci Jesse, en utilisant la méthode vide() travaillé – user2757842