Page 1 sur 1

récupération d'ID sur plusieurs pages

Posté : 27 oct. 2007, 16:36
par wik
Bonjour,

J'ai un listing de disques...
Pour chaque disque, je souhtaite pouvoir modifier les titres existants et en ajouter.

mes tables :
Disk avec id_disk
Titres avec id_titres
Disk_titres avec id_disk et id_titres

J'ai donc créé une page (avec dans l'url, l'id du disk) pour visualiser/modifier la liste des morceaux d'un disque + un formulaire d'ajout (ci-dessous).
Mon problème est la récupération de l'ID du disque pour insérer un nouveau morceau et revenir à la page du listing des morceaux du disque.
J'arrive à voir l'ID du disk dans le formulaire, mais quand j'envoie la requête d'insertion, plus rien...

Voici mes codes, si quelqu'un peut m'éclairer... Merci d'avance

page du listing des titres pour un disque
<?php require ("include/connect.php");
	  		 
	 $disk_id = $_GET['disk_id'];
	
	
	if (isset($OK) && isset($_POST['artiste'])){
		// Préparation et exécution de la requête
		$requete1 = mysql_query ("INSERT INTO track (track_titre, track_mp3, artiste_id) VALUES ('$titre', '$mp3', '$_POST[artiste]')") or die('Erreur :'. mysql_error());

// récup de l'ID du track
$id_track = mysql_insert_id();

// dans la base disk_track
$requete2 = mysql_query ("INSERT INTO disk_track (disk_id, track_id) VALUES ('$disk_id', '$id_track')") or die('Erreur :'. mysql_error());

}
	 
	 $requete5 = mysql_query ("SELECT t.track_id, t.track_titre, t.track_mp3, a.artiste_id, ad1.artiste_prenom AS artiste_prenom1, ad1.artiste_nom AS artiste_nom1, a.artiste_txt, ad2.artiste_prenom AS artiste_prenom2, ad2.artiste_nom AS artiste_nom2 FROM disk d, track t LEFT JOIN artiste a ON (t.artiste_id = a.artiste_id) LEFT JOIN artiste_dico AS ad1 on (a.artiste1_id = ad1.dico_id) LEFT JOIN artiste_dico AS ad2 ON (a.artiste2_id = ad2.dico_id) LEFT JOIN disk_track dt ON (t.track_id = dt.track_id) WHERE d.disk_id = '".$disk_id."' and dt.disk_id = d.disk_id ORDER BY t.track_titre") or die('Erreur : ' . mysql_error());
		
		echo "<table width='750' border='0' cellspacing='2' cellpadding='0'>
  <tr> 
    <td bgcolor='#D1D1B2' width='220' class='txt10grasBleu' height='30'>TITRES</td>
    <td bgcolor='#D1D1B2' width='220' class='txt10grasBleu' height='30'>LIEN mp3</td>
    <td bgcolor='#D1D1B2' width='200' class='txt10grasBleu' height='30'>REMIXEUR</td>
	<td width='55' class='txt10grasBleu' height='30'>&nbsp;</td>
	<td width='55' class='txt10grasBleu' height='30'>&nbsp;</td>
  </tr>";
		
		while ($track = mysql_fetch_array($requete5)) {

		$track_id = $track[track_id];

echo "<tr> 
    <td width='220' class='menuTitreNG'>$track[track_titre]</a></td>
    <td width='220' class='menuTitreNG'>$track[track_mp3]</td>
    <td width='200' class='menuTitreNG'>$track[artiste_prenom1] $track[artiste_nom1] $track[artiste_txt] $track[artiste_prenom2] $track[artiste_nom2]</td>
	<td width='55' class='menuTitreNG' align='left'><a href='modif_track.php?id=".$track_id."'>modifier</a></td>
	<td width='55' class='menuTitreNG' align='right'>supprimer</a></td>
  </tr>
  <tr bgcolor='#D1D1B2'> 
    <td width='220' class='miniligne'>&nbsp;</td>
    <td width='220' class='miniligne'>&nbsp;</td>
    <td width='200' class='miniligne'>&nbsp;</td>
    <td width='55' class='miniligne'>&nbsp;</td>
    <td width='55' class='miniligne'>&nbsp;</td>
  </tr>";
  	}
