Menu

Comparer un élément en javascript récupérer dans ma BD

AbertBlanchar123 - 13 janv. 2018 à 03:33 - Dernière réponse :  AlbertBlanchar123
- 13 janv. 2018 à 14:36
Bonjour,

J'ai un petit souci, lors de l'enregistrement d'un login dans ma BD, j'aimerais vérifier qu'un login n’hésite pas déjà avant de valider, j'ai décider de passer par le jQuery. (je rappel que je débute :)

j'aimerais vérifier que le login n’hésite pas dans la BD avant de l’insérer.

code HTML


<div style="display: none;" id="erreur" class="alert alert-danger">
<p>Vous n'avez pas rempli ce champ !</p>
</div>
<form class="form" action="insert.php" role="form" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="nom">Login:</label>
<input type="text" class="form-control" id="login" name="login" placeholder="Login" value="<?php echo $login;?>">

</div>

<br>
<div class="form-actions">
<button type="submit" class="btn btn-success" name="envoi" id="envoi"><span class="glyphicon glyphicon-pencil"></span> Ajouter</button>
<a class="btn btn-primary" href="index.php"><span class="glyphicon glyphicon-arrow-left"></span> Retour</a>
</div>
</form>


code PHP

<?php

require 'database.php';

if(!empty($_POST))
{
$login = $_POST['login'];

$db = Database::connect();
$statement = $db->prepare("INSERT INTO users (login) values(?)");
$statement->execute(array($login));
Database::disconnect();
header("Location: index.php");
}
?>


code JS

$(document).ready(function(){

var $login = $('#login'),
$envoi = $('#envoi'),
$erreur = $('#erreur'),
$tot1;

//on m'a conseiller de l'utiliser mais j'ai pas compris

$.ajax({
url : "insert.php",
type : "POST",
value : $login

});

$login.keyup(function(){
if($(this).val() == $login){ // c'est ici que je voulais comparer si le champ existe a un login de la BD
$tot1=0;
$(this).css({ // on rend le champ rouge
borderColor : 'red',
color : 'red'
});
}
else{
$tot1=1;
$(this).css({ // si tout est bon, on le rend vert
borderColor : 'green',
color : 'green'
});
}
});

$envoi.click(function(e){

e.preventDefault();

verifier($login);

if($tot1==1 ){

$erreur.css('display', 'none');
}
else{
$erreur.css('display', 'block');
}
});

});



Tout en vous remerciant.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
jordane45 21661 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 17 juillet 2018 Dernière intervention - 13 janv. 2018 à 14:32
1
Merci
Côté JS ça donnerait un truc du genre :
$(document).ready(function(){
  var $login = $('#login'),
      $envoi = $('#envoi'),
      $erreur = $('#erreur'),
      $tot1;

  //on vérifie lors du keyUp sur le champ login    
  $login.keyup(function(){
    verifyLogin($login.val());
  });


  //Submit du formulaire
  $envoi.click(function(e){
    e.preventDefault();
    verifyLogin($login.val());
    if($tot1 == true ){
      //le login existe déjà
      $erreur.html('ce login est déjà pris');
    }else{
      //le login n'existe pas déjà
    
    }
  });

});

function verifyLogin(input_login){
  $.ajax({
    method: "POST",
    dataType: "json",
    url: "verifyLogin.php",
    data: { login: input_login}
  })
  .done(function( result ) {
    console.log(result);
    var error = typeof(result.error) !='undefined' ? result.error : null;  
    var reponse = typeof(result.reponse) !='undefined' ? result.reponse : null;  
    
    if(error){
      alert(error);
    }else{
      if(reponse){
        $login.css({ // on rend le champ rouge
              borderColor : 'red',
              color : 'red'
              });
        $tot1 = true;
      
      }else{
        $login.css({ // on rend le champ rouge
              borderColor : 'green',
              color : 'green'
              });
        $tot1 = false;
      } 
   }
    
      
  });

}


et côté PHP il te faut un fichier (verifyLogin.php) qui servira à la vérification:
<?php
//fichier verifyLogin.php

//activation des erreurs PHP
//Affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//connexion à la bdd
require_once 'database.php';
$db = Database::connect();


//initialisation de la variable de retour
$result = array('reponse'=>NULL,'error'=>NULL);

//récupération PROPRE des variables
$login = !empty($_POST['login']) ? trim($_POST['login']) : NULL;

if($login){
  
  $sql = "SELECT * FROM users WHERE login = ?";
  $datas = array($login);
  
  //exécution de la requête
  try{
    $statement = $db->prepare($sql);
    $statement->execute($datas);
    //on stocke le resultat dans un array
    $queryResult = $statement->fetchAll();
    
    $result['reponse'] = !empty($queryResult) ? $queryResult : NULL;
    
  }catch(Exception $e){
     $result['error'] = $e->getMessage();
  }
 
}

 Database::disconnect();
 
 //on renvoi les données au format JSON
 echo json_encode($result); 

?>


NB: Pense à regarder dans la CONSOLE de ton navigateur lorsque tu testes le script pour voir si il n'y aurait pas des messages d'erreur.

NB² : Je t'invite fortement à lire ces deux liens avant de continuer :

http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code
.


Merci jordane45 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

CCM a aidé 22507 internautes ce mois-ci

Commenter la réponse de jordane45
jordane45 21661 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 17 juillet 2018 Dernière intervention - 13 janv. 2018 à 11:41
0
Merci
Bonjour,

Il faut placer la vérification dans la méthode SUCCESS ou DONE de ton ajax
Voici des exemples :
http://codes-sources.commentcamarche.net/source/102253-exemple-ajax-en-jquery

Commenter la réponse de jordane45
AlbertBlanchar123 - 13 janv. 2018 à 14:01
0
Merci
Merci pour ta reponse.
Mais si tu pouvais etre plus précis car je debute en php et en javascript, j'ai essayé de parcourir ton dossier je suis un peu perdu.
Cordialement.
Commenter la réponse de AlbertBlanchar123
AlbertBlanchar123 - 13 janv. 2018 à 14:36
0
Merci
Merci votre dernière reponse devrait m'aider.

Cordialement
Commenter la réponse de AlbertBlanchar123