Problème avec mon code php

Résolu/Fermé
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018 - Modifié par Aaymeric le 16/02/2015 à 13:12
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018 - 17 févr. 2015 à 17:01
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:
$(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:

9 réponses

kangourouxxx Messages postés 71 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 6 mars 2015 2
16 févr. 2015 à 13:41
je propose une première correction ton fichier jquery.
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.
0
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
16 févr. 2015 à 13:52
Salut,
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
0
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018
16 févr. 2015 à 14:00
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(*) ?
0
kangourouxxx Messages postés 71 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 6 mars 2015 2
16 févr. 2015 à 15:20
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 :
$query=$bdd->query("SELECT * FROM membre WHERE username='".$username."'");

ou
$query=$bdd->query('SELECT * FROM membre WHERE username="'.$username.'"');
0
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018
Modifié par Aaymeric le 16/02/2015 à 14:05
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 ?
{'username':username}


Je ne m'y connais pas du tout en jquery donc ce que je dis est peut être complètement faux ...
0
kangourouxxx Messages postés 71 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 6 mars 2015 2
16 févr. 2015 à 15:13
Non ce n'est pas nécessaire, mais pour toi c'est peut-être utile pour t'y retrouver par la suite.
0
kangourouxxx Messages postés 71 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 6 mars 2015 2
16 févr. 2015 à 15:22
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018
16 févr. 2015 à 15:36
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());
}

?>
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
16 févr. 2015 à 15:56
Salut,

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
0
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018
16 févr. 2015 à 20:23
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.
0
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018
16 févr. 2015 à 21:37
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"
0
kangourouxxx Messages postés 71 Date d'inscription jeudi 31 janvier 2008 Statut Membre Dernière intervention 6 mars 2015 2
17 févr. 2015 à 08:02
Change simplement cette ligne :
$('.feedback').text('data');


par :
$('.feedback').text(data);
0
Aaymeric Messages postés 78 Date d'inscription jeudi 29 septembre 2011 Statut Membre Dernière intervention 7 octobre 2018
17 févr. 2015 à 17:01
Et bien un grand merci !!!!
C'était tout bête et logique, un peu déçu de ne pas l'avoir trouvé moi même mais un grand merci ! :)
0