2016-08-24 1 views
0

Je n'arrive pas à insérer ma requête dans la base de données après que le programme ait vérifié la disponibilité du nom d'utilisateur sur flou en utilisant ajax pour vérifier si le nom d'utilisateur est disponible. Après avoir vérifié la disponibilité du nom d'utilisateur, il insère toujours des requêtes vides dans ma base de données.Problème lors de l'insertion d'une requête après vérification de la disponibilité du nom d'utilisateur par ajax

Voici l'exemple de sortie pour plus de détails:

enter image description here

Mais le problème est quand il affiche le nom d'utilisateur disponible, il insère automatiquement une requête vide dans la base de données.

Ceci va insérer dans la base de données après il vérifie la disponibilité de l'utilisateur:

enter image description here

Je veux insérer la requête d'insertion lorsque l'utilisateur soumet ou quand il/elle clique sur le bouton d'enregistrement. La disponibilité du nom d'utilisateur est pour la vérification seulement. Y a-t-il un problème avec mon code?

Voici le code:

sample.php FICHIER

<!DOCTYPE html> 
<html> 
<head> 
    <title>Sample</title> 
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
</head> 
<body> 
<input type="text" placeholder="Username" id="username" name="username" class="form-control" > 
<span id="availability" style="color:green;"></span> 
<input class="form-control" placeholder="First Name" name="firstname" type="text" > 
<input type="submit" id="signup" name="signupsubmit" class="btn btn-info form-control" value="Register"> 
</body> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
<script src="https://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script> 

<script> 
//Check Username availability 
$(document).ready(function() 
{ 
    $('#username').blur(function() 
    { 
     var username = $(this).val(); 
     $.ajax({ 
      url:"SampleProcess.php", 
      method:"POST", 
      data:{username:username}, 
      dataType:"text", 
      success:function(html) 
      { 
       $('#availability').html(html); 
      } 
     }) 
    }); 
}); 
</script> 
</html> 

J'utilise ajax pour vérifier la disponibilité de nom d'utilisateur dans le script ici:

<script> 
    //Check Username availability 
    $(document).ready(function() 
    { 
     $('#username').blur(function() 
     { 
      var username = $(this).val(); 
      $.ajax({ 
       url:"SampleProcess.php", 
       method:"POST", 
       data:{username:username}, 
       dataType:"text", 
       success:function(html) 
       { 
        $('#availability').html(html); 
       } 
      }) 
     }); 
    }); 
</script> 

Le fichier de processus pour vérifier le nom d'utilisateur et insérer une requête.

SampleProcess.php FICHIER

<?php 
    //This is an external file DBController for creating a connection to DB 
    require_once("DBController.php"); 
    //DBHandler handles the DBController class 
    $DBHandler = new DBController(); 

    //Call the function mainConnect() 
    $connect = $DBHandler->mainConnect(); 

    //Check Username Availability 
    if(isset($_POST["username"])) 
    { 
     $sql = "SELECT * FROM tablereminders WHERE username ='".$_POST["username"]."'"; 
     $result = mysqli_query($connect, $sql); 

     if(mysqli_num_rows($result) > 0) 
     { 
      echo"<span class=\"text-danger\">Username not available</span>"; 
      echo'<script>document.getElementById("username").focus();</script>'; 
     } 
     else 
     { 
      //In this else condition the query will be inserted in the 
      //database after the user clicks the register button, but it will insert right 
      //after the program check the availability 

      echo"<span class=\"text-success\">Username available</span>"; 

      //Problem inserting my query here 
      $Username = isset($_POST['username']); 
      $FirstName = isset($_POST['firstname']); 

      //Query Insert into tablereminders 
      $query = mysqli_query($connect, "INSERT INTO `tablereminders`(`username` , `firstname`) 
      VALUES ('$Username' , '$FirstName')"); 

      if($connect->query($query) == TRUE) 
      { 
       echo "<script type='text/javascript'>alert('New record created successfully');</script> "; 
       echo "<script>setTimeout(\"location.href = 'LoginReminder.php'\", 0)</script>"; 
      } 
     } 

    } 

?> 

Dans la condition d'autre après vérification mysqli_num_rows je peux mettre ma requête d'insertion là pour exécuter lorsque l'utilisateur clique sur le buton de registre. Y at-il un problème avec ma condition if-else ou est-ce à propos de la fonction AJAX dans le fichier Sample.php, devrais-je utiliser la méthode GET ou POST? De toute façon je l'ai essayé mais ça ne corrige pas mon problème ici. S'il vous plaît aider.

Répondre

1

Try this;)

Il y a deux choses

  1. Vérifiez la disponibilité nom d'utilisateur.
  2. Soumettez le formulaire et créez un enregistrement.

1. Vérifiez la disponibilité du nom d'utilisateur.

Pour cela, vous avez fait tout le code que vous devez modifier le code comme ceci:

<?php 

//This is an external file DBController for creating a connection to DB 
require_once("DBController.php"); 
//DBHandler handles the DBController class 
$DBHandler = new DBController(); 

//Call the function mainConnect() 
$connect = $DBHandler->mainConnect(); 

//Check Username Availability 
if(isset($_POST["username"])){ 
    $sql = "SELECT * FROM tablereminders WHERE username ='" . $_POST["username"] . "'"; 
    $result = mysqli_query($connect, $sql); 

    if(mysqli_num_rows($result) > 0){ 
    echo '<span class="text-danger">Username not available</span>'; 
    echo '<script>document.getElementById("username").focus();</script>'; 
    }else{ 
    echo '<span class="text-success">Username available</span>'; 
    } 
} 

2. Soumettre le formulaire et créez un enregistrement. Créez maintenant un nouvel appel ajax dans un autre fichier pour insérer un enregistrement qui soumet des données de formulaire sur un événement de clic de bouton.

Vous pouvez faire la même chose en cas de disponibilité du nom d'utilisateur.

Exemple de code

d'insérer l'enregistrement:

$Username = isset($_POST['username']); 
$FirstName = isset($_POST['firstname']); 

//Query Insert into tablereminders 
$query = mysqli_query($connect, "INSERT INTO `tablereminders`(`username` , `firstname`) 
     VALUES ('$Username' , '$FirstName')"); 

if($connect->query($query) == TRUE){ 
    echo '<script type="text/javascript">alert("New record created successfully");</script>'; 
    echo '<script>setTimeout(function(){ location.href = "LoginReminder.php"}, 0);</script>'; 
} 

Rappelez-vous 2 choses avant d'insérer nouvel enregistrement dans la base de données:

  1. Valider les données utilisateur.
  2. Les données utilisateur d'échappement peuvent être avec cette fonction mysqli_real_escape_stringou Vous pouvez utiliser des instructions préparées et des paramètres de liaison.
+0

Donc vous voulez dire, je vais créer deux fichiers php monsieur? Un pour la disponibilité du nom d'utilisateur et un autre pour l'insertion de la requête? –

+1

Oui, vous pouvez créer deux fichiers pour réduire la complexité. Si vous voulez faire toutes choses en utilisant un seul fichier, vous devez passer un autre paramètre avec une requête ajax quelque chose comme les valeurs 'action' seront 'checkUsername' et autre 'insert'. – itzmukeshy7

+0

Oui! ça marche monsieur. Je vous remercie –