récuperer les valeurs de l'id sélectionné et non du dernier id

Eléphant du PHP | 258 Messages

04 nov. 2008, 11:48

bonjour

depuis quelques heures, je n'ai pas trouvé pourquoi cela ne marchait pas comme je le voulais.
en fait, je génère un tableau dans lequel s'affichent les données récupérés de la base ainsi que les boutons submit qui sont liés par les id.
dès que je clique sur un bouton submit (au lieu d'un lien) qui va supprimer l'id et ses données, le message que j'ai crée m'annonce que l'id supprimé est le dernier id du tableau. Donc c'est pas bon.
Bien sur, j'ai vérifié sur phpmyadmin: même constat

voici le code source :
pour info, dans ce code source, j'ai utilisé la méthode switch
mes excuses pour ne pas afficher tout le code source
et merci à vous pour vos réponses
...
case'del_tuteur':
		connLocalhost();
		$sql	=	'select * from tuteur ';
		$req	=	mysql_query($sql)or die ('impossible1');
		$list 	=	mysql_num_rows($req);

 		echo '<form method="POST" action="gestion3.php" name="tuteur"><br>';
		echo 'Liste des tuteurs <br><a href="gestion3.php">(retour)</a><br><br>';
	if($list) 
		echo '<table style="text-align: left; width: 100%; height: 74px;" border="0" cellpadding="2" cellspacing="2"><tbody>'."\n";
	{
	    echo '<tr><td bgcolor="#669999"><u>Numero</u></td>';
        echo '<td bgcolor="#669999"><u>Nom</u></td>';
        echo '<td bgcolor="#669999"><u>Prénom</u></td>';
        echo '<td bgcolor="#669999"><u>Action</u></td>';
        echo '</tr>'."\n";
    while($row = mysql_fetch_array($req)) 
    {
        echo '<tr style="background-color: #BBAA99;">';
		$bgcolor =($i++&1)?'#DDFF00' : '#BBCC33';
		echo "<tr bgcolor='".$bgcolor."' style='color:black';>";
  		echo "<td>".$row['id_tuteur']."</td>";
  		echo "<td>".$row['nom']."</td>";
  		echo "<td align='right'>".$row['prenom']."</td>";
		echo '<td align="right"><input type="submit" name="sub_del_tuteur" value="'.$row['id_tuteur'].' "></td>';
		$id=$row['id_tuteur'];
		$nom=$row['nom'];
		$prenom	=	$row['prenom'];
		echo '
		<input type="hidden" name="recup_id_tuteur" value="'.$id.' ">
		<input type="hidden" name="recup_nom" value="'.$nom.' ">
		<input type="hidden" name="recup_prenom" value="'.$prenom.' ">
		';
    }
  		echo '</tr>';
    }
    	echo '</table>';
    	echo '</form>';

	break;
	case'mess_del_tuteur':
		connLocalhost();
		$id_tuteur	=	$_POST['recup_id_tuteur'];
		$nom		=	$_POST['recup_nom'];
		$prenom		=	$_POST['recup_prenom'];
		echo 'Le tuteur "'.$id_tuteur.'" "'.$nom.'" "'.$prenom.'" a bien été supprimé avec succès.<BR><a href="gestion3.php">Retour à l\'accueil</a>';
		supprimer($id_tuteur);
		
	break;

...
autre code source:
/ fonction supprimer un tuteur (suppression des données du tuteur)
function supprimer($id_tuteur)
{
	$supp			=	mysql_query("DELETE FROM tuteur WHERE id_tuteur = $id_tuteur"); 
	mysql_close(); 

}
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

ViPHP
ViPHP | 1136 Messages

04 nov. 2008, 12:38

Salut ,

tu dois définir ton input en tableau afin de récupérer toutes tes valeurs
<input type="hidden" name="recup_id_tuteur[]" value="'.$id.' "> 
Tu récupéres ainsi un tableau $_POST['recup_id_tuteur'] = array

Je te laisse donc adapter ton code ...

Eléphant du PHP | 258 Messages

04 nov. 2008, 16:09

oh je m'y perds

je ne comprend pas
pardonnez moi merci
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

ViPHP
ViPHP | 1136 Messages

04 nov. 2008, 16:22

Dans ta boucle while , pour chaque ligne recupéré de ta base , tu met les valeurs dans :
<input type="hidden" name="recup_id_tuteur" value="'.$id.' ">
<input type="hidden" name="recup_nom" value="'.$nom.' ">
<input type="hidden" name="recup_prenom" value="'.$prenom.' "> 
Or , ici , a chaque boucle , tu vas effacer les valeurs mises précédemment c'est comme ci tu faisais celà :
$i = 0;
$a = 0;
while ( $i <= 10 )
{
  $a = $i;
  $i++;
}

//affichage de $a 
echo $a;
Celà va te retourner 10 donc la derniere valeur que tu récupères .. ce qui est exactement ton cas pour tes id .

La solution , est donc de creer un tableau qui récupére toutes tes valeurs une par une , pour ce faire , il faut ajouter les crochets [] pour dire que c'est un tableau ...

tu dois donc faire comme ceci :
<input type="hidden" name="recup_id_tuteur[]" value="'.$id.' ">
<input type="hidden" name="recup_nom[]" value="'.$nom.' ">
<input type="hidden" name="recup_prenom[]" value="'.$prenom.' "> 
Tu vas donc récupérer 3 tableaux , et lorsque tu appels ta fonction
supprimer($id_tuteur); 
$id_tuteur est un tableau qui contiend les id que tu veux supprimer ...

Eléphant du PHP | 258 Messages

05 nov. 2008, 12:18

et il m'affiche comme resultat:

Le tuteur "Array" "Array" "Array" a bien été supprimé avec succès.
voici le code source:
                echo '<td align="right"><input type="submit" name="sub_del_tuteur" value="Supprimer"></td>';
		echo '
		<input type="hidden" name="recup_id_tuteur[]" value="'.$row['id_tuteur'].' ">
		<input type="hidden" name="recup_nom[]" value="'.$row['nom'].' ">
		<input type="hidden" name="recup_prenom[]" value="'.$row['prenom'].' ">
		';
		$id_tuteur    	=    $_POST['recup_id_tuteur'];
        $nom        	=    $_POST['recup_nom'];
        $prenom       	=    $_POST['recup_prenom']; 
		$_POST['recup_id_tuteur'] 	= array($id_tuteur);
		$_POST['recup_id_tuteur'][]	=	array($nom);
		$_POST['recup_id_tuteur'][]	=	array($prenom);
		

		echo 'Le tuteur "'.$id_tuteur.'" "'.$nom.'" "'.$prenom.'" a bien été supprimé avec succès.<BR><a href="gestion3.php">Retour à l\'accueil</a>';
		supprimer($id_tuteur);

Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

ViPHP
ViPHP | 1136 Messages

05 nov. 2008, 12:23

C'est normal qu'il affiche Array .. puisque c'est des tableaux ...

Pour coller à ton script tu devrais plutot faire ça :
(array)$id_tuteur        =    $_POST['recup_id_tuteur'];
(array)$nom            =    $_POST['recup_nom'];
(array)$prenom           =    $_POST['recup_prenom']; 
(int)position   =   0;     
foreach( $id_tuteur AS $id )
{
      echo 'Le tuteur "'.$id.'" "'.$nom[$position].'" "'.$prenom[$position].'" a bien été supprimé avec succès.<BR><a href="gestion3.php">Retour à l\'accueil</a>';

    supprimer($id);

   $position++;
}

Eléphant du PHP | 258 Messages

05 nov. 2008, 12:46

ah ca va mieux
mais il y a un petit problème

il m'affiche tout alors que j'ai cliqué un seul bouton
et puis quand je clique sur un bouton 60, il me supprime seulement l'id 49 donc le premier id
Le tuteur "49 " "vert " "vert " a bien été supprimé avec succès.
Le tuteur "60 " "dede " "frty " a bien été supprimé avec succès.
Le tuteur "74 " "google" "larry" a bien été supprimé avec succès.
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

ViPHP
ViPHP | 1136 Messages

05 nov. 2008, 12:58

Effectivement , c'est normale , j'avais en tete que tu avais mis un checkbox à chaque ligne que tu voulais supprimer .. ca na va plus dutout dans ce cas là ...

Car peut importe le boutton supprimer que tu clique , il récupére toujours tous les id ...

Essayes dans ce cas , plutot comme ca :
echo '<from ... action . ect .. ';
echo '<td align="right"><input type="submit" name="sub_del_tuteur" value="'.$row['id_tuteur'].'"></td>';
        echo '
        <input type="hidden" name="recup_nom" value="'.$row['nom'].' ">
        <input type="hidden" name="recup_prenom" value="'.$row['prenom'].' ">
        ';
echo '</form>';
Et pour récupérer l'id à supprimer
$id_tuteur     =    $_POST['sub_del_tuteur'];
$nom            =    $_POST['recup_nom'];
$prenom       =    $_POST['recup_prenom']; 
       
echo 'Le tuteur "'.$id_tuteur.'" "'.$nom.'" "'.$prenom.'" a bien été supprimé avec succès.<BR><a href="gestion3.php">Retour à l\'accueil</a>';

supprimer($id_tuteur);
Désolé de te faire changer encore , mais j'étais persuadé que tu utilisés des checkbox pour faire des suppressions multiples

Eléphant du PHP | 258 Messages

05 nov. 2008, 15:09

ah?

ca revient au même problème au début du post
quand je clique un id parmi les id, le message annonce que le dernier id est supprimé

snifffff....
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

ViPHP
ViPHP | 1136 Messages

05 nov. 2008, 19:40

Humm je vois
echo '<td align="right"><input type="submit" name="sub_del_tuteur" value="'.$row['id_tuteur'].'"></td>';
        echo '
        <input type="hidden" name="recup_nom['.$row[id_tuteur].']" value="'.$row['nom'].' ">
        <input type="hidden" name="recup_prenom['.$row[id_tuteur].']" value="'.$row['prenom'].' ">
        '; 
Pour la suppression
$id_tuteur     =    $_POST['sub_del_tuteur'];
$nom            =    $_POST['recup_nom'][$id_tuteur];
$prenom       =    $_POST['recup_prenom'][$id_tuteur]; 
       
echo 'Le tuteur "'.$id_tuteur.'" "'.$nom.'" "'.$prenom.'" a bien été supprimé avec succès.<BR><a href="gestion3.php">Retour à l\'accueil</a>';

supprimer($id_tuteur);
ça devrai aller là .. non ?

Tu supprimes bien 1 enregistrement à la fois ?

Eléphant du PHP | 258 Messages

06 nov. 2008, 10:06

oui, ca marche enfin

mais je trouve un peu bizarre cette méthode de récupération
mais je vais pas encore me casser la tete

en tout cas, milles mercis à vous
vraiment sympa

je mets en resolu
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver