Problème avec mon code php
Résolu
Aaymeric
Messages postés
78
Date d'inscription
Statut
Membre
Dernière intervention
-
Aaymeric Messages postés 78 Date d'inscription Statut Membre Dernière intervention -
Aaymeric Messages postés 78 Date d'inscription Statut Membre Dernière intervention -
Bonjour tout le monde,
Je suis en train de suivre un tuto en jquery pour vérifier si un pseudo existe bien dans ma BDD. La partie du code en jquery me semble bon mais je pense que c'est la partie en php qui pose problème.
Dans la video, il se connecte, comme moi, à sa BDD en PDO mais il fait une requete via un query et au niveau du WHERE il place sa variable de cette manière '.$username.' ce qui me déplait un peu. je vais vous afficher mon code (jquery, php), probablement que vous comprendrai mieux mon erreur mais donc selon moi, elle se situe dans le PHP.
PS: dans le SELECT * FROM ... il entoure sa requête avec des " ", il ne faut pas utiliser des ' ' normalement ?
jquery:
PHP:
Au cas ou, HTML:
Je sais que la page de connection à la bdd est juste, je l'utilise dans plusieurs pages.
Un grand merci pour votre aide !
Je suis en train de suivre un tuto en jquery pour vérifier si un pseudo existe bien dans ma BDD. La partie du code en jquery me semble bon mais je pense que c'est la partie en php qui pose problème.
Dans la video, il se connecte, comme moi, à sa BDD en PDO mais il fait une requete via un query et au niveau du WHERE il place sa variable de cette manière '.$username.' ce qui me déplait un peu. je vais vous afficher mon code (jquery, php), probablement que vous comprendrai mieux mon erreur mais donc selon moi, elle se situe dans le PHP.
PS: dans le SELECT * FROM ... il entoure sa requête avec des " ", il ne faut pas utiliser des ' ' normalement ?
jquery:
$(document).ready(function(){ $('#username').keyup(function(){ var username = $('#username').val(); if(username != ""){ $.post('post.php',{username:username},function(data){ $('.feedback').text('data'); }); } else { $('.feedback').text('Veuillez inscrire un membre'); } }); });
PHP:
<?php include '../connection.php'; //Partie pour le jquery if(isset($_POST['username']) && !empty($_POST['username'])){ $username= htmlentities($_POST['username']); $query=$bdd->query("SELECT * FROM membre WHERE username='$username' "); $rows= $query->rowCount(); echo $rows; if($rows == 1){ echo 'Ce membre n\' existe pas'; } else { echo 'Dispo'; } }
Au cas ou, HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Swap-it.com</title> </head> <body> <form action="post.php" method="post" name="formulaire"> <label for="username">Destinataire: </label> <input type="text" id="username"/><span class="feedback"></span> </form> <script type='text/javascript' src='jquery.js'></script> <script type='text/javascript' src='func.js'></script> </body> </html>
Je sais que la page de connection à la bdd est juste, je l'utilise dans plusieurs pages.
Un grand merci pour votre aide !
A voir également:
- Problème avec mon code php
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
9 réponses
je propose une première correction ton fichier jquery.
Tu donnes une propriété de tableau avec le même nom que ta variable :
la correction que je propose est :
Ensuite pour ta question entre utiliser "" ou '' c'est la même chose pour du PHP.
Tu donnes une propriété de tableau avec le même nom que ta variable :
$.post('post.php',{username:username},function(data){
la correction que je propose est :
$.post('post.php',{'username':username},function(data){
Ensuite pour ta question entre utiliser "" ou '' c'est la même chose pour du PHP.
Je n'ai toujours aucun résultat :s
L'insertion de la variable $username dans la requête au niveau du WHERE est elle juste car sur d'autres forums je fais qu'elle est inséré soit comme ca '.$username.' ici c'est '$username'
Il y a encore 2 choses qui me chifonnent,
c'est le query(), je ne peux pas le remplacer par un prepare() ? Et la 2ème chose c'est le rowCount(),
Au niveau de la requete, je ne peux pas mettre SELECT COUNT(*) ?
L'insertion de la variable $username dans la requête au niveau du WHERE est elle juste car sur d'autres forums je fais qu'elle est inséré soit comme ca '.$username.' ici c'est '$username'
Il y a encore 2 choses qui me chifonnent,
c'est le query(), je ne peux pas le remplacer par un prepare() ? Et la 2ème chose c'est le rowCount(),
Au niveau de la requete, je ne peux pas mettre SELECT COUNT(*) ?
Comme la indiqué Zoidberg, si ta chaine de caractères est entre "" la variable sera interprétée.
Donc l'insertion de ta variable '$username' fonctionne très bien.
Si tu souhaite réellement la modifier voici deux solutions :
ou
Donc l'insertion de ta variable '$username' fonctionne très bien.
Si tu souhaite réellement la modifier voici deux solutions :
$query=$bdd->query("SELECT * FROM membre WHERE username='".$username."'");
ou
$query=$bdd->query('SELECT * FROM membre WHERE username="'.$username.'"');
Ah mais attends, je pense trouver l'erreur que j'ai +/- corriger au début sans prévenir pour pas vous broyer. Dans ma table membre j'ai le champ pseudo et non username que j'ai corrigé dans ma requête (WHERE pseudo = '$username')
Mais du coup je dois également le changer dans mon fichier jquery à ce niveau la non ?
Je ne m'y connais pas du tout en jquery donc ce que je dis est peut être complètement faux ...
Mais du coup je dois également le changer dans mon fichier jquery à ce niveau la non ?
{'username':username}
Je ne m'y connais pas du tout en jquery donc ce que je dis est peut être complètement faux ...
Tu peux nous donner le code de connection.php ?
ne zape pas de masquer les information de connexion !
je pense que ton problème vient de la connexion à la BDD
ne zape pas de masquer les information de connexion !
je pense que ton problème vient de la connexion à la BDD
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Oui bien sûr:
<?php try { $bdd = new PDO('mysql:host=localhost;dbname=trocevol', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); //mysql_query("SET NAMES UTF8"); } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } ?>
Salut,
Concernant les lignes :
La fonction htmlentities(), comme son nom l'indique, doit être utilisée à l'affichage des données dans un document html.
Pour éviter les injections sql avec PDO, 2 solutions :
- soit utiliser une requête préparée avec un paramètre
- soit utiliser la méthode PDO::quote() comme ceci :
En développement, pense également à activer le rapport d'erreur PDO dans ta connexion (par défaut en mode silencieux) et à gérer tes erreurs sql pour voir quel est le problème.
https://www.php.net/manual/fr/pdo.error-handling.php
Bonne journée
Concernant les lignes :
$username= htmlentities($_POST['username']); $query=$bdd->query("SELECT * FROM membre WHERE username='$username' ");
La fonction htmlentities(), comme son nom l'indique, doit être utilisée à l'affichage des données dans un document html.
Pour éviter les injections sql avec PDO, 2 solutions :
- soit utiliser une requête préparée avec un paramètre
- soit utiliser la méthode PDO::quote() comme ceci :
$query = $bdd->query('SELECT * FROM membre WHERE username=' . $bdd->quote($username));
En développement, pense également à activer le rapport d'erreur PDO dans ta connexion (par défaut en mode silencieux) et à gérer tes erreurs sql pour voir quel est le problème.
https://www.php.net/manual/fr/pdo.error-handling.php
Bonne journée
Il y a du nouveau, je suis un peu gêné de le dire mais étant donné que je test mes pages en local,
je lançais ma page directement depuis l'explorateur windows mais vu qu'il y a du php je dois le faire depuis mon serveur local (Wamp chez moi)
Du coup maintenant la valeur qui m'est renvoyé c'est "data" que le pseudo existe ou non.
je lançais ma page directement depuis l'explorateur windows mais vu qu'il y a du php je dois le faire depuis mon serveur local (Wamp chez moi)
Du coup maintenant la valeur qui m'est renvoyé c'est "data" que le pseudo existe ou non.
J'ai rajouté un bouton submit à mon texte html. La bonne nouvelle, c'est que une fois la page post.php lancé il parvient à me dire si le pseudo est disponible ou non mais le but de tout ca, c'est qu'il n'y ait pas de bouton submit et qu'il m'affiche instantanément et dynamiquement si le user est disponible ou non alors qu'ici il affiche simple "data"
Juste une petite correction pour ne pas induire en erreur:
En php en utilisant "..." , les variables contenues dans la chaîne seront remplacées par leur valeur : si $variable='Coucou' ; $test= "Variable: $variable". $test contiendra alors Variable: coucou .
En utilisant '...' : les variables ne sont pas remplacées, avec mon exemple $test contiendra Variable: $variable