[PHP/SQL] Supprimer lignes d'un tableau

Résolu/Fermé
Harry Covert - 2 mars 2010 à 12:15
 Harry Covert - 2 mars 2010 à 16:18
Bonjour,

J'ai un petit souci avec un tableau dont je voudrais pouvoir supprimer/éditer les lignes.

Le tableau est un tableau html qui est rempli par des éléments de la bdd.

J'ai rajouter une colonne avec à chaque ligne un lien supprimer qui récupére l'id de la ligne et l'envoi à une page supp.php.

l'id est envoyé en Get vers une page supp.php qui doit traité la suppression.

Cependant j'ai toujours des erreurs, et je débute en php donc si vous pouviez m'aider ça serait cool.

je me suis inspiré de plusieurs post que j'ai vu ici mais j'ai pas réglé mon problème.

voila le code de ma page affiche_contact.php :

<?php

$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
mysql_select_db('ma_base',$db)  or die('Erreur de selection '.mysql_error()); 
 ?>


<title>Mon Site-Gestion des inscrits</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Language" content="fr" />
</head>
<body>

	<p>	Ci dessous les contacts reçus<br /></p>
	<table border="1">
		<tr>
			<th width="10%">Nom</th>
			<th width="10%">Prenom</th>
			<th width="10%">Adresse</th>
			<th width="10%">E-mail</th>
			<th width="10%">Telephone</th>
			<th width="10%">Telephone Portable</th>
			<th width="20%">Message</th>
			<th width="10%">Date</th>
			<th width="10%">Action</th>
		</tr>
		<?php

// lancement de la requete avec transformation du format de la date
$sql = " SELECT id_contact, nom, prenom, adresse, email, tel,tel2, questions, DATE_FORMAT(date, '%d-%m-%Y') as datefr  FROM contact_form ";  



// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)  
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  

// on recupere le resultat sous forme d'un tableau  
$data = mysql_fetch_array($req);  

while($data = mysql_fetch_assoc($req)) 
    { 
    // on affiche les informations des contacts
    echo '<tr><td>'.$data['nom'].'</td><td>'.$data['prenom'].'</td><td>  '.$data['adresse'].''; 
    echo ' </td><td>'.$data['email'].' ';  echo '</td><td> '.$data['tel'].' </td>';
	echo '<td>'.$data['tel2'].'</td>'; 
	echo '<td>'.$data['questions'].'</td>'; echo '<td>'.$data['datefr'].'</td>';
	echo '<td> <a href="supp.php?id_contact='.$data['id_contact'].'"> Supprimer</a> </td> </tr>';
    } 
	
mysql_free_result ($req);  

?>
	</table>
	</div>
	</body>
</html>


et la page de traitement qui pose problème (message d'erreur : Invalid argument supplied for foreach())
page supp.php
<html> 
<body> 
<?php 

$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
mysql_select_db('ma_base',$db)  or die('Erreur de selection '.mysql_error()); 

$id_contact=$_GET['id_contact'];

foreach($id_contact as $valeur)
{ 
$sql=" DELETE FROM contact_form WHERE id_contact='$valeur' "  ; 
$req= mysql_query($sql); 
} 

?>
</body>
</html>


J'ai testé et ma page supp.php récupére bien le bon id_contact, mais c'est au niveau de la boucle que ça foire !
Si vous pouviez m'aider ça me dépannerai bien !
Merci d'avance

3 réponses

Harry Covert
2 mars 2010 à 16:18
Solution trouvée :

il fallait supprimer dans update.php :
$data = mysql_fetch_array($req);


Ciao
3
Jean-François Pillou
Messages postés
18668
Date d'inscription
lundi 15 février 1999
Statut
Webmaster
Dernière intervention
12 janvier 2022
63 273
2 mars 2010 à 12:19
Etant donné que $id_contact=$_GET['id_contact'], es-tu sûr que c'est un tableau que tu passes en GET ?

D'une manière générale, avant un foreach il faut faire un test du type :

if(count($id_contact){
foreach($id_contact as $valeur)
{ 
$sql=" DELETE FROM contact_form WHERE id_contact='$valeur' "  ; 
$req= mysql_query($sql); 
} 
}
2
Haary Covert
2 mars 2010 à 14:06
Mon get en effet ne renvoyait pas un tableau mais l'id de l'élément .

J'ai réussi a faire ce que je voulais en utilisant une manière plus simple :
<?php 

$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
mysql_select_db('ma_base',$db)  or die('Erreur de selection '.mysql_error()); 

$id_contact=$_GET['id_contact'];
$sql=" DELETE FROM contact_form WHERE id_contact='$id_contact' "  ; 
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  

include('/affiche_contact.php');
?>


Merci quand même ;)
0
Harry Covert
2 mars 2010 à 14:58
Re,

Tant qu'à faire je vais exposer mon 2nd problème (quand y'en a plus y'en a encore)

Cette fois ci ça concerne les update.

Je voudrais comme précédement, afficher un lien modifier.
ce lien renverrait vers une page où l'on afficherait dans des <input> les élements de la ligne choisi.

On aurait un bouton enregistrer qui enregistrerait les modifications apporté.

Je vois ça en 3 étapes :
1)mon fichier affiche_contact.php (où l'on a tous les enregistrements de la table)
2)mon fichier update.php(où l'on a uniquement l'enregistrement séelctionné et où l'on modifie les informations)
3)un fichier maj.php(où l'on traite la mise à jour)
On peut surment éviter le fichier maj.php en le regroupant dans le fichier update.php mais sa à l'avantage d'être clair.


Cependant j'ai un gros souci à l'étape 2 : j'arrive par exemple à afficher TOUS les éléments de ma table dans mes inputs, mais jamais UN SEUL éléments.
voilà le code de update.php :
<?php

$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
mysql_select_db('ma_base',$db)  or die('Erreur de selection '.mysql_error()); 
     
	

?>
<body>
		<table border="1">
		<tr>
			<th width="10%">Nom</th>
			<th width="10%">Prenom</th>
			<th width="10%">Adresse</th>
			<th width="10%">E-mail</th>
			<th width="10%">Telephone</th>
			<th width="10%">Telephone Portable</th>
			
		</tr>
		<?php
		
$id_contact=$_GET['id_contact'];
echo $id_contact ;//pour vériier qu'on récupére le bon id_contact. OK

// lancement de la requete avec transformation du format de la date. C'est ICI que ça buggue !!
//ci dessous on ne me renvoit aucun résultat, mais aucune erreur
$sql = " SELECT * FROM contact_form WHERE id_contact = '$id_contact' ";  

//ci dessous on me renvoit bien mes informations dans mes inputs
$sql = " SELECT * FROM contact_form ";




// on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)  
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  

// on recupere le resultat sous forme d'un tableau  
$data = mysql_fetch_array($req);  

while($data = mysql_fetch_array($req)) 
    { 
    // on affiche les informations des contacts
    echo '<tr><td><input name="nom" type="text" id="nom" value='.$data['nom'].'></td>';
	echo '<td><input name="prenom" type="text" id="prenom" value='.$data['prenom'].'></td>';
	echo '<td><input name="adresse" type="text" id="adresse" value='.$data['adresse'].'></td>'; 
	echo '<td><input name="email" type="text" id="email" value='.$data['email'].'></td>'; 
	echo '<td><input name="tel" type="text" id="tel" value='.$data['tel'].'></td>'; 
	echo '<td><input name="tel2" type="text" maxlength="10" size="10" id="tel2" value='.$data['tel2'].'></td></tr>'; 
	
	
    } 
	
mysql_free_result ($req);  

?>	</table>
	
	</body>

</html>
1