Problème formulaire avec textarea - PHP - Programmation
Marsh Posté le 09-02-2005 à 16:22:37
sous MySQL, tu a un format "text" qui est plutot pas mal quand tu veux stocker du texte... ça existe pas l'équivalent sous postgres ???
Marsh Posté le 09-02-2005 à 16:29:30
Xav_ a écrit : sous MySQL, tu a un format "text" qui est plutot pas mal quand tu veux stocker du texte... ça existe pas l'équivalent sous postgres ??? |
ah je ne sais pas, je vais jeter un oeil
Marsh Posté le 09-02-2005 à 17:01:12
Bon et bien cela ne fonctionne toujours pas...lorsque je met un texte du style:
'Les systèmes d'exploitation Microsoft® Windows® 2000 Advanced Server et Datacenter Server permettent aux organisations de déployer des solutions de commerce électronique et des applications professionnelles critiques sur du matériel PC standard. Pour y parvenir, les technologies d'organisation en clusters sont essentielles.'
Les données ne s'écrivent pas dans la BD Ah je précise que je suis en method="post", je ne sais pas si cela joue...
Marsh Posté le 09-02-2005 à 17:22:35
Fred999 a écrit : ...fais voir ton code, là il y a un souci. |
Ok mais c'est pas du beau, je te préviens! Je débute
En abrégé, le formulaire:
<form method="post" name="Techreport" action="Pages/admin/valid_aj_techreport.php" OnSubmit='return validate()'>
<table border="1" bordercolor="navy">
<tr>
<td width="200"><b>Titre:</b></td>
<td><input type="text" name="titre" size="50"></td>
</tr>
<tr>
<td width="200"><b>Extrait:</b>
<textarea name="summary" rows=8 cols=25></textarea></td>
</tr>
<tr>
<td width="200" height="20"><b>Contenu:</b>
<textarea name="content" rows=8 cols=50></textarea></td>
</tr>
</table>
<input type="submit" value="Envoyer"></form>
La page de traitement (tres abrégée):
<?php
$titre = $_POST['titre'];
$summary = $_POST['summary'];
$content = $_POST['content'];
$maj = pg_query($pgconnection, "INSERT INTO techreport (titre_techreport,date,summary_techreport,content_techreport)
VALUES ('$titre','$date','$summary','$content')" );
?>
Marsh Posté le 09-02-2005 à 17:52:01
Perso pour récupérer les variables d'un formulaire j'utilise
$summary = $HTTP_POST_VARS['summary'];
Je pense que le souci est qu'il s'embrouille avec les apostrophes.
Pour cela, un $summary = addslashes($HTTP_POST_VARS['summary']);
devrait résoudre pas mal de problèmes.
Utilise stripslashes() à l'affichage ensuite.
Ta future bible : http://www.php.net/manual/fr/index.php
++ :=
Marsh Posté le 09-02-2005 à 18:10:52
Fred999 a écrit : Perso pour récupérer les variables d'un formulaire j'utilise |
Pas besoin du $HTTP_POST_VARS, on peut utiliser le $_POST['champ']. Après, il suffit de mettre le addslashes, donc :
$content = addslashes($_POST['content']); |
Marsh Posté le 09-02-2005 à 18:15:36
OK, je ne savais pas
Quelle est la différence entre les deux ?
Marsh Posté le 09-02-2005 à 19:56:20
Fred999 a écrit : OK, je ne savais pas |
ta syntaxe était la seule possible jusqu'à PHP4 si mes souvenirs sont bon, maintenant le $_POST est implémenté est simplifie mais la "vieille" syntaxe est fort heureusement tjs valable (compatibilité obligée)
Marsh Posté le 09-02-2005 à 21:16:08
Ca me paraîtrai surprenant, mais vérifie quand même ta conf php, par exemple les directives post_max_size et memory_limit.
Marsh Posté le 10-02-2005 à 09:49:46
Salut,
J'ai donc utilisé:
$content = addslashes($_POST['content']); |
Et cela fonctionne, merci
Par contre, je n'ai plus la mise en forme du texte à l'affichage...
Pour le conserver; hier soir, j'ai ajouté nl2br comme ceci
$content = nl2br($_POST['content']); |
Mais du coup ca n'a plus lieu d'etre!
Marsh Posté le 10-02-2005 à 09:52:18
kalex a écrit : Ca me paraîtrai surprenant, mais vérifie quand même ta conf php, par exemple les directives post_max_size et memory_limit. |
Comment fait on pour voir ca
Marsh Posté le 10-02-2005 à 10:00:02
kerrighan a écrit : Salut,
|
C'est normal, n'oublie pas qu'en html, les retours chariots ne sont pas pris en compte (hormis dans les bloc <pre> et <code> ), et qu'il faut metter un <br/> pour les forcer..
Marsh Posté le 10-02-2005 à 10:03:33
Fred999 a écrit : Perso pour récupérer les variables d'un formulaire j'utilise |
L'avantage de $_POST sur $HTTP_POST_VARS c'est que $_POST est un tableau superglobal : si tu veux l'utiliser dans une fonction pas besoin d'ajouter global $_POST, alors que t'es obligé de mettre un global $HTTP_POST_VARS.
Par contre encore une fois, le stripslashes() est inutile (sauf si magic_quotes_runtime est à On mais c'est rare), je te laisse tester par toi-même.
Marsh Posté le 10-02-2005 à 10:09:43
FlorentG a écrit : C'est normal, n'oublie pas qu'en html, les retours chariots ne sont pas pris en compte (hormis dans les bloc <pre> et <code> ), et qu'il faut metter un <br/> pour les forcer.. |
Ok mais je ne vais pas demander aux utilisateurs de mettre des <br/> lorsqu'ils saisissent le texte
Marsh Posté le 10-02-2005 à 10:10:04
kerrighan a écrit : Ok mais je ne vais pas demander aux utilisateurs de mettre des <br/> lorsqu'ils saisissent le texte |
D'où l'interête de la fonction nl2br
Marsh Posté le 10-02-2005 à 11:27:03
Ok mais je peut mettre nl2br et addslashes en même temps?
Marsh Posté le 10-02-2005 à 11:28:05
Tu fais ce que tu veux, tu peux enchaîner sur un trim() ou un substr() si ça te chante.
Aucun souci d'imbrication dans les appels de fonctions, tant que les types correspondent bien.
Marsh Posté le 10-02-2005 à 11:30:10
kerrighan a écrit : Ok mais je peut mettre nl2br et addslashes en même temps? |
Attention à ne pas faire un nl2br lors de l'insertion dans la base, parce que s'il faut éditer, t'aura pleins de <br/> partout. Aussi si un jour tes données doivent être affichées ailleurs que dans un document XHTML, tu sera emmerdé par les <br/>
Marsh Posté le 10-02-2005 à 11:33:06
Fred999 a écrit : Tu fais ce que tu veux, tu peux enchaîner sur un trim() ou un substr() si ça te chante. |
Oki
Marsh Posté le 10-02-2005 à 11:36:16
FlorentG a écrit : Attention à ne pas faire un nl2br lors de l'insertion dans la base, parce que s'il faut éditer, t'aura pleins de <br/> partout. Aussi si un jour tes données doivent être affichées ailleurs que dans un document XHTML, tu sera emmerdé par les <br/> |
Bon actuellement j'insert dans la base avec:
$content = addslashes($_POST['content']); |
Comment faire pour afficher mes données mises en forme? car la le texte est entré dans la bd en ligne...,c'est à dire sans retour chariot!
Marsh Posté le 10-02-2005 à 11:39:22
Ben sii, il y a des retours chariots Faut juste les convertir en <br/> lors de l'affichage sur un document XHTML
Marsh Posté le 10-02-2005 à 11:41:20
Bon maintenant j'ai mis:
$content = nl2br(addslashes($_POST['content'])); |
Et j'ai bien les <br\> donc un affichage avec la mise en forme
Marsh Posté le 10-02-2005 à 11:46:13
kerrighan a écrit : Bon maintenant j'ai mis:
|
Le $content, c'est ce que tu stockes dans la BD ?
Marsh Posté le 10-02-2005 à 13:35:34
kerrighan a écrit : et bien oui |
Justement c'est ce qu'il ne faut pas faire. Faut mettre le nl2br juste au moment de l'affichage dans le document XHTML
Marsh Posté le 10-02-2005 à 13:35:51
si je ne m'abuse, le nl2br faut pas le faire au stockage, mais plutot à l'affichage... enfin je crois
EDIT: grilled, j'ai pa bu mon café donc pas assez rapide
Marsh Posté le 10-02-2005 à 13:56:38
Ok donc je met:
$content = addslashes($_POST['content']); |
Pour écrire dans la BD
et
$content = nl2br(['content']); |
Pour afficher les données c'est bien ca?
En tout cas ca a l'air de fonctionner
Marsh Posté le 10-02-2005 à 13:59:56
Voilà, comme ça t'as pas les <br/> codés en durs dans la base
Marsh Posté le 10-02-2005 à 15:51:43
FlorentG a écrit : Voilà, comme ça t'as pas les <br/> codés en durs dans la base |
Yess, en tout cas merci beaucoup à vous tous, ca m'a tiré une épine du pied
(J'adore ce Forum, il y as toujours quelqu'un pour t'aider )
Marsh Posté le 10-02-2005 à 18:00:58
Euh j'ai une petite dernière question
Voila lors de la supression de mes entrées dans la Bd,l'utilisateur clique sur un lien (supprimer entrée)qui ouvre une popup.
Dans cette popup, s'affichent quelques données de l'uplet et en dessous, figure un bouton pour valider la suppression.
Le code du bouton est fait ainsi:
echo"<form method='post'>"; |
Le champ id me permet de connaitre l'id de l'uplet pour pouvoi le supprimer.
Le problème est que lorsque je clique sur le bouton 'OUI' rien ne ce passe. Par contre, si j'ajoute un champ du type:
<input type='text' name='titre' value='$titre'> |
la sa passe.
Le problème, c'est que je n'ai pas envie d'avoir de champ éditable dans cette popup de confirmation!
Comment dois je m'y prendre? Vous avez une idée?
Marsh Posté le 11-02-2005 à 09:57:13
Ok j'ai trouvé ma boulette , je m'était trompé dans mon isset
Marsh Posté le 09-02-2005 à 16:20:46
Bonjour,
J'ai une Bd sur Postgres, en Latin3.
Ma table est celle ci:
CREATE TABLE techreport
(
no_techreport int4 NOT NULL DEFAULT nextval('seq_techreport'::text),
titre_techreport varchar(50) NOT NULL,
date date,
summary_techreport varchar(300) NOT NULL,
content_techreport varchar NOT NULL,
CONSTRAINT pk_no_techreport PRIMARY KEY (no_techreport)
)
Et dans mon formulaire, j'ai deux textarea qui doivent écrire dans:
summary_techreport
et
content_techreport
Le problème est que lorsque je met quelque chose comme 200 mots, cela n'écrit pas dans la bd!
Est-ce du au fait que je n'ai pas précisé de valeur pour les varchar de content_techreport?
Ou est-ce du aux textareas?
Message édité par kerrighan le 09-02-2005 à 17:01:55