Tom's Guide > Forum > Programmation > probleme php/sql et variables

probleme php/sql et variables

Forum Programmation : probleme php/sql et variables

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour à tous, bon deja je me présente, Igor 18 ans, et donc mon probleme est :
J'aimerais savoir si il est possible de définir une variable en cliquant sur un lien, exemple, j'aimerai que la variable $description prenne la valeur de 3 quand je clic sur le lien "Voir la déscription".
le lien n'est pas un bouton de <form> mais juste un lien <a href......</a>
Si j'étais pas trop clair ou si il vous manque des informations pour m'aider, dites le moi =)
Je vous remercis d'avance =)

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

tiens Igor ca me rapel Zelda !

oui dans ta page tu fais : $description = $_GET['id'];

et ton lien est de la forme page.php?id=3

phpdebutant.org

Répondre à okinou

Je te remercis beaucoup ca marche =)
hihi Igor le fossoyeur :D

Répondre à igoooor68

tu peux meme en mettre plusieurs:

$description = $_GET['id'];
$nom_element = $_GET['nom'];

et ton lien est de la forme page.php?id=3&nom=toto

------------------------------ sudo make me a sandwich

 

Répondre à BaCcHuSs@IDN

bah doublement merci =)
et encore une petite chose, en quoi ce passage de mon code est faux :

$variable = $_GET['idprog'];
$result = mysql_query("SELECT programmes.nom,programme.description,lien.nomlien FROM programmes,lien WHERE programmes.idprog=lien.idprog AND idprog = '$variable';" );

$row = mysql_fetch_row($result);

--------- plus loin dans le code :
echo $row[0];
echo $row[1];
echo $row[2];

pcq apres firefox me dit :
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /mnt/125/sdb/c/8/open.mad/prog.php on line 12

voila je vous remerci si vous arrivez à trouver ca, et sinon c'est pas grave je verrai bien =) vous m'avez déjà bien avancer

Répondre à igoooor68

programme.description il manque le S a programme

mysql_query("SELECT programmes.nom, programmes.description, lien.nomlien FROM programmes, lien WHERE programmes.idprog = lien.idprog AND idprog = '".$variable."'" );

et evite d'etre bourrin, mais de bien espacé :p


Message édité par okinou le 19-10-2006 à 13:50:52
Répondre à okinou

Petite aide pour tous: lorsque vous avez une erreur sql, le meilleur moyen pour la trouver est de faire un affichage de la requète et de la tester dans phpMyAdmin: celui-ci vous donnera un détail des erreurs (dans le cas présent, il aurait dit que la table programme n'existe pas)

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

oki =) je savais pas ^^ merci encore a tous pour l'aide

Répondre à igoooor68

pour le probleme numéro 2 ("programmes" et pas "programme" ) bah en fait certes c'étais une erreur mais c'etait pas tout -_- j'ai fais ce que tu m'as dis crazycat, j'ai donc tester ma requete sous phpmyadmin et l'erreur qui en résultait était la suivante :

#1052 - Column 'idprog' in where clause is ambiguous

Donc il n'arrivait pas à faire le lien entre les deux "idprog" des deux tables, j'ai pas compris pourquoi mais j'ai résolu le probleme en faisant le lien entre "programmes.nom" et "lien.nom".
bon j'ai pas vraiment résolu mais jl'ai contourné, quelqu'un aurait une éxplication au message d'erreur #1052 que j'ai recu avec les "idprog" ?

Répondre à igoooor68

AND idprog = '".$variable."'
mysql ne sait pas s'il doit choisir celui de la table programmes ou de la table lien.
Il te suffit de le préfixer du nom d'une des teux tables, si possible la plus significative (si l'une des deux est plus significative que l'autre bien sur)

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

et bien merci c'était effectivement ca (vous avez du en manger du php/sql pour voir les fautes vite fait lol un grand merci à vous pour votre temps =) =) =) )

Répondre à igoooor68

dernier probleme ( je l'espere pcq j'aime pas trop abuser du temps des autres, et là c'est un peu ce que je fais, bref.. )
vous l'aurez comprix, j'ai une table programmes avec idprog nomprog descprog (j'ai un peu changer les nom pour m'y retrouver) et une table liens avec idlien desclien (le lien proprement dit) et idprog (clé étrangere vers celle de programme)
Donc disons que j'ai dans programmes la ligne suivante :
"1" "Winamp" "la description de winamp"
et dans la table liens j'ai :
"1" "le lien de winamp" "1"
"2" "le lien du patch fr de winamp" "1"

donc avec toujours ma requete (qui marche enfin !!! merci ^^) :
-----
$variable = $_GET['id'];

$result = mysql_query("SELECT programmes.nomprog, programmes.descprog, liens.desclien FROM programmes, liens WHERE programmes.idprog = liens.idprog AND programmes.idprog = '".$variable."'" );

$row = mysql_fetch_row($result);
-----

et plus loin dans le code :
--
<?php echo $row[0]; ?>
--
<?php echo $row[1]; ?>
--
<?php echo $row[2]; ?>
--

Tout marche sauf que pour le echo $row[2] il ne va m'afficher qu'un seul lien (le premier de la table) et pas le deuxieme qui est le patch fr et qui pourtant est aussi relié a idprog (je sais pas trop si je suis clair)

Bref ma question est, comment faire pour qu'il m'affiche les deux liens ?
Et encore une fois merci pour toute votre aide =)

