Souci affichage requete SQL via des variables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Souci affichage requete SQL via des variables

Re: Souci affichage requete SQL via des variables

par sirakawa » 09 oct. 2014, 09:03

Moi, j'aboutis à ça:
<?PHP
$bdd = new PDO('sqlite:/home/bilou/music.sql3'); //pour avoir un $bdd sans mettre le souk dans mes affaires
::silukation du post
$type_recherche = "client";
$recherche = "Amfred";

$type_recherche = $bdd->quote($type_recherche);
$recherche=$bdd->quote($recherche);

$requete = "SELECT * FROM client WHERE $type_recherche = $recherche";
print "$requete";
?>

Re: Souci affichage requete SQL via des variables

par Carpediem » 08 oct. 2014, 21:19

Bonsoir,

Effectivement peut être que cela me sélectionnait tout. Je n'avais qu'un enregistrement afin de pouvoir tester. Enfin bref, ne trouvant pas de solution. J'ai décidé d'enlever le type de recherche, la recherche elle se fera par le nom du client.

Merci encore pour votre aide et vos précieux conseils.

A très bientôt

Re: Souci affichage requete SQL via des variables

par xTG » 08 oct. 2014, 18:32

Moi je peux en parier ma main que le code que tu nous as posté ne peut fonctionner du tout...
Il ne fait que lister la TOTALITE de la table sans faire aucune sélection, donc retourne toujours le même nombre d'enregistrement.

Re: Souci affichage requete SQL via des variables

par Carpediem » 08 oct. 2014, 16:59

Bonsoir,

Cela ne fonctionne pas. la requête s'execute mais rien ne s'affiche. 9a fait la même chose que mon script quand je lui demande a partir d'un nom de famille. Mon script fonctionne par contre quand il sagit d'un identifiant à 5 chiffres, tout s'affiche nickel.

Je ne comprends vraiment pas...

Re: Souci affichage requete SQL via des variables

par xTG » 08 oct. 2014, 15:55

Là ça fait n'importe quoi surtout...
Cela se traduit par :
SELECT * FROM client WHERE true
La bonne utilisation est la suivante :
$recherche = $bdd->query('SELECT * FROM client WHERE '. $bdd->quote($type_recherche) . '="'. $bdd->quote($recherche).'"');
Utilisation de quote pour protéger contre les injections SQL.

Re: Souci affichage requete SQL via des variables

par Carpediem » 07 oct. 2014, 15:37

Bonjour,

Pour ceux qui viendrait éventuellement sur ce post, la soluce à mon problème est celle ci :
$recherche = $bdd->query('SELECT * FROM client WHERE "'.$type_recherche=$recherche.'"');
En effet, ma concaténation n'était pas bonne, je sais pas de quelle façon il pouvait l'interpréter mais la ça fonctionne.

A bientôt

Re: Souci affichage requete SQL via des variables

par Carpediem » 21 sept. 2014, 23:20

Merci, j'avance sur d'autres scripts de mon site et je reviens vers vous quand j'aurais réussi à traiter mes données correctement.

A très vite

Re: Souci affichage requete SQL via des variables

par xTG » 21 sept. 2014, 20:27

Bon courage. :)
Et si tu as des questions, n'hésites pas, nous sommes là pour conseiller.

Re: Souci affichage requete SQL via des variables

par Carpediem » 21 sept. 2014, 20:24

Bonsoir,

ca marche, pas de souci, je vais faire ça. Je rencontre un souci similaire sur mon formulaire de contact. Mais pour remettre dans le contexte, j'ai un site pour ma copine coiffeuse à domicile qui tourne depuis un peu moins d'un an sans aucun problème. Afin de continuer le développement de l'entreprise, nous avons décidé de refondre le site, d'y ajouter des fonctionnalités et de refaire le référencement afin d'être premier sur une bonne partie des requêtes dans les moteurs de recherche. Donc mon formulaire fonctionne très bien encore en ce moment sur mon site mais ne fonctionne plus en local (J'ai bien vérifié mes logs a la bdd a chaque fois), je comprends pas pourquoi la encore.

PS : Je suis tourneur/fraiseur de métier, passer d'un métier manuel à quelque chose d'intellectuel n'est pas toujours chose aisé surtout dans ce domaine. J'essaye donc de m'en sortir en fonction de mes capacités dans ce domaine. Merci

Re: Souci affichage requete SQL via des variables

par xTG » 21 sept. 2014, 19:39

