8791 sujets

Développement web côté serveur, CMS

Bonssoir :

Voila une chose toute simple mais qui ne marche pas pourquoi je ne sais pas ... Je shouaite recuperer via un fomulaire un text ecrit par quelqu'un et le mettre dans ma bdd mais je n'arrive pas a mettre a jour la bdd:

Je vous montre:

la page contenant le formulaire:


<?php

mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("ma_bdd");

$reponse = mysql_query("SELECT * FROM accueil");


while ($donnees = mysql_fetch_array($reponse) )
{

$pouet = $donnees['txt_1'];
$pouet2 = $donnees['txt_2'];

}

?>
<form method="post" action="valid.php" >

<textarea name="message" rows="8" cols="45">
<?php echo $pouet; ?>
</textarea>
<BR />
<input type="submit" value="Valider!" />
</form>


et voila ma page de validation et normalement de mise a jour de ma base:


<?php
mysql_connect("localhost", "root", ""); // Connexion à MySQL
mysql_select_db("ma_bdd");


$message = /* mysql_real_escape_string*/(htmlspecialchars($_POST['message'])); 
$message = nl2br($message);

mysql_query("UPDATE accueil SET txt_1 = ".$message." ");


?>

<BR />
<BR />
<H1> <?php echo $message; ?> </H1>

<form method="post" action="index.php" >
<input type="submit" value="Retour a l'accueil" />
</form>


voila je suis vraiment bloquer la ... j'espere que quelqu'un poura m'aidé !
Merci d'avance!

Cordialement CaZaE
Modifié par CaZaE (10 Dec 2007 - 01:52)
hum

mysql_query("UPDATE accueil SET txt_1 = ".$message." ");


là tu update tous les enregistrement de la table puisqu'il n'y a pas de clause where. sinon il doit manquer les ' ' autour du message. et rajouter un petit message erreur peut-être.

mssql_query("UPDATE accueil SET txt_1 = '".$message."' ") or die(mssql_error());
premierement merci pour la reponce j'ai suivi tes conseil en remplacant la ligne et j'obtien que je n'ai selectioné aucune base???

pourtant j'ouvre la bdd au debut!!!

Pas mal le coup du debuger !! (ca va me servir je pense!!!)

cordialement CaZaE
Modifié par CaZaE (09 Dec 2007 - 17:47)
verifie les infos de connexion a ta base de données.

mais erf je pense que c'est ma faute. Smiley sweatdrop

j'ai glissé une coquille dans ma ligne de code. j'ai mis des mssql_
ou lieu de mysql_ au debut. erreur de type de base de données
je ne fais plus que du sql serveur depuis des mois c'est pour cà Smiley biggrin

la bonne ligne serait plutôt

mysql_query("UPDATE accueil SET txt_1 = '".$message."' ") or die(mysql_error());
Modifié par CPascal (09 Dec 2007 - 17:52)
J'avais corrigé cette "coquille" ^^

mais bon merci encor je vais voir si je n'ai pas fait une erreur dans l'ouverture de ma bdd...

encor merci !

cordialement CaZaE
bon j'ai fait un test en ligne pour voir donc j'ai vais le fichier suivant :


<?php
mysql_connect("sql.free.fr", "*******", "*******"); // Connexion à MySQL
mysql_select_db("*******");


$message = "salut c'est un test de modif";

mysql_query("UPDATE accueil SET txt_1 = '".$message."' WHERE ID='1' ") or die(mysql_error());

?>

<BR />
<BR />
<H1> <?php echo $message; ?> </H1>

<form method="post" action="index.php" >
<input type="submit" value="Retour a l'accueil" />
</form>


il me retourne ceci comme erreur:

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 'est un test de modif' WHERE ID='1'' at line 1

une iddée?

cordialement CaZaE.
Salut,

pour t'éviter les problèmes d'apostrophes dans $message tu pourrais faire :
$id = 1;
$message = "salut c'est un test de modif";
$sql = sprintf("UPDATE accueil SET txt_1 = '%s' WHERE id = '%s'",
mysql_real_escape_string($message),
mysql_real_escape_string($id));
mysql_query($sql) or die(mysql_error());

Pour plus d'infos, voir mysql_real_escape_string.

A+ Smiley cligne
Merci beaucoup pour se petit bout de code je vais essayer de le comprendre .

Par contre j'ai juste une derniere question par raport a :


$message = nl2br($message);


vue que je le reaffiche dans le formulaire il m'affiche aussi les <BR/> .

J'aimerai savoir s'il y a moyen de de ne pas les afficher (les suprimer) afin que l'utilisateur n'est pas a taper <BR/> pour passer a la ligne mais que il ne les retrouve pas non plus dans le fomulaire a la prochaine modif.

merci d'avance et encore merci pour le petit bout de code .

Cordialement CaZaE
re,

mais en l'occurence ton id est-il une chaine de caractére ?

1 ça sent l'entier et non la caractere frais. auquel cas tu ne dois pas mettre de ' '. on en mets uniquement pour les champs caractére. comme text,char,varchar et tutti quanti...

et dans le cas d'un sprintf le WHERE id = '%s' devient WHERE id = %d pour un champ numerique

pascal
Modifié par CPascal (09 Dec 2007 - 23:59)
j'aissay de comprendre et je pense avoir compris es que c'est comme en c su style: printf("salut %s comment va tu ?", Nom);

Mon id est un nombre (1,2,3 etc) donc que doije faire je le met ou pas?
exact idem que le C. cette fonction a été faite initialement pour faciliter le passage du c au php. comme heyoan je la trouve pratique

si tu as un nombre ( le champ mysql est de type int ou smallint un truc comme ça) tu dois mettre un where id=%d.

a priori la clé primaire d'une table ( le id) est numerique car on peut ainsi la mettre en auto-incrémenté.


sprintf est pas mal mais récemment je suis tombé dans un petit piege la-dessus. je te le cite comme ça car je ne pense pas que tu vas voir ce cas avant un moment.

si tu veux remettre a 'null' ( et pas a zero ) un champ numerique d'une base de donnée le %d t'en empecheras. la solution est simple dans ce cas revenir a une simple insertion de variable "classique" dans la chaine.
Modifié par CPascal (10 Dec 2007 - 00:00)
hum hum! ok merci pour ces explication !j'ai vraiment apris beaucoup de chose aujourd'hui ^.^

Pour la question que je posé un peu plus haut par raport au <BR /> j'ai finalement trouver simplement utiliser la fonction srt_replace


STR_replace("caractère à remplacer","caractère de remplacement",$variable)


encore merci pour tout ce que j'ai apris et de votre aide!!!

bonne nuit!

cordialement CaZaE

edit : je vais passer mon poste en resolue
Salut CaZaE Smiley cligne ,

je vois que tu as passé ton sujet en résolu et pourtant en relisant ton code je vois plusieurs choses étranges et/ou invalides :

- dans ta page index tu utilises la forme while ($donnees = mysql_fetch_array($reponse)) qui sert à lire tous les enregistrements d'une table pour, théoriquement, tous les traiter (les afficher par exemple) or tu enchaines avec echo $pouet;, ce qui va n'afficher que le dernier résultat... Est-ce bien ce que tu voulais faire et si oui quel est l'intérêt de lire toute la table Smiley rolleyes ? A priori tu as un id, non ?

- dans un <form> c'est une bonne idée de rajouter label for avec les <input> et les <textarea> ce qui donnerais :
<p><label for="message">Message :</label>
<textarea id="message" name="message" rows="8" cols="45">
<?php echo $pouet; ?>
</textarea></p>

- plutôt que le <br />, l'utilisation de <p>...</p> est recommandée (et obligatoire si ton DOCTYPE est XHTML 1.0 Strict)

- tu parles de "récupérer un message et de le mettre dans la BDD" et pourtant tu utilises UPDATE (mise à jour d'un enregistrement existant) au lieu d'INSERT (création d'un nouvel enregistrement)... je ne vois pas comment ça peut fonctionner Smiley confus ???

- tu utilises nl2br avant l'enregistrement dans la base (plus un str_replace pour le réaffichage Smiley langue ) alors que cette fonction ne devrait être utilisée que pour réafficher les sauts de ligne en dehors d'un textarea : pour être clair, message devrait être enregistré tel quel et en cas d'affichage autre que le réaffichage du textarea il faudrait le formater avec nl2br

Voili, voilou !!! En bref il me semble que tu devrais reprendre les choses depuis le début : voir les liens dans les ressources et enchainer avec le site du zero et/ou phpdebutant.org.

A+ Smiley biggrin
Bonssoir et deja merci de m'aporté plus de precision

- dans ta page index tu utilises la forme while ($donnees = mysql_fetch_array($reponse)) qui sert à lire tous les enregistrements d'une table pour, théoriquement, tous les traiter (les afficher par exemple) or tu enchaines avec echo $pouet;, ce qui va n'afficher que le dernier résultat... Est-ce bien ce que tu voulais faire et si oui quel est l'intérêt de lire toute la table rolleyes ? A priori tu as un id, non ?

---->ce n'est qu'un exemple car dans l'utilisation final beaucoup de donner vont etre brasser ( je cherche a faire une petite interface admin pour un site entierement parametrable)

- dans un <form> c'est une bonne idée de rajouter label for avec les <input> et les <textarea> ce qui donnerais :

---->Je vais mettre ca en pratique

- tu parles de "récupérer un message et de le mettre dans la BDD" et pourtant tu utilises UPDATE (mise à jour d'un enregistrement existant) au lieu d'INSERT (création d'un nouvel enregistrement)... je ne vois pas comment ça peut fonctionner confus ???

---->J'ai due surement mal m'exprimer car le but et que tous est deja cree il ne reste plus qu'a rentrer le texte dedans le modifier le remetre et l'afficher ailleur.

C'est vrai que mon code n'est vraiment pas au pointe de la valisation je pioche sa et la des fontion interessante et j'essay de faire un truc qui peut corespondre a mes besoin donc c'est sur que j'ai encore a aprendre et deja je vous remerci de m'aider dans cette demarche!

encore merci bonne soiré!

cordialement CaZaE
Modifié par CaZaE (11 Dec 2007 - 20:02)