echo '</table>
		<br><br><span class="txt11grasNoir">INSERER UN NOUVEAU TITRE</span><br><br>';
		include ("form_track.php");
		?>

détail du form_track.php :
<?php
	
	$disk_id = $_GET['disk_id'];
		
		 echo '<form action="modif_disk_tracks.php?disk_id="'.$disk_id.'" method="POST">
		 <input type="text" name="disk_id" value="'.$disk_id.'" size="50" class="infoDisc">
		 	<span class="txt10grasBleu">titre </span>
			  <input type="text" name="titre" size="50" class="infoDisc">
			  <br><br>
			  <span class="txt10grasBleu">mp3 </span>
			  <input type="text" name="mp3" size="40" class="infoDisc">
			  <br><br>';
			  
		$rqt = mysql_query ("SELECT a.artiste_id, ad1.artiste_prenom AS artiste_prenom1, ad1.artiste_nom AS artiste_nom1, a.artiste_txt, ad2.artiste_prenom AS artiste_prenom2, ad2.artiste_nom AS artiste_nom2 FROM artiste a left join artiste_dico AS ad1 on (a.artiste1_id = ad1.dico_id) left join artiste_dico AS ad2 on (a.artiste2_id = ad2.dico_id) ORDER BY ad1.artiste_nom") or die('Erreur :'. mysql_error());

	 echo'<span class="txt10grasBleu">remixeur </span>
		  <select name="artiste" class="infoDisc"><option value=0>artiste</option>';

	while ($artiste_track = mysql_fetch_array($rqt)){
	
	$art1 = $artiste_track[artiste_prenom1]. " " .$artiste_track[artiste_nom1];
	$art2 = $artiste_track[artiste_prenom2]. " " .$artiste_track[artiste_nom2];

if ($artiste_track[artiste_nom2] == "" ){
	$art = $art1;
	}
	else{
	$art = $art1 . " " . $artiste_track[artiste_txt] . " " . $art2;
	}

  echo '<option value="'.$artiste_track[artiste_id].'">'.$art .'</option>'; 
  }
echo '</select><br><br>
	  <input type="hidden" name="disk_id" value="'.$disk_id.'">
	  <input type="submit" value="OK" class="txt10grasBleu">
	</form>';

?>

Posté : 27 oct. 2007, 17:20
par Truc
Faudrait harmoniser le tout tu as 3 différent "disk_id" en GET et POST
<form action="modif_disk_tracks.php?disk_id="'.$disk_id.'" method="POST">
<input type="text" name="disk_id" value="'.$disk_id.'" size="50" class="infoDisc">
<input type="hidden" name="disk_id" value="'.$disk_id.'">

Posté : 27 oct. 2007, 17:36
par wik
je comprends pas tout... Voici mes "pourquoi du comment" qui ne sont peut être pas logique... Je suis complètement larguée !!
<form action="modif_disk_tracks.php?disk_id="'.$disk_id.'" method="POST">
j'ai mis ça pour faire en sorte que lorsque je valide le formulaire, il retourne sur la page de listing des titres, avec le bon ID du disque pour lequel il a été créé.
<input type="text" name="disk_id" value="'.$disk_id.'" size="50" class="infoDisc">
c'est juste un test pour vérifier que l'ID du disque existe bien dans le formulaire de création du morceau (je vais le supprimer)
<input type="hidden" name="disk_id" value="'.$disk_id.'">
ça c'est pour effectuer l'enregistrement dans ma table liée : disk_track

Posté : 27 oct. 2007, 19:19
par Truc
tu ne récupères que la variable GET
$disk_id = $_GET['disk_id'];
et non la POST (celle du formulaire)

"$OK" vient d'où ?

exécute ce bout de script pour vérifier le contenu de POST
<pre>
<?php var_dump($_POST); ?>
</pre>

