lutin Posté 12 Janvier 2006 Posté 12 Janvier 2006 (modifié) Bonjour J'ai une liste déroulante qui contient certaines catégories de ma base de données. J'ai fait en sorte que quand je choisis une categorie dans la liste deroulante, une deuxieme liste deroulante apparaisse en dessous avec les choix specifiques a cette categorie dans une base de donnée egalement. Le probleme est que au lieu que l'action se passe dans la meme fenetre, quand je choisis la categorie dans la premiere liste, cela ouvre une nouvelle fenetre ou il y a les deux listes. La deuxieme liste contient bien les bons elements mais la première liste n'a pas le choix de la bonne categorie en selected. Je voudrais donc que l'action se passe sur la meme page initiale. Mon code : <script language="javascript"> function categ(cat){ adresse = "supr.php?cat=" + cat; open(adresse); } </script>...............<SELECT name="Categ" onchange="categ(value)">..<OPTION value="<? echo $donnees['Num'] ?>"><? echo $donnees['Titre']; ?></OPTION>..</select> Modifié 12 Janvier 2006 par lutin
MarvinLeRouge Posté 12 Janvier 2006 Posté 12 Janvier 2006 (modifié) Salut, A priori, ça donnerait quelque chose du genre : $str_select_cat = "...";if (isset ($_GET ["cat"])){ $cat = $_GET ["cat"]; $str_select_cat = str_replace ("<option value=\"$cat\">", "<option value=\"$cat\" selected=\"selected\">", $str_select_cat);} Modifié 12 Janvier 2006 par MarvinLeRouge
lutin Posté 12 Janvier 2006 Auteur Posté 12 Janvier 2006 (modifié) Je n'ai pas réussi a comprendre ton code, voici mon code entier. <script language="javascript"> function categ(cat){ adresse = "supr.php?cat=" + cat; window.open(adresse); } </script><?mysql_connect("localhost", "****", "***");mysql_select_db("jardin");$reponse = mysql_query("SELECT * FROM categs ORDER BY Titre");$cat = $_GET['cat'];$Num = $_POST['tofo'];$reponse2 = mysql_query("SELECT * FROM photos WHERE Categorie=$cat");$sql = "DELETE FROM photos WHERE x='$Num'";mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());mysql_close();?><p><strong><u>INTERFACE DE SUPPRESSION DE PHOTOS</u></strong><br><br><form method="post" enctype="multipart/form-data"><? if($cat=='') { ?> <strong>Categorie de l'image a supprimer :</strong><br> <SELECT name="Categ" onchange="categ(value)"> <? while ($donnees = mysql_fetch_array($reponse)) { ?> <OPTION value="<? echo $donnees['Num'] ?>"><? echo $donnees['Titre']; ?></OPTION> <? } ?> </SELECT><br><br><? } ?><? if($cat!='') { ?><?mysql_connect("localhost", "****", "***");mysql_select_db("jardin");$reponse3 = mysql_query("SELECT Titre FROM categs WHERE Num=$cat");$catttt = mysql_fetch_array($reponse3);mysql_close();?>Vous supprimez une photo de la rubrique <font color='red'><b> <? echo $catttt['Titre']; ?></b></font><br><br> <SELECT name="tofo"> <? while ($donnees2 = mysql_fetch_array($reponse2)) { ?> <OPTION value="<? echo $donnees2['x'] ?>"><? echo $donnees2['x']; echo " - "; echo $donnees2['Titre'];?></OPTION> <? } ?> </SELECT><br><br><input type="submit" value="Supprimer"><? } ?></form></p> merci Modifié 14 Janvier 2006 par lutin
MarvinLeRouge Posté 13 Janvier 2006 Posté 13 Janvier 2006 Sur ton code, on constate que tu n'affiches le menu des catégories que SI aucune catégorie n'a été sélectionnée. Donc, le plus simple que tu aies à faire est : a) afficher cette liste dans tous les cas si une catégorie a été sélectionnée (variable dans $_GET), sélectionner celle-ci dans la liste précédemment créée. Comprends-tu mieux mon optique à présent ?
lutin Posté 13 Janvier 2006 Auteur Posté 13 Janvier 2006 Oui mais cela l'ouvre toujours dans une nouvelle fenetre. Or je voudrais que l'action se passe dans la fenetre originale, je pense plutot que le probleme est dans le onchange de ma premiere liste déroulante mais je ne sais pas quoi faire. Je suis un peu perdu en vérité...
MarvinLeRouge Posté 13 Janvier 2006 Posté 13 Janvier 2006 Je crois que tu t'emmêles un peules pinceaux dans les notions de client et de serveur. Ton php s'exécute sur le serveur, et génère de l'HTML pour l'envoyer à l'internaute. Ton javascript se passe côté client, donc sur l'ordinateur de l'internaute, une fois la page chargée. Donc, si tu veux que ta page ne se recharge pas, il est nécessaire de charger du premier coup toutes les catégories ET les sous-catégories, et de gérer entièrement le rafraîchissement de la liste de sous-catégories en javascript (enayant par exemple stocké au préalable toutes les sous-catégories dans des tableaux javascript. Sinon, tu peux tout à fait recharger la page, il n'y a rien de mal à ça, d'autant que dans ton cas, ça ne lèsera pas l'internaute puisque c'est une page très légère.
lutin Posté 13 Janvier 2006 Auteur Posté 13 Janvier 2006 Merci marvin de ta patience, mais il reste un truc que je calle pas. Dans mon premier select j'ai : onchange="categ(value)" Or cela ouvre une nouvelle page avec le open en javascript. Comment faire précisement pour que quand je selectionne une categorie dans la premiere liste déroulante, il apparaisse une deuxieme liste en dessous sur la meme page qui contient les photos relatives a cette categorie. merci
MarvinLeRouge Posté 14 Janvier 2006 Posté 14 Janvier 2006 Je te dis ça demain quand je serai mieux réveillé, promis. D'ici là, quelques conseils : 1) mets de l'ordre dans ton code : là tu mélanges le javascript, le php et le html, c'est illisible (y compris par toi dans une semaine) 2) fais tes opérations dans l'ordre : 1) tu effaces s'il faut effacer 2) tu récupères les infos 3) tu les adaptes au contexte
MarvinLeRouge Posté 14 Janvier 2006 Posté 14 Janvier 2006 Comme promis. Ce n'est probablement pas parfait : je l'ai fait un peu à l'arrache. Mais ça t'aidera surement à mieux comprendre ce queje voulais dire <?php define (DB_SERVER, "xxxxxxxx"); define (DB_USER, "yyyyyyyyy"); define (DB_PASS, "zzzzzzzzz"); define (DB_DBNAME, "ttttttt"); $connect = mysql_connect (DB_SERVER, DB_USER, DB_PASS); $connect_bd = mysql_select_db (DB_DBNAME); $str_message = ""; $str_cats = ""; $str_photos = ""; $str_form = ""; extract ($_POST); // 1 Effacement if (($real_submit == 1) && (isset ($tofo))) { $sql = "DELETE FROM photos WHERE x = $tofo"; mysql_query ($sql); if (mysql_affected_rows () > 0) { $str_message = "<p>Photo effacée</p>"; } else { $str_message = "<p>Aucune photo effacée</p>"; } } // 2 Récupération des catégories $str_cats = ""; $sql = "SELECT Num, Titre FROM categs ORDER BY Titre"; $query = mysql_query ($sql); while ($ligne = mysql_fetch_assoc ($query)) { extract ($ligne); $str_cats.= "<option value=\"$Num\">$Titre</option>"; } $str_cats = " <select name=\"cat\"> $str_cats </select> "; // 2 Tu sélectionnes la catégorie courante si besoin est $str_cats = str_replace ("<option value=\"$cat\">", "<option value=\"$cat\" selected=\"selected\">", $str_cats); // 3 S'il y a lieu, tu récupères les photos de la catégorie $str_photos = ""; if (isset ($cat)) { $sql = "SELECT * FROM photos WHERE Categorie = $cat"; $query = mysql_query ($sql); while ($ligne = mysql_fetch_assoc ($query)) { extract ($ligne); $str_photos.= "<option value=\"$x\">$x - $Titre</option>"; } $str_photos = " <select name=\"tofo\"> $str_photos </select> <input type=\"hidden\" name=\"real_submit\" id=\"real_submit\" value=\"1\" /> <input type=\"submit\" value=\"Supprimer\" /> "; } $str_form = " <form action=\"" . $_SERVER ["PHP_SELF"] . "\" method=\"post\"> $str_message $str_cats $str_photos </form> ";?><html><head><script type="text/javascript">window.onload = function (){ var form = document.getElementsByTagName ("form") [0]; var selectCat = document.getElementsByTagName ("select") [0]; selectCat.onchange = function () { var real_submit = document.getElementById ("real_submit"); if (real_submit) { real_submit.value = 0; } form.submit (); }}</script></head><body><?php echo ($str_form);?></body></html>
lutin Posté 14 Janvier 2006 Auteur Posté 14 Janvier 2006 (modifié) Merci enormement marvin, J'aurais été incapable de trouver la partie en javascript tout seul, pour moi c'est presque du chinois, sinon j'ai compris tout le php. Encore merci tu es un chef , ca fait plaisir de se faire aider par des pros Modifié 14 Janvier 2006 par lutin
lutin Posté 14 Janvier 2006 Auteur Posté 14 Janvier 2006 MArvin j'ai une derniere question Je souhaite egalement pouvoir modifier un champ de la catégorie photo quand la personne a selectionner la photo qu'elle veut modifier. Je dois donc créer une nouvelle page quand la personne a choisis sa photo, ou il y aurait un formulaire avec des champ modifiables et un bouton envoyer qui ferait un update sur la base de données. J'aurais voulu utiliser ton systeme pour selectionner la photo correspondante, ca ok, mais je n'arrive pas avec ton systeme a créer un lien quand on clique sur l'equivalent du bouton supprimer pour que cela envoie l'information $tofo dans l'url et que je puisse la recuperer sur la page du formulaire Comment faire cela simplement avec ton modele ? merci
MarvinLeRouge Posté 15 Janvier 2006 Posté 15 Janvier 2006 N'a pas compris la question (faut dire qu'il est tard quand même)
lutin Posté 15 Janvier 2006 Auteur Posté 15 Janvier 2006 Je vais essayé d'etre plus clair. Grace a toi, j'ai pu faire un menu de suppression des images de mon site suivant une categorie choisie. Je voudrais, en utilisant le meme systeme des liste deroulantes, modifier et non supprimer, les champs d'une photo après l'avoir choisie. Donc tout serait exactement pareil, sauf qu'a la place du bouton supprimer ce serait un bouton modifier, et celui ci amenerait sur une nouvelle page ou il y aurait un formulaire avec les champs remplis avec les données de la base de données et un bouton enregistrer les changements si l'utilisateur change les données contenues dans les champs. Le passage que je n'arrive pas a faire est d'ouvrir la nouvelle fenetre en transmettant les bonne informations avec ton modele. J'espere avoir été clair ce coup ci
MarvinLeRouge Posté 15 Janvier 2006 Posté 15 Janvier 2006 Même principe : si l'id de la photo est passé en paramètre, tu récupères les infos concernant la photo et tu les affiches pour modif. Sinon, tu affiches juste les menusdéroulants, comme pour celui-là. Et si tu voures dans une nouvelle fenètre, le seul élément à passer est l'id de la photo.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant