Mysql et php

Signaler
Messages postés
10
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
28 octobre 2010
-
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
-
Bonjour,

je ne suis pas un expert en php, j'essaie d'exécuter une requête sur MySql à l'aide d'une variable MySql, mais la requête ne donne aucun résultat, par contre, si je force le contenu de la variable, la requête fonctionne !

voici mon code pour récupérer la variable sqlarti :

$resultat=mysql_query("SELECT * FROM param ;");
while($row = mysql_fetch_array($resultat))
{
$sqlarti=$row["sqlarti"];
}
Nota : elle se charge bien (vue par Echo ...)

voici mon code pour récupérer les enregistrements fonction de la variable sqlarti :

$resultat=mysql_query("SELECT * FROM articles WHERE famille ='".$sqlarti."'");

--> pas de résultats

donc, lorsque je force :

$sqlarti="INFORMATIQUE";

-- > la reqête s'exécute !

s'agit-il de syntaxe ou bien de format de la variable ou autre chose ...

Quelqu'un peut-il m'aider ?
Merci d'avance

20 réponses

Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
7
ben le code est propre a la base (enfin ca se discute... nous somme arrivé a l'aire de PDO par exemple...) mais a mon avis le problème est le suivant:

et comment définis-tu la variable $sqlarti??

si tu veux la passer en tant que parametre de page (tapage.php?sqlarti= cequetuveux ) il faudra que tu utilise une contruction du type:

$tavariable = $_GET['nom_de_la_var_dans_l_url'];

où il conviendra de remplacer les points voulus ;)

Parcontre ATTENTION à la sécurité!
Vérifie toujours les données modifiables pas l'utilisateur que tu utilise dans tes scripts!

Rien que sur cet exemple on pourrais faire des malheurs simplement!

Bonne chance!

- Pysco68
Messages postés
10
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
28 octobre 2010

Merci beaucoup pour ta réponse rapide,

Au point de vue de la sécurité, je ne suis vraiment pas pour l'instant porté sur le problème, car j'essaie de progresser dans les fonctions de base (MySql, PHP, et tout le reste ...).
En fait, j'ai trouvé que la longueur des variables venant de la base MySql avait un caractère de plus, j'ai donc affiché la valeur Ascii de chaque car et j'ai vu que le dernier était toujours un car Null (0).
J'ai donc fait un substr(...) qui enlève le dernier caractère.
Je ne vois pas pourquoi j'en suis arrivé là ! As-tu un avis ?

Je te donne l'adresse de ce que j'ai fait, l'avis d'un averti est toujours positif :
http://idea-pb.fr/essaisql.php

Merci beaucoup

Pierre
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
7
Au point de vue de la sécurité, je ne suis vraiment pas pour l'instant porté sur le problème

-> TU DEVRAIS!

Sinon pour ton problème, c'est difficile de te répondre a l'aveuglette, puisque je ne connais pas le reste du code autour...

Je vais encore vite t'écrire un MP...

- Pysco68
Messages postés
10
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
28 octobre 2010

Re ... Pysco68

je n'ai pas cherché à super-protéger le téléchargement, à l'époque de ce site, je n'utilisais pas de db et le logiciel est de topute façon protégé par sa propre installation, j'ai mis 1 PX et 1 Log un peu pour me faire la main !

Par contre, je vois que n'as répondu a aucune question que je posais ! Lis bien mes questions, il y a suffisamment de contenu pour avoir le sens de mes questions.

J'en ai 1 autre, as-tu une astuce pour positionner un select sur une valeur précise (celle rentrée puis lue dans Mysql) ?
Et aussi peut-on imaginer d'éviter le bouton submit et agir aussitôt que le select change (en PHP bien-sur).

Merci et bonne soirée

pierrot862
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
7
Je ne vois pas de quelles questions tu parles.

Sinon pour ce qui est de positionne un select sur une certaine position, c'est faisable avec l'attribut "selected" de l'élément <option> dans ta liste.

Pour l'auto-rafraichissement, tu peux te servir uniquement de javascript pour de telles interactions:

essaye voir ce petit bout de code, il devrait marcher, mais je n'ai pas pris le soin d'essayer ;) c'est en tout cas, grosso-modo la manière de faire:
<select onchange="this.form.submit();">
#

J'espère que ca t'aide ;)
- Pysco68
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Par contre, je vois que n'as répondu a aucune question que je posais ! Lis bien mes questions, il y a suffisamment de contenu pour avoir le sens de mes questions.