Posté : 27 oct. 2007, 19:42
par wik
Merci pour ta réponse... Ca commence vaguement à fonctionner, mais je ne comprends toujours rien !!
"$OK" vient d'où ?
j'avais oublié de mettre une "valeur" dans le submit du formulaire.
je m'en suis rendue compte après l'envoi de mon mon précédent message. c'est réglé :
<input type="submit" name="new_track" value="OK" class="txt10grasBleu">
pour ce qui est de ton code, voici ce qu'il m'a sorti après une nouvelle tentative de création d'un titre :
Ca correspond bien à mes champs, sachant que j'ai renseigné uniquement le titre.
array(5) {
["disk_id"]=>
string(1) "5"
["titre"]=>
string(13) "A2 - brothers"
["mp3"]=>
string(0) ""
["artiste"]=>
string(1) "0"
["new_track"]=>
string(2) "OK"
}
Truc bizarre, l'insertion dans mes tables a fonctionnée, mais il n'a pas reconnu l'ID du disque (n°5 en l'occurrence).
J'ai donc mes titres dans ma table "titre", mais dans ma table liée "disk_titre", j'ai un 0 à la place de l'ID du disque.

???Toujours ce problème de conservation d'ID...

Posté : 27 oct. 2007, 19:56
par Truc
$_POST["disk_id"] est vide donc lors de la création du questionnaire il n'y a pas de $_GET['disk_id'] il manque donc ce paramètre quelque part.

regarde le code source (html) du formulaire généré

Posté : 27 oct. 2007, 20:24
par wik
J'ai trouvé la solution pour faire en sorte que l'ID du disk soit bien saisi dans la table liée... J'ai ajouté ce code à la fin du formulaire de saisie du titre :
$rqt1 = mysql_query ("SELECT d.disk_id FROM disk d left join disk_track dt on (d.disk_id = dt.disk_id) WHERE dt.disk_id ='".$disk_id."'") or die('Erreur :'. mysql_error());
	while ($track_disk_id = mysql_fetch_array($rqt1)){
	echo '<input type="hidden" name="disk_id" value="'.$track_disk_id[disk_id].'">';
	}
Pour ce qui est de ta remarque, j'ai bien constaté qu'il n'y avait toujours rien d'ailleurs après ma bidouille ci-dessus... T'as pas des tuyaux à me donner, je sais pas même où chercher vu que le GET est censé être la méthode miracle !!

Posté : 27 oct. 2007, 22:29
par Truc
inutile ce bout de code... une requête qui sélectionne "disk_id" en fonction de "disk_id" donc tu disposes déja de ce "disk_id" que tu veux récupérer.

le HTML généré (formulaire) donne quoi avant validation?

Je ne peux rien faire de plus à part te donner des indications, je ne peux pas tester ton code ni voir le html. :!:

Posté : 28 oct. 2007, 10:25
par Invité
Re-bonjour,
le HTML généré (formulaire) donne quoi avant validation?
j'ai bien le bon ID qui s'affiche lorsque le formulaire est vierge...

Voici les liens de mes pages :
- accès à la modif des titres via ce listing de titres :
http://pusherdistribution.free.fr/maj_disk_listing.php

perso je teste depuis le titre "Brothers on the Slide vol.2". Quand tu cliques sur "modifier titres" dans le tableau, ça mène vers les fameuses autres pages...

Je continue de tester de mon côté.
Merci !

Posté : 28 oct. 2007, 11:15
par Truc
il y a un guillemet de trop dans l'attribut action du formulaire

essaie en remplaçant au début du script
$disk_id = $_GET['disk_id'];
par
$disk_id = isset($_POST["disk_id"]) ? $_POST["disk_id"] :  $_GET['disk_id'];
et enlever "disk_id" de l'action du formulaire.
Le script récupérera la variable post si elle existe (formulaire validé) sinon la variable get.

Posté : 28 oct. 2007, 11:24
par Tracker
$disk_id = isset($_POST["disk_id"]) ? $_POST["disk_id"] :  $_GET['disk_id'];
Je pense même que tu dois pouvoir écrire:
$disk_id = $_REQUEST['disk_id'];

Tracker.

Posté : 28 oct. 2007, 11:44
par wik
UN ENORME MERCI, CA MARCHE !!!!!!!!!!

j'ai refait juste un dernier test avant de t'envoyer ce post, et il me semble que ça ne fonctionnait pas uniquement à cause de ce guillemet en trop... argh...