Dans ce cas réadaptes ton code avec mon conseil de protection des variables (même pas un conseil en fait, c'est la seule façon de faire).
Et affiches avec var_dump tes variables résultantes pour le cas où cela ne fonctionnerait pas.
Ta requête est correcte et on a vu que sous phpmyadmin elle te retourne des infos.
Donc le souci est bien dans le contenu des variables.

Ah et au passage...
Je sais que mon codage est pas terrible mais pour ma défense, c'est dans mon espace admin du site sécurisé par htaccess et htpasswd donc peu de chance d'avoir des injections sql.
C'est absolument pas une raison... Le jour où on trouve une faille dans le htaccess tu seras bien content d'avoir fait du code propre. :wink:
On dit souvent qu'un bon développeur c'est une personne qui code facilement sans se poser de question un code propre adaptatif à toute utilisation.
En gros c'est une personne qui code une requête SQL sans se poser la question de s'il va être possible d'y injecter ou non du code malveillant. Il la protège, point barre.

Si tu savais le nombre de jours perdus sur certains projets à cause de code mal pensés de ce genre. :)
Il y en a eu, et il y en aura...

Re: Souci affichage requete SQL via des variables

par Carpediem » 21 sept. 2014, 19:12

Dans ma table c'est bien 00001, je me suis trompé en refaisant la requête

Re: Souci affichage requete SQL via des variables

par xTG » 21 sept. 2014, 18:50

Ton code initial est correct, c'est ta requête qui ne l'est pas.

La requête exacte qui est exécutée c'est la suivante :
SELECT * FROM `client` WHERE identifiant_client='00001'
Ce qui change énormément si ton champs est un entier... Tu as quoi dans ta table ? 1 ou 00001 ?

Re: Souci affichage requete SQL via des variables

par Carpediem » 21 sept. 2014, 18:29

Code : Tout sélectionner

SELECT * FROM `client` WHERE identifiant_client=00001
pardon :). je m'y perds à force

Re: Souci affichage requete SQL via des variables

par Carpediem » 21 sept. 2014, 18:28

J'ai un peu changer mon traitement mais rien n'y fais, rien que ma parti html (identifiant, civilité etc..) ne s'affiche pas
<?php

if (isset($_POST["envoyer"])){

$etat = "erreur";

	// On récupère les champs du formulaire, et on arrange leur mise en forme
  
	// trim()  enlève les espaces en début et fin de chaine
  
	if (isset($_POST["type_recherche"])) { $type_recherche=trim(htmlspecialchars($_POST["type_recherche"])); }
  
  if (isset($_POST["recherche"])) { $recherche=trim(htmlspecialchars($_POST["recherche"])); }
  
if (empty($_POST["type_recherche"])) { 
		// On met dans erreur le message qui sera affiché
		$erreur="Le type de recherche est vide..."; 
	}
  // reception date
  elseif (empty($_POST["recherche"])) { 
		// On met dans erreur le message qui sera affiché
		$erreur="La case recherche est vide..."; 
	}
  
  else { 
		$etat="ok";
    }
  }
  
if ($etat=="ok"){
              
  try
{
    $bdd = new PDO('mysql:host=localhost;dbname=coiffure', 'root', '');
    $bdd->query("SET NAMES UTF8");
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}


$reponse = $bdd->query('SELECT * FROM client WHERE "'.$type_recherche.'" = "'.$recherche.'"');
 

while ($donnees = $reponse->fetch())
{
?>

     Identifiant : <?php echo $donnees['identifiant_client']; ?><br />
     Civilité : <?php echo $donnees['civilite']; ?><br />
     Nom : <?php echo $donnees['nom']; ?><br />
     Prenom : <?php echo $donnees['prenom']; ?>

   
<?php
}
 
$reponse->closeCursor(); // Termine le traitement de la requête

}

elseif ($etat=="erreur"){ 
		// On affiche le message correspondant à l'erreur
		echo "<h4>$erreur"; 
	}

else {
    header('Location: gestion-client-prestathair.php');
}

	?>

Re: Souci affichage requete SQL via des variables

par Carpediem » 21 sept. 2014, 18:20

Avez vous quelque chose à dire sur mon while ci dessous, j'ai l'impression que c'est lui qui plante
while ($donnees = $reponse->fetch())
{
?>

     Identifiant : <?php echo $donnees['identifiant_client']; ?><br />
     Civilité : <?php echo $donnees['civilite']; ?><br />
     Nom : <?php echo $donnees['nom']; ?><br />
     Prenom : <?php echo $donnees['prenom']; ?>

   
<?php
}
 
$reponse->closeCursor(); // Termine le traitement de la requête

}