Je ne suis pas de cet avis, ça prête fortement à confusion :
Ca :
$resultat=mysql_query("SELECT * FROM param ;");
while($row = mysql_fetch_array($resultat))
{
$sqlarti=$row["sqlarti"];
}


et ça :
$resultat=mysql_query("SELECT * FROM articles WHERE famille ='".$sqlarti."'");

... font partie d'une même code ? (cette dernière ligne seconde la première ?)
La variable $sqlarti est celle définie dans le while ?

Si c'est le cas je ne vois pas bien ce que tu souhaites faire.
Si c'est ce à quoi je pense tu gagnerai à utiliser qu'une seule requête sql.

Je m'associe à Pysco pour la sécurité :
-> TU DEVRAIS!

le logiciel est de topute façon protégé par sa propre installation

=> pas compris

J'en ai 1 autre, as-tu une astuce pour positionner un select sur une valeur précise (celle rentrée puis lue dans Mysql) ?

<select ...>
<option ...>klknsl</option>
<option value="machin" selected="selected">truc</option>
...
</select>

Et aussi peut-on imaginer d'éviter le bouton submit et agir aussitôt que le select change (en PHP bien-sur).

En PHP surement pas !!
Sinon oui, en javascript, mais c'est sans doute une bien mauvaise idée.
Regarde du côté de "onchange"

Cordialement,

Kohntark -
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
7
@Kohntark:
le logiciel est de topute façon protégé par sa propre installation
=> pas compris


J'ai découvert d'autres trucs sur son site perso ;)

C'est tout,

sinon bonne fêtes a toi, si on ne se recroise pas sur le forum d'ici là ;)

cordialement,
- Pysco68
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
oulà, j'avais loupé des messages moi ... je n'ai lu le message de 15:04 qu'à moitié (et raté le tiens Pysco) ... les vacances tardent décidément.

Je la refais :
En PHP surement pas !!
Sinon oui, en javascript, mais c'est sans doute une bien mauvaise idée.
Regarde du côté de "onchange"



le logiciel est de topute façon protégé par sa propre installation,[...]

OK pour ton logiciel, mais nous ne parlons pas de ça ici, mais de ton site.
Traiter la sécurité est primordiale. Si tu ne le fais pas attends toi tôt ou tard qu'un imbécile mette ton site à genoux, qu'il l'utilise à des fins néfastes, etc ... etc ... et tes logs n'y changeront rien.

En fait, j'ai trouvé que la longueur des variables venant de la base MySql avait un caractère de plus, j'ai donc affiché la valeur Ascii de chaque car et j'ai vu que le dernier était toujours un car Null (0).
J'ai donc fait un substr(...) qui enlève le dernier caractère.
Je ne vois pas pourquoi j'en suis arrivé là ! As-tu un avis ?

Oublie le substring et corrige plutôt cette erreur, car il y en a une, c'est sur
Peut être au niveau de l'insertion ?
Quel est le type de champ mysql ?
Quel est le code ascii de ce dernier caractère ?

@Pysco:
bonnes fêtes à toi aussi

Cordialement,

Kohntark -
Messages postés
10
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
28 octobre 2010

Merci pour vos différentes réponses,

l'insertion a été faite directement sur le site 1&1 par leur gestion MySql (insertion ...)
Les champs (famille de la table articles et sqlarti de la table param sont tous deux de type varcar(20)
Comme je l'ai mis au-dessus, la valeur ascii du caractère en plus est 0 : caractère "null"

encore merci et bonnes fêtes à tous

pierrot86
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
7
rebonjour,

tu dois surement avoir effectué une petite erreur a la saisie, ou c'est un navigateur qui t'a joué un tours (pas impossible...). Essai peut-être de faire l'insertion avec un script.

Sinon, il y a la façon "hard", qui, comme Konthark l'a dit, n'est pas bien belle, d'utiliser trim() (la doc)

Enfin voilà, j'espère que ca t'avance!

Bonne journée
- Pysco68
Messages postés
10
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
28 octobre 2010

Hello,

merci pour ta réponse,

Trim donne satisfaction et c'est + propre, mais je ne m'explique pas ce problème; j'ai chagé le format sur Mysql de VarChar en Char, mais cela ne changeait rien.

Le lancement sur Select OnChange ='this.form.submit() fonctionne super, par contre, je n'arrive pas à positionner le Selcet sur une position existante, il crée une nouvelle ligne (un doublon donc), voilà le code :

echo "<form method="POST" action="test.php" >";
echo "<select name="famille" onchange='this.form.submit()' >";
$champs=mysql_query("SELECT famille FROM articles GROUP BY famille ORDER BY famille ;");
while ($data = mysql_fetch_array($champs))
{
echo '<option value="'.$data[0].'">'.$data['famille'];
echo '</option>'."\n";
}
echo '<option value='.$sqlarti.' selected="selected" >'.$sqlarti.'';
echo '</option>'."\n";
echo "</select>";

$sqlarti étant la variable qui contient la valeur de la position que je souhaiterais que le Select affiche.

Je te redonne l'adresse pour que tu vois :
http://idea-pb.fr/essaisql.php

NB, on peut cliquer sur les miniatures !

Merci et à +

pierrot862
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
7
C'est normal qu'il crée un doublon.

Il faut qu'a l'intérieur de ta boucle tu fasse une vérification si la ligne actuelle correspond au contenu de la variable $sqlarti, et que tu insère le selected en fonction de ca.

J'espère que c'est bon pour toi ;)
Messages postés
10
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
28 octobre 2010

Psyco68, je n'y arrive pas, il y a toujours création d'1 item dans ma liste alors que je veux juste me positionner sur le bon item !!!!!!!!!!

je mets tout le code concernant cette liste déroulante, tu pourrais peut-être me dire ce qui cloche ?

echo "<form method="POST" action="test.php" >";
echo "<select name="famille" onchange='this.form.submit()' >";
$champs=mysql_query("SELECT famille FROM articles GROUP BY famille ORDER BY famille ;");
while ($data = mysql_fetch_array($champs))
{
echo '<option value="'.$data[0].'">'.$data['famille'];
if ($data['famille']==$sqlarti)
{
echo '<option value=$sqlarti selected="selected">'; <--- ?????
}
echo '</option>'."\n";
}
echo "</select>";

echo "<td>";
echo "</form>";

merci

pierrot862
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
7
Ben tu n'est pas loin du but,

mais pourquoi ne fais tu pas un if/else

du genre:
:si on est sur le truc a positions:
     -> on insère "selected"

:sinon
     -> listing "standard"


parce qu'actuellement tu fais:
-> on insère le listing standard
:si on est sur le truc a positions:
     -> on insère "selected"


et tu insère donc deux entrées si on est dans le cas de la correspondance $data['famille']==$sqlarti d'ou le doublon...

J'espère que tu comprends
- Pysco68
Messages postés
10
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
28 octobre 2010

j'ai compris, mais je n'arrive pas à trouver la syntaxe exacte pour n'insérer que "select"; peux-tu me la passer ? (avec tous les " ' . \ etc etc ...

merci

pierrot862
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
7
là je ne te suis pas.

il faut juste que tu adapte ce petit bout là, de facon a n'insère qu'une ligne(et pas deux dans le cas ou ta condition est vraie!)

while ($data = mysql_fetch_array($champs))
{
   echo '<option value="'.$data[0].'">'.$data['famille'];
   if ($data['famille']==$sqlarti)
   {
      echo '<option value=$sqlarti selected="selected">'; <--- ?????
   }
   echo '</option>'."\n";
} 


Il faut juste que tu mette encore un petit "else" là dedans.
- Pysco68
Messages postés
10
Date d'inscription
lundi 6 novembre 2000
Statut
Membre
Dernière intervention
28 octobre 2010

Ca y est,

merci, c'est super

as-tu été sur les tests que je suis en train de faire ?

http://idea-pb.fr/essaisql.php

que penses-tu de cette présentation avec les miniatures cliquables ?

Encore merci !

pierrot862
Messages postés
681
Date d'inscription
samedi 26 février 2005
Statut
Membre
Dernière intervention
21 août 2014
7
c'est pas trop mal ;)

content d'avoir pu t'aider.


- Pysco68
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Re,

Soit dit en passant :
"xhtml1-strict.dtd"
=> certainement pas !! Au mieux tu es en vieux HTML 4.01 Transitional, et encore.
Tu devrais te mettre un peu au goût du jour côté HTML, tu y gagneras (pense aussi aux feuilles de styles). Tu peux utiliser le site du W3C pour t'y aider.

Une fois cela fait tu devrais jeter un oeil à Ajax qui dans ton cas est tout indiqué (pour ne pas dire "obligatoire") Ca te permettrait de ne pas avoir à recharger la page à chaque fois que le select change (entres autres)


Cordialement,


Kohntark -
Messages postés
3706
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Au cas où tu ne connaitrais pas, quand je parle du site du W3C c'est ici :
http://validator.w3.org/

Pour ta page : 99 Errors, 16 warning(s)

Bonne soirée,

Kohntark -