Fonction UPDATE et DELETE

Eléphant du PHP | 287 Messages

10 févr. 2009, 11:48

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 />";
}
?>

Eléphant du PHP | 447 Messages

10 févr. 2009, 13:31

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...
Probably (only a) Human Problem?

Eléphant du PHP | 287 Messages

11 févr. 2009, 12:08

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

Eléphant du PHP | 447 Messages

11 févr. 2009, 12:21

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
Probably (only a) Human Problem?

Eléphant du PHP | 287 Messages

11 févr. 2009, 12:32

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ù ?

Eléphant du PHP | 447 Messages

11 févr. 2009, 12:45

Montre moi le code de tes 2 documents, celui qui contient le formulaire et l'autre, stp ;)
Probably (only a) Human Problem?

Eléphant du PHP | 287 Messages

11 févr. 2009, 12:52

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 
?>

Eléphant du PHP | 447 Messages

11 févr. 2009, 12:54

Tu l'as testé?
Probably (only a) Human Problem?

Eléphant du PHP | 287 Messages

11 févr. 2009, 13:02

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

Eléphant du PHP | 447 Messages

11 févr. 2009, 13:21

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?
Probably (only a) Human Problem?

Eléphant du PHP | 287 Messages

11 févr. 2009, 17:11

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());

Eléphant du PHP | 447 Messages

11 févr. 2009, 17:20

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!
Probably (only a) Human Problem?

Eléphant du PHP | 287 Messages

11 févr. 2009, 17:42

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

Eléphant du PHP | 447 Messages

11 févr. 2009, 17:51

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...
Probably (only a) Human Problem?

Eléphant du PHP | 287 Messages

11 févr. 2009, 18:03

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