Aller au contenu

Liste liées


lutin

Sujets conseillés

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é par lutin
Lien vers le commentaire
Partager sur d’autres sites

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é par MarvinLeRouge
Lien vers le commentaire
Partager sur d’autres sites

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é par lutin
Lien vers le commentaire
Partager sur d’autres sites

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

B) 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 ?

Lien vers le commentaire
Partager sur d’autres sites

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é...

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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>

Lien vers le commentaire
Partager sur d’autres sites

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é par lutin
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...