Page 1 sur 1

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

Posté : 04 nov. 2008, 11:48
par Cypher_PHP
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(); 

}

Posté : 04 nov. 2008, 12:38
par stopher
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 ...

Posté : 04 nov. 2008, 16:09
par Cypher_PHP
oh je m'y perds

je ne comprend pas
pardonnez moi merci

Posté : 04 nov. 2008, 16:22
par stopher
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 ...

Posté : 05 nov. 2008, 12:18
par Cypher_PHP
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);


Posté : 05 nov. 2008, 12:23
par stopher
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++;
}

Posté : 05 nov. 2008, 12:46
par Cypher_PHP
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.

Posté : 05 nov. 2008, 12:58
par stopher
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

Posté : 05 nov. 2008, 15:09
par Cypher_PHP
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....

Posté : 05 nov. 2008, 19:40
par stopher
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 ?

Posté : 06 nov. 2008, 10:06
par Cypher_PHP
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