[PHP 5] base de données mysql : commande 'UPDATE' ?

base de données mysql : commande 'UPDATE' ? [PHP 5] - PHP - Programmation

Marsh Posté le 14-03-2009 à 19:35:30    

Salut à tous :)
 
J'ai crée une table dans une base de données : table comportant 6 champs que sont : nompage, adressepage, contenu1, contenu2, contenu3, contenu4
 
Je crée ensuite 5 enregistrements
 
Je rajoute ensuite 1 nouvel enregistrement :

Code :
  1. $nouv = mysql_query("INSERT INTO mespages (nompage) VALUES ('$valeurpage')" );


 
Il y a maintenant 6 enregistrements.
 
Et je mets à jour ma table avec la commande avec :
 

Code :
  1. $majpage = mysql_query("UPDATE mespages SET nompage=$n1, contenu1=$c1, contenu2=$c2, contenu3=$c3, contenu4=$c4 WHERE nompage=$n1" );


 
Ma question : quelqu'un peut-il m'expliquer précisément la commande UPDATE, avec SET et WHERE ? ce qui se passe exactement lors de cette instruction ?
 
où est passé le champ 'adressepage' ? il est manquant lors de la mise à jour : c'est pas normal ?

Reply

Marsh Posté le 14-03-2009 à 19:35:30   

Reply

Marsh Posté le 14-03-2009 à 19:43:14    

UPDATE met à jour les enregistrements sélectionnés, SET précise le champ à modifier et sa nouvelle valeur, WHERE définit quelle(s) ligne(s) doit(vent) être sélectionnée(s).

Reply

Marsh Posté le 14-03-2009 à 20:07:00    

petite précision : quand tu dis pour WHERE qu'il définit les lignes à modifier, par "lignes" tu entends "champs" ?

Reply

Marsh Posté le 14-03-2009 à 20:28:02    

non. Une table de base de données, c'est une liste d'enregistrements, lesquels sont définis par des champs.
 
exemple, la table "amis" est définie par les champs :
- id
- prénom
- nom
- adresse
- cp
- ville
Chaque champ est typé (entier, texte, binaire, clé, index ...) cela forme le dictionnaire de données.
 
un enregistrement, c'est une nouvelle ligne.
Par exemple (1, 'toto', 'blabla', '1 rue truc', '01234', 'Biduleville') est un enregistrement dont l'ID est 1.
 
EDIT : par rapport à ton titre, ça n'a rien à voir avec une version de PHP, c'est une requête SQL donc ça a plus un rapport avec une normalisation de langage SQL.


Message édité par NewsletTux le 14-03-2009 à 20:29:07

---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 31-03-2010 à 15:47:30    

Je suppose que si tu demandes cela, c'est que tu travailles sur le livre "PHP 5 - formation rapide, l'autoformation par l'exemple" de François Pellerin. Ta question m'intéresse parce que j'arrive au même point et cela ne fonctionne pas... Quand j'apporte des changements à mes pages, ces changements ne vont pas dans la table !: Bref, si depuis ton message, tu as eu des réponses permettant de débloquer la situation, je suis intéressé...

Reply

Marsh Posté le 31-03-2010 à 17:07:24    

Y a pas assez de précisions pour pouvoir vous aider.
 
Essayez ceci :

Code :
  1. $requete = "UPDATE mespages SET nompage=$n1, contenu1=$c1, contenu2=$c2, contenu3=$c3, contenu4=$c4 WHERE nompage=$n1"
  2. $majpage = mysql_query( $requete) or die("Ma requete = ".$requete."<br />Et l'erreur : <br />".mysql_error());


 
Là on aura en cas d'échec :
- le code de la requete pour vérifier les éventuels problèmes d'accents. ($c1 / $c2 / $c3 / $c4 sont ils proprement formatés ?!)
- le message d'erreur mysql s'il y a un problème.
- l'interruption du script en cas d'erreur.
 
L'autoformation c'est bien. Mais avant de filer du code à l'arrach' l'auteur devrait filer les astuces pour apprendre à debugger. Coder dans le brouillard ça marche jamais :o

Reply

Marsh Posté le 31-03-2010 à 17:12:57    

y'a pas de quote pour les valeurs ?
 
nompage=$n1
nompage='$n1'

Reply

Marsh Posté le 01-04-2010 à 12:52:01    

si ce sont des champs de caractères ou des dates, il faut mettre entre quotes les valeurs des champs.
 
Pour info, quand on fait un UPDATE, on n'est pas obligé de donner tous les champs avec leur valeur : on ne mentionne dans le SET que ceux qui vont avoir une nouvelle valeur. Pour le WHERE, il me semble qu'on ne peut mettre que des champs se trouvant dans la même table (c'était vrai en mysql 4.x en tout cas, en 5, je ne sais pas si ça a changé).
 
Par ailleurs, on peut faire aussi des trucs de ce genre :
UPDATE MaTable SET Champ1 = Champ1 + 1;
 
Ca va avoir pour effet d'incrémenter le champ "Champ1" de tous les enregistrements de la table ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed