Fonction UPDATE et DELETE

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonction UPDATE et DELETE

par Romuald632 » 12 févr. 2009, 11:39

Quand je test avec MySQL j'ai ça :
#1064 - 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 '$sql = "(UPDATE webcam SET id_continent='".$continent."', id_sous_continent='".$' at line 1

par @rthur » 12 févr. 2009, 11:32

Bonjour,

Fait un print de ta requête SQL avant de l'exécuter et teste là dans phpMyAdmin

par Romuald632 » 12 févr. 2009, 11:11

Bon j'ai essayé ça et ça marche tjs pas !!
$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']."')";

par Stef » 11 févr. 2009, 18:07

bon on progresse! :D

maintenant faut bien relire ton code pour voir où il peut y avoir des anomalies, enfin c'qui fait que ça n'accomplie pas exactement ce que tu veux...

on va y arriver! :wink:

par Romuald632 » 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

par Stef » 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...

par Romuald632 » 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

par Stef » 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!

par Romuald632 » 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());

par Stef » 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?

par Romuald632 » 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

par Stef » 11 févr. 2009, 12:54

Tu l'as testé?

par Romuald632 » 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 
?>

par Stef » 11 févr. 2009, 12:45

Montre moi le code de tes 2 documents, celui qui contient le formulaire et l'autre, stp ;)

par Romuald632 » 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ù ?