Répondre à igoooor68

ta requète n'est pas bonne, car elle va chercher les infos sur un programme (normal) et UN SEUL lien correspondant.
Elle devrait être du genre:

Code :
  1. <?
  2. $sql = "SELECT programmes.*, liens.desclien FROM liens LEFT JOIN programmes ON lien.idprog=programmes.idprog WHERE programmes.idprog=$variable";
  3. $req = mysql_query($sql);
  4. $row = mysql_fetch_array($req);
  5. echo $row['nomprog'];
  6. echo $row['descprog'];
  7. echo $row['desclien'];
  8. if (mysql_num_rows($req) > 1) {
  9.   for ($i=1;$i<mysql_num_rows($req);$i++) {
  10.       mysql_data_seek($req,$i);
  11.       $row = mysql_fetch_array($req);
  12.       echo $row['desclien'];
  13.   }
  14. }
  15. ?>


Pas si simple n'est-ce pas?

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

ben pour moi ca requete etait bonne...
C'est juste qu'il lui manque un fetch , non ?
a mettre dans une boucle.

(PS: y a bien longtemps que j'ai pas fait ca avec php...)

------------------------------ sudo make me a sandwich

 

Répondre à BaCcHuSs@IDN

là j'essai de comprendre, dis moi si j'ai bien compris.
Le lien entre les deux tables tu le fais plus par le WHERE mais directement dans le FROM avec le LEFT JOIN ... ON ....
$req c'est pour effectuer la requete depui $sql
$row c'est pour effectuer fetch_array (que je connais pas) sur la requete $req

et ensuite, le echo $row['nomprog']; et ['descprog'] c'est pour afficher ces deux champs, je suppose que vu qu'il ne sont pas dans le code, le row est allez les chercher dans la base a l'aide du programmes.*
ensuite la je commence a secher, donc si je pouvais avoir des explications sur ce qu'il y a dans le if et for et jusqu'a la fin (oui je débute en php/sql ca doit se voir lol).
mis à part ca, j'avais juste pour ce que j'ai expliqué ? ou j'étais à coté ? -_-'

Répondre à igoooor68

je crois que j'ai compris la suite ^^ mais bon toujours pas sur, alors je dis ce que j'ai cru comprendre (je traduit en français):
Si (nombre d'enregistrement de la requete ($req) superieur à 1) {
On défini la variable ($i=1;si $i inferieur au nombre d'enregistrement($req); on fait $i+1 (donc passe à 2)) {
on recherche les valeurs des deux variables ($req et $i);
on redefini $row
on affiche le premier enregistrement de desclien et on revien a la fonction For et on "tourne" jusqu'a ce que $i soit superieur au nb d'enregistrement.

Bon je suis d'accord vu comme ca ca fais peur, mais est-ce que j'ai au moins compris ton code maintenant ? ^^

Répondre à igoooor68

bien, tu as compris.
Et contrairement à ce que disais bacchuss, ta requète était fausse.
Bon, j'avoue avoir légèrement compliqué la mienne, mais parce que ça la rend plus logique.

Alors, ta requète n'était pas bonne parce que ta close "principale" allait chercher "programmes.idprog=$variable", or cette close ne ramène qu'une seule ligne.
Tu aurais cherché sur lien.idprog=$variable, c'eut été bon (mais pas logique).
Le LEFT JOIN permet d'aller chercher un enregistrement dans une table et tous ceux correspondants dans une autre (relations 1 à n).

Concernant mon code de déroulement, là aussi j'ai joué: tu aurais pu stocker tous les $row['desclien'] dans un tableau de données et (en faisant défiler tes enregistrements), chaque fois affecter $row['nomprog'] et $row['descprog'] à des variables: ces valeurs ne changent pas d'une ligne à l'autre :)

Mais c'est bien, tu as tout bien suivi, tu peux essayer d'optimiser le code maintenant.
Et n'hésite pas à demander si tu as un soucis, pour une fois que quelqu'un cherche à comprendre ce qu'on lui donne, ça fait plaisir :)

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

bah ouai j'essai de comprendre vu que j'essai de me mettre au php/sql (marre de html -_-') donc faut bien que je comprenne ce que je fais ^^
Bah pour le moment je crois que c'est bon j'ai à peu pret tout ce qui me faut =)
et donc le premier code que j'avais, il reste quand meme bon si il n'y a pas plusieur liens pour un seul programme non ?
Encore merci =)

Répondre à igoooor68

ha et oui, tu me conseil quoi entre wamp et easyphp/apache ?
pcq j'utilise wamp personnellement (tous les programmes sont dedans) mais je sais pas si c'est forcement ce qu'il y a de mieux et si je devrai pas plutot prendre easyphp apache et tout a part. ?

Répondre à igoooor68

easyphp contient apache...
Je t'avoues que pour moi les 2 sont pareil, tout dépend de l'utilisation finbale.
Pour développer, celui que tu veux en fonction du point suivant: l'hébergement.
- Si à terme tu met ton site chez un hébergeur, choisis le système adapté (easyphp doit etre en php4.3 alors que wamp est en php5, la plupart des hébergeurs sont en php4.3)
- Si tu héberges sur ta bécane, prend celui qui est le plus stable (easyphp fonctionne très bien en tant que service, je ne sais pas pour les autres).

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

crazycat@idn a écrit :


Et contrairement à ce que disais bacchuss, ta requète était fausse.



euh...
le principe d'un SELECT est de selectionner toutes les lignes.
pour eviter le produit cartesien, on met la relation entre les tables (p.idprog = l.idprog) et ensuite on applique un filtre (programmes.idprog = '".$variable."'" )

ainsi sa requete retourne 2 lignes:

winamp desc winamp lien winamp
winamp desc winamp patch fr winamp



j'ai pas bon ?
ou ca alors ?

------------------------------ sudo make me a sandwich

 

Répondre à BaCcHuSs@IDN

entre wamp et easyphp WAMP sans hésité easyphp plus à jour, extenssion vieillote et limité.

wamp = php5, mysql5, sqlite, phpmyadmin, apache 2, et des tonnes d'extenssion activable en 1 clic, bref, le paradis du dev :)

Répondre à okinou

BaCcHuSs@IDN a écrit :

le principe d'un SELECT est de selectionner toutes les lignes.
pour eviter le produit cartesien, on met la relation entre les tables (p.idprog = l.idprog) et ensuite on applique un filtre (programmes.idprog = '".$variable."'" )
ainsi sa requete retourne 2 lignes:
j'ai pas bon ?
ou ca alors ?



Dans le cas présent, tu peux avoir raison mais pas forcémment, j'ai connu pas mal de fonctionnement étranges avec mysql parce que la requète était trop simplifiée et ne tenait pas compte de cas particuliers. Dans le cas où aucun lien n'est référencé pour le programme, que se passe t'il avec la requète simple?

@okinou: *beep* vous êtes le maillon faible! :) Combien d'hébergeurs connais-tu qui offrent php5, mysql5 et apache2 (quoi que sur un site bien fait, on se fout un peu de la version d'apache)? Quand on développe un site, on part sur des bases standardisées car on ne sait pas quelle configuration le client aura.

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

bip crazyyyyyyyyyyyy
je ne parlais pas de dev uniquement sous php5 et mysql5.

wamp propose mysql4 et php4 derniere version également.

je parlais de php5 pour les personnes voulant s'y mettre et ayant un serveur près a l'emploi et bien configuré pour le local et qui est maintenu à jour par rapport à easyphp qui est laissé a l'abandon depuis pas mal de temps, sinon comme hébergeur il y 'a :

ovh,1and1,sivit(juste php5),oxyd,ikoula(juste php5)...

ps: c'est pas a moi que tu sortira ce refrein, je le connais par coeur :), j'orientais la personne pour les possibilité que wamp offre.


Message édité par okinou le 20-10-2006 à 12:22:38
Répondre à okinou

lol, j'avais bien compris le sens de ton message, mais il ne faut pas oublier qu'ici, on s'adresse essentiellement (que personne ne le prenne mal) à des personnes qui débutent et utilisent des hébergeurs classiques et souvent low-cost.
Je préconise plutôt easyphp justement pour les raisons qui te le font refuser, à savoir qu'il est vieillot. PHP (et mysql) ont une compatibilité descendante, les nouvelles versions acceptent (avec quelques warning) les scripts faits pour des versions plus anciennes, donc si on fait un bon php4, on passera sans soucis sur un serveur php5... l'inverse n'est pas vrai.

------------------------------ Réseau IRC Francophone | g33k-zone
Répondre à crazycat@idn

vu dans ce sens oui tout à fait, et comme tu le signal, tout le monde ne le sait pas :)

Répondre à okinou
Tom's Guide > Forum > Programmation > probleme php/sql et variables
Aller à :

Il y a 1996 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens