Variable utilisée dans where

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 : Variable utilisée dans where

Re: Variable utilisée dans where

par chimonito » 27 avr. 2011, 18:23

Désolé mais c'est trop philosophique pour moi
Le prend pas mal, mais les explication à la JCVD me dépasse, lol

Re: Variable utilisée dans where

par Mazarini » 27 avr. 2011, 17:06

ouf^^

En fait ce qu'il faut comprendre c'est que ton traitement génère une requête SQL et que tu l'exécutes ensuite. Les erreur peuvent provenir du fait que la requête que tu souhaites est fausse comme du fait que tu te trompes en générant ta requête. Il ne faut jamais oublié ces 2 aspects dans la recherche de bugs.

Il y a le même problème pour le html ou l'erreur peut venir de ce que tu ne génère pas le html que tu souhaites ou que ce que tu souhaites ne corespond pas à ce que tu veux afficher.

On peut dire que PHP sert à générer un programme (requete SQL ou page html ou javascript) le bug peut venir de ce que l'on veux générer est faux aussi bien que d'une erreur dans la génération.

Re: Variable utilisée dans where

par chimonito » 27 avr. 2011, 16:55

Bien vu, merci beaucoup je m'en excuse je n'avais pas lu en entier.

Et en réfléchissant bien, c'est logique mais ce qui me faisait défaut c'était le \ que j'ai oublié pour faire '$toto'

Merci encore pour tout

Et si je peux aider c'est avec plaisir, mais je pense que mon aide ne sera pas utile :D

Benjamin

Re: Variable utilisée dans where

par Mazarini » 27 avr. 2011, 16:45

Affiche la requete SQL, tu verras si elle est bonne ou pas normalement.

J'ai édité plusieurs fois mon message, tu as du raté le remplacer '$urgentrech' par $urgentrech (ca correspond à non'')

Il faut quand même comprendre qu'étudier le source PHP est plus dur que de regarder la requête SQL directement

Re: Variable utilisée dans where

par chimonito » 27 avr. 2011, 16:37

Est ce que la syntaxe est bonne car j'ai comme erreur

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'non'' ORDER BY register_un DESC LIMIT 0,20' at line 1

Merci encore

Re: Variable utilisée dans where

par Mazarini » 27 avr. 2011, 16:25

$toto1= 'AND urgent='.$toto;

à remplacer par $toto1= 'AND urgent=\''.$toto.'\'';

Comme ca tu as and urgent = 'non' au lieu de and urgent = non

Il n'en demeure pas moins qu'il est mieux de faire :
$sql =  "SELECT ....... FROM ...... WHERE validation='oui' AND activation='oui' '$urgentrech' ORDER BY register_un DESC LIMIT $limite,$nombre";
$result = $sql->query($sql) or die($sql.'<br>'.mysql_error();
et surement remplacer '$urgentrech' par $urgentrech

Re: Variable utilisée dans where

par chimonito » 27 avr. 2011, 16:12

En faite pour être le plus clair possible voici mon code résumé

$toto= isset ( $_POST['toto'] ) ? $_POST['toto'] : 'non';
$tata= isset ( $_POST['tata'] ) ? $_POST['tata'] : '';
$toto1= 'AND urgent='.$toto;
......
$result = $sql->query( "SELECT ....... FROM ...... WHERE validation='oui' AND activation='oui' '$urgentrech' ORDER BY register_un DESC LIMIT $limite,$nombre");
.......

Voilà pour être clair

Merci

Re: Variable utilisée dans where

par Mazarini » 27 avr. 2011, 14:38

Bonjour,

Si tu regardes l'ordre sql, l'erreur doit être évidente^^

C'est l'intérêt de ne pas faire mysql_query("select...")
mais
$sql = "select ... "; // avec tes diverses variables
$result = mysql_query($sql) or die($sql."<br>".mysql_error());

Dans la majorité des cas la lecture du message permet de voir l'erreur.

Re: Variable utilisée dans where

par chimonito » 27 avr. 2011, 14:31

Non trop tôt je n'abandonne jamais

Re: Variable utilisée dans where

par popy » 27 avr. 2011, 14:29

Je te propose le suicide. Ou la démission, note.

Re: Variable utilisée dans where

par chimonito » 27 avr. 2011, 14:26

Merci pour la réponse très claire, mais cela ne marche pas
Car j'ai ça comme erreur :
Unknown column 'non' in 'where clause'

Merci

Re: Variable utilisée dans where

par Mazarini » 27 avr. 2011, 10:58

Bonjour,

Si tu fais
echo "SELECT .... FROM .... WHERE toto='$tata'"
ou
echo "SELECT .... FROM .... WHERE $variable"

Tu obtiens la même chose donc ca marchera pareil. La variable est remplacer par son contenu par PHP avant d'être transmis à MySQL. Il n'est pas fait un lien (bind) entre la variable et la commande SQL comme pour certain SGBD mais la constitution d'une chaine de caractère.

Il faut en plus utiliser la fonction mysql_real_escape_string() pour se protéger du contenu de la variable $tata.

Imagine le traitement :
$tata = 'T\' or \'A\' = \'A'; // ta variable contient T' or 'A' = 'A
$variable = "toto = '$tata'"; // ta variable contient toto = 'T' or 'A' = 'A'
Si tu fais SELECT .... FROM .... WHERE toto='$tata' ou SELECT .... FROM .... WHERE $variable tu auras des surprises
D'ou l'utilisation de $tata = mysql_real_escape_string($tata) pour sécuriser l'ordre SQL avec l'utilisation de $tata dans $variable ou dans l'ordre SQL.

Tout ca pour dire que ta méthode marche bien mais qu'il faut se méfier du contenu de $tata au cas ou $tata provienne d'une saisie et que l'utilisateur essaye de trafiquer la requête en saisissant du SQL.
Ta solution pour résoudre ton problème est bonne, le fait que la pose montre que tu n'avais pas très bien compris le principe de constitution de la commande SQL et les risques d'injection (j'étais dans ton cas)

Re: Variable utilisée dans where

par xTG » 27 avr. 2011, 10:03

Oui c'est possible. :)

Re: Variable utilisée dans where

par chimonito » 27 avr. 2011, 09:26

ok, mais en faite j'aimerais juste savoir s'il est possible de remplacer toto='$tata' par $variable dans l'expression :
SELECT .... FROM .... WHERE toto='$tata'
SELECT .... FROM .... WHERE $variable

Merci

Benjamin

Re: Variable utilisée dans where

par Mazarini » 27 avr. 2011, 08:23

Bonjour,

Lorsque tu exécute un ordre SQL, tu passe la commande SQL au serveur sous forme de chaine de caractère. Peux importe la manière dont tu constitues la chaine.

Lorsque tu fais la commande mysql_query ( $toto.$titi);
C'est équivalent à :
$SQL = $toto.$titi;
mysql_query ( $SQL);