Page 1 sur 2

Fonction UPDATE et DELETE

Posté : 10 févr. 2009, 11:48
par Romuald632
Bonjour à tous !
Je voudrais utiliser les fonctions UPDATE et DELETE sur mon site plutôt que d'aller dans MySQL à chaque fois que je veux modifier un élément.
J'ai commencé par créer une page php sur laquelle je reprends tous les éléments qu'éventuellement je veux modifier.
Mais aprés je ne sais pas comment créer un champs modifiable...
Merci de votre aide

Voici mon code
<?php 
 
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());

mysql_select_db('vol',$db)  or die('Erreur de selection '.mysql_error());

$webcam = mysql_query("SELECT DISTINCT id_continent,id_sous_continent,id_pays,id_critere,ville,url,commentaire FROM webcam") or die(mysql_error());

// on affiche le résultat pour le visiteur 
	while ($affichage = mysql_fetch_assoc($webcam) )     
{    
    	echo 'Continent : '.$affichage['id_continent'].'';
		echo "<br />";
		echo 'Sous-continent : '.$affichage['id_sous_continent'].'';
		echo "<br />";
		echo 'Pays : '.$affichage['id_pays'].'';
		echo "<br />";
		echo 'Critère : '.$affichage['id_critere'].'';
		echo "<br />";
		echo 'Ville : '.$affichage['ville'].'';
		echo "<br />"; 
		echo '<img src="'.$affichage['url'].'" width="190" height="143">';
		echo "<br />";
		echo 'Commentaire : '.$affichage['commentaire'].'';
		echo "<br />";
		echo "<br />";
}
?>

Posté : 10 févr. 2009, 13:31
par Stef
Hello,

tu peux passer tes données dans un formulaire d'abord, puis ensuite tu les traite...
<?php
echo '<input name="id_continent" type="text" value="'.$affichage['id_continent'].'" />';
?>
Je ne sais pas si c'est la meilleur solution ni si c'est ce que tu veux faire...

Posté : 11 févr. 2009, 12:08
par Romuald632
Bonjour,
J'ai testé ta solution, et ça semble correspondre à ce que je veux faire !
Maintenant il faut que je rajoute des boutons "Update" ou "Delete"
Sais-tu comment-faire ?
Merci encore

Posté : 11 févr. 2009, 12:21
par Stef
hop,

update:
 mysql_query('
        UPDATE ta_table
        SET  ton_champ1="tes_nouvelles_données1", ton_champ2="tes_nouvelles_données2" ') or die (mysql_error());
il faudra peut-être en fonction de ton besoin ajouter une clause WHERE à ta requête update pour spécifier ou updater...


delete:
mysql_query('DELETE FROM ta_table WHERE ton_champX = "X" ') or die(mysql_error());
Plus d'infos:

http://sqlpro.developpez.com/cours/sqlaz/dml/

-----------------------------------------------
Maintenant il faut que je rajoute des boutons "Update" ou "Delete"
Sais-tu comment-faire ?
Merci encore
Il faut utiliser un bouton "submit" pour envoyer les données de ton formulaire à la page de traitement qui contient les requêtes update et delete!

http://cyberzoide.developpez.com/html/form.php3

Posté : 11 févr. 2009, 12:32
par Romuald632
J'ai rajouté un bouton, style formulaire, qui renvoie sur une nouvelle page, update.php.
Page qui récupère les données enregistrées sur ma page précédente.
Ta solution, le mysql_query tu le places où ?

Posté : 11 févr. 2009, 12:45
par Stef
Montre moi le code de tes 2 documents, celui qui contient le formulaire et l'autre, stp ;)

Posté : 11 févr. 2009, 12:52
par Romuald632
Page de modification
<form method="POST" action="update_webcam.php" target="_self">
<?php 
 
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());  

mysql_select_db('vol',$db)  or die('Erreur de selection '.mysql_error());

$webcam = mysql_query("SELECT DISTINCT id_continent,id_sous_continent,id_pays,id_critere,ville,url,commentaire FROM webcam LIMIT 0,5") or die(mysql_error());

// on affiche le résultat pour le visiteur 
	while ($affichage = mysql_fetch_assoc($webcam) )     
{    
    	echo 'Continent : <input name="id_continent" type="text" value="'.$affichage['id_continent'].'" />';
		echo "<br />";
		echo 'Sous-continent : <input name="id_sous_continent" type="text" value="'.$affichage['id_sous_continent'].'" />';
		echo "<br />";
		echo 'Pays : <input name="id_pays" type="text" value="'.$affichage['id_pays'].'" />';
		echo "<br />";
		echo 'Critère : <input name="id_critere" type="text" value="'.$affichage['id_critere'].'" />';
		echo "<br />";
		echo 'Ville : <input name="ville" type="text" value="'.$affichage['ville'].'" />';
		echo "<br />"; 
		echo '<img src="'.$affichage['url'].'" width="190" height="143">';
		echo "<br />"; 
		echo 'Ville : <input name="url" type="text" value="'.$affichage['url'].'" />';
		echo "<br />";
		echo 'Commentaire : <input name="commentaire" type="text" value="'.$affichage['commentaire'].'" />';
		echo "<br />";
		echo '<input type="submit" id="submit" name="submit" value="Mettre à jour"/>';
		echo "<br />";
		echo "<br />";
}
?></form>
Page de recup des données
<?php 
// On commence par récupérer les champs 
if(isset($_POST['continent']))      $continent=$_POST['continent'];
else      $continent="";

if(isset($_POST['pays']))      $pays=$_POST['pays'];
else      $pays="";

if(isset($_POST['sous_continent']))      $sous_continent=$_POST['sous_continent'];
else      $sous_continent="";

if(isset($_POST['ville']))      $ville=$_POST['ville'];
else      $ville="";

if(isset($_POST['commentaire']))      $commentaire=$_POST['commentaire'];
else      $commentaire="";

if(isset($_POST['critere']))      $critere=$_POST['critere'];
else      $critere="";

if(isset($_POST['url']))      $url=$_POST['url'];
else      $url="";

// Aucun champ n'est vide, on peut enregistrer dans la table 
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());  

mysql_select_db('vol',$db)  or die('Erreur de selection '.mysql_error()); 
     
// on écrit la requête sql 
$sql = "UPDATE INTO webcam(id,id_continent,id_sous_continent,id_pays,url,ville,commentaire,id_critere) VALUES('".mysql_real_escape_string('')."','".mysql_real_escape_string($continent)."','".mysql_real_escape_string($sous_continent)."','".mysql_real_escape_string($pays)."','".mysql_real_escape_string($url)."','".mysql_real_escape_string($ville)."','".mysql_real_escape_string($commentaire)."','".mysql_real_escape_string($critere)."')";
     
// on insère les informations du formulaire dans la table 
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

    // on affiche le résultat pour le visiteur 
	echo "<br />";
	echo '<li class="download">Vos webcams ont été mise à jour !</li>';
	echo "<br />"; 

    mysql_close();  // on ferme la connexion 
?>

Posté : 11 févr. 2009, 12:54
par Stef
Tu l'as testé?

Posté : 11 févr. 2009, 13:02
par Romuald632
Oui,
j'ai un message d'erreur
Erreur SQL !UPDATE INTO webcam(id,id_continent,id_sous_continent,id_pays,url,ville,commentaire,id_critere) VALUES('','','','','http://www.mairie-dieppe.fr/webcam/webcam_loadImage.php?prefCam=port','Dieppe','Le Port','')
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTO webcam(id,id_continent,id_sous_continent,id_pays,url,ville,commentaire,id_c' at line 1

Posté : 11 févr. 2009, 13:21
par Stef
Hum, déjà je suppose que tu peux virer id de ta requête d'update, ça ne sert rien puisque tu ne vas pas mettre ce champ à jour, il reste le même...

ensuite laisse moi regarder ton code en détail, pis je reviens te dire si j'ai trouver quelque chose!

Edit

au lieu de faire
// on écrit la requête sql 
$sql = "UPDATE INTO webcam(id,id_continent,id_sous_continent,id_pays,url,ville,commentaire,id_critere) VALUES('".mysql_real_escape_string('')."','".mysql_real_escape_string($continent)."','".mysql_real_escape_string($sous_continent)."','".mysql_real_escape_string($pays)."','".mysql_real_escape_string($url)."','".mysql_real_escape_string($ville)."','".mysql_real_escape_string($commentaire)."','".mysql_real_escape_string($critere)."')";
 
tu devrais plutôt essayer
mysql_query('
        UPDATE webcam
        SET  id_continent="'.$continent.'", id_sous_continent="'.$sous_continent.'", etc WHERE id="X?" ') or die (mysql_error());
le mysql_real_escape_string tu n'en as pas besoin si tu l'as appliqué lors de l'enregistrement initial dans ta table, enfin je pense... en tous cas je ne sais pas si c'est bien judicieux de le placer dans la requête, peut-être vaut-il mieux le faire avant...??
par ailleurs et surtout, il faut indiquer dans ta requête quelle ligne de ta table doit être updatée, là sql ne le sait pas, à moins que tu ais une seule et unique ligne... voilà pourquoi j'ai rajouté la clause WHERE; là il faut que lui indique l'id de la ligne à modifier.

Autre chose, as-tu vérifié que les variables envoyées par le formulaire contiennent bien ce que tu veux?

Posté : 11 févr. 2009, 17:11
par Romuald632
Pour répondre à ta question, a priori oui mon formulaire contient les infos souhaitées.
Par contre je comprends pas le WHERE ou en tout cas j'ai pas du faire ce qu'il fallait parce que j'ai un message d'erreur sur cette partie du code
$sql=('UPDATE webcam SET id_continent="'.$continent.'", id_sous_continent="'.$sous_continent.'", id_pays="'.$pays.'", url="'.$url.'", ville="'.$ville.'", commentaire="'.$commentaire.'", id_critere="'.$critere.'", WHERE id="X?" ') or die (mysql_error());

Posté : 11 févr. 2009, 17:20
par Stef
Ouep, alors quand tu génères ton formulaire crée un input type hidden qui contiendra l'id de la ligne à updaté:
<input type="hidden" name="id_reference" value="'.$affichage['id'].'" />
Pense aussi a ajouté la sélection du champ id donc, dans ta requête:
SELECT DISTINCT id, id_continent....
puis lors du traitement d'update:
WHERE id="'.$_POST['id_reference'].'"
Et là à mon avis t'es bon, sql saura où modifier!

Posté : 11 févr. 2009, 17:42
par Romuald632
On doit pas être loin, mais...

Si je repète
Page de modification:
<form method="POST" action="update_webcam.php" target="_self">
<?php 
 
//$db = mysql_connect('localhost', 'romuald', 'coldplay')  or die('Erreur de connexion '.mysql_error());
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());  

//mysql_select_db('voyagez_vol',$db)  or die('Erreur de selection '.mysql_error());
mysql_select_db('vol',$db)  or die('Erreur de selection '.mysql_error());

$webcam = mysql_query("SELECT DISTINCT id,id_continent,id_sous_continent,id_pays,id_critere,ville,url,commentaire FROM webcam") or die(mysql_error());

// on affiche le résultat pour le visiteur 
	while ($affichage = mysql_fetch_assoc($webcam) )     
{    
    	echo 'Webcam : <input type="hidden" name="id_reference" value="'.$affichage['id'].'" />';
		echo "<br />";
		echo 'Continent : <input name="id_continent" type="text" value="'.$affichage['id_continent'].'" />';
		echo "<br />";
		echo 'Sous-continent : <input name="id_sous_continent" type="text" value="'.$affichage['id_sous_continent'].'" />';
		echo "<br />";
		echo 'Pays : <input name="id_pays" type="text" value="'.$affichage['id_pays'].'" />';
		echo "<br />";
		echo 'Critère : <input name="id_critere" type="text" value="'.$affichage['id_critere'].'" />';
		echo "<br />";
		echo 'Ville : <input name="ville" type="text" value="'.$affichage['ville'].'" />';
		echo "<br />"; 
		echo '<img src="'.$affichage['url'].'" width="190" height="143">';
		echo "<br />"; 
		echo 'URL : <input name="url" type="text" value="'.$affichage['url'].'" />';
		echo "<br />";
		echo 'Commentaire : <input name="commentaire" type="text" value="'.$affichage['commentaire'].'" />';
		echo "<br />";
		echo '<input type="submit" id="submit" name="submit" value="Mettre à jour"/>';
		echo "<br />";
		echo "<br />";
}
?></form>
Page de récupération des données :
<?php 
// On commence par récupérer les champs

if(isset($_POST['continent']))      $continent=$_POST['continent'];
else      $continent="";

if(isset($_POST['sous_continent']))      $sous_continent=$_POST['sous_continent'];
else      $sous_continent="";

if(isset($_POST['pays']))      $pays=$_POST['pays'];
else      $pays="";

if(isset($_POST['critere']))      $critere=$_POST['critere'];
else      $critere="";

if(isset($_POST['ville']))      $ville=$_POST['ville'];
else      $ville="";

if(isset($_POST['url']))      $url=$_POST['url'];
else      $url="";

if(isset($_POST['commentaire']))      $commentaire=$_POST['commentaire'];
else      $commentaire="";

// Aucun champ n'est vide, on peut enregistrer dans la table 
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());  

mysql_select_db('vol',$db)  or die('Erreur de selection '.mysql_error()); 
     
// on écrit la requête sql  
$sql=('UPDATE webcam SET id_continent="'.$continent.'", id_sous_continent="'.$sous_continent.'", id_pays="'.$pays.'", url="'.$url.'", ville="'.$ville.'", commentaire="'.$commentaire.'", id_critere="'.$critere.'", WHERE id="'.$_POST['id_reference'].'" ') or die (mysql_error());
     
// on insère les informations du formulaire dans la table 
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

// on affiche le résultat pour le visiteur 
	echo "<br />";
	echo '<li class="download">Vos webcams ont été mise à jour !</li>';
	echo "<br />"; 

    mysql_close();  // on ferme la connexion 
?>
Voilà mon message d'erreur :
Erreur SQL !UPDATE webcam SET id_continent="", id_sous_continent="", id_pays="", url="http://www.mairie-dieppe.fr/webcam/webcam_loadImage.php?prefCam=port", ville="Dieppe", commentaire="Le Port", id_critere="", WHERE id="5" 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id="5"' at line 1

Posté : 11 févr. 2009, 17:51
par Stef
Arf, ben là je vois pas... en effet on doit pas être trop loin, mais je ne comprends pas ce qui coince!

j'espère qu'un autre membre de php france pourra te venir en aide paske là je suis bloqué... sorry :?

Edit

Essai d'enlever la virgule sur le dernier champ à modifier, juste avant le WHERE, ça doit être ça qui bloque le bousin...

Posté : 11 févr. 2009, 18:03
par Romuald632
Effectivement en enlevant la virgule ça modifie bien la BDD et juste le ID, sauf les champs où je fais apel à des ID, tels que id_continent