Problème formulaire avec textarea

Problème formulaire avec textarea - PHP - Programmation

Marsh Posté le 09-02-2005 à 16:20:46    

Bonjour,  :hello:  
 
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
Reply

Marsh Posté le 09-02-2005 à 16:20:46   

Reply

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


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

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

Reply

Marsh Posté le 09-02-2005 à 16:41:33    

Bon apparement cela existe :D je vais tester ;)

Reply

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

Reply

Marsh Posté le 09-02-2005 à 17:12:04    

...fais voir ton code, là il y a un souci.

Reply

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 :D
 
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')" );
?>

Reply

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
 
++ :=

Reply

Marsh Posté le 09-02-2005 à 18:10:52    

Fred999 a écrit :

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
 
++ :=


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']);


Reply

Marsh Posté le 09-02-2005 à 18:15:36    

OK, je ne savais pas :jap:
 
Quelle est la différence entre les deux ?

Reply

Marsh Posté le 09-02-2005 à 18:15:36   

Reply

Marsh Posté le 09-02-2005 à 19:56:20    

Fred999 a écrit :

OK, je ne savais pas :jap:
 
Quelle est la différence entre les deux ?


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)


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

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.

Reply

Marsh Posté le 10-02-2005 à 09:49:46    

Salut,
J'ai donc utilisé:

$content = addslashes($_POST['content']);


Et cela fonctionne, merci :jap:
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!


Message édité par kerrighan le 10-02-2005 à 09:51:03
Reply

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

Reply

Marsh Posté le 10-02-2005 à 10:00:02    

kerrighan a écrit :

Salut,
J'ai donc utilisé:

$content = addslashes($_POST['content']);


Et cela fonctionne, merci :jap:
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!


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

Reply

Marsh Posté le 10-02-2005 à 10:03:33    

Fred999 a écrit :

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
 
++ :=


 
 
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.

Reply

Marsh Posté le 10-02-2005 à 10:05:39    

Merci des conseils [:bien]

Reply

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 :/

Reply

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

Reply

Marsh Posté le 10-02-2005 à 11:27:03    

Ok mais je peut mettre nl2br et addslashes en même temps?

Reply

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.

Reply

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/> :)

Reply

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.
 
Aucun souci d'imbrication dans les appels de fonctions, tant que les types correspondent bien.


Oki ;)

Reply

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!
 

Reply

Marsh Posté le 10-02-2005 à 11:39:22    

Ben sii, il y a des retours chariots :heink: Faut juste les convertir en <br/> lors de l'affichage sur un document XHTML

Reply

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 :)

Reply

Marsh Posté le 10-02-2005 à 11:46:13    

kerrighan a écrit :

Bon maintenant j'ai mis:

$content = nl2br(addslashes($_POST['content']));


Et j'ai bien les <br\> donc un affichage avec la mise en forme :)


Le $content, c'est ce que tu stockes dans la BD ?

Reply

Marsh Posté le 10-02-2005 à 12:50:38    

et bien oui :/

Reply

Marsh Posté le 10-02-2005 à 13:35:34    

Justement c'est ce qu'il ne faut pas faire. Faut mettre le nl2br juste au moment de l'affichage dans le document XHTML

Reply

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


Message édité par Xav_ le 10-02-2005 à 13:36:27

---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

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 :D

Reply

Marsh Posté le 10-02-2005 à 13:59:56    

Voilà, comme ça t'as pas les <br/> codés en durs dans la base :)

Reply

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  [:kerrighan] )

Reply

Marsh Posté le 10-02-2005 à 15:52:25    

:jap: :)

Reply

Marsh Posté le 10-02-2005 à 18:00:58    

Euh j'ai une petite dernière question :whistle:
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'>";
echo"<input type='hidden' value='$id_doc' name='id'>";
echo"<input type='submit' value='OUI'>&nbsp;<input type='button' onclick='window.close();' value='NON'></form>";


 
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?


Message édité par kerrighan le 10-02-2005 à 18:02:05
Reply

Marsh Posté le 10-02-2005 à 19:14:28    

Il n'y a pas d'action dans ton formulaire ? :??:

Reply

Marsh Posté le 10-02-2005 à 19:57:06    

Bah non, comme ca il est traité directement :)

Reply

Marsh Posté le 11-02-2005 à 09:57:13    

Ok j'ai trouvé ma boulette :D, je m'était trompé dans mon isset ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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