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   -
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   Statut Membre Dernière intervention   2
 
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   Statut Membre Dernière intervention   100
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   2
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   2
 
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   Statut Membre Dernière intervention   2
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   527
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   2
 
Change simplement cette ligne :
$('.feedback').text('data');


par :
$('.feedback').text(data);
0
Aaymeric Messages postés 78 Date d'inscription   Statut Membre Dernière intervention  
 
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