Problème de textarea, nl2br, mysql_real_escape_string avec mes objets
takinelinfo
Messages postés13Date d'inscriptionmardi 24 avril 2007StatutMembreDernière intervention 1 juillet 2008
-
4 juin 2008 à 00:16
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
4 juin 2008 à 12:48
Bonsoir à tous,
J'ai actuellement un gros soucis, avant toute chose voici mon code. J'ai fait en sorte qu'il soit le plus simplifié possible.
<?php
require_once('Mysql.class.php');
class Test
{
var $id;
var $titre;
var $content;
function test($id= NULL,$titre=NULL,$contenu=NULL)
{
Le but du jeu est d'avoir un systeme de message avec un titre, et un contenu (j'ai vraiment simplifié là...). Il faut pouvoir le saisir, l'editer, l'afficher,....
Insertion
L'insertion fonctionne bien. Si par exemple je rentre:
Titre: salut'toi
Contenu:
Bonj'our,
Comment vas tu?
j'obitens bien dans ma base le bon resultat, pas de plantage grâce au mysql_real_escape_string, et pas de
car pas de nl2br.
Affichage
Lorsque je veux recuperer l'enregistrement j'utilise $obj->fromBd et si je veux de l'html, si je veux des
quoi, j'utilise en plus $obj->html();
Mixte Maintenant imaginons, je veux inserer le resultat et dessuite apès afficher le resultat sans avoir à refaire une requete. Je fais donc mon $obj->insert(). le but est de pouvoir avoir le même resultat que le from mais sans l'utiliser. Une fois l'insertion de faite, je veux donc enlever les \ mit par mysql_real_escape_string, je fais donc appel à stripslashes. Pour titre pas de probleme, mais pour contenu j'ai un soucis. Si je rentre par exemple
123'456
123'456
j'obtient en sortie: 123'456rn123'456
et si je ne l'utilise pas: 123\'456\r\n123\'456
dans les deux cas, je ne peux pas reafficher le texte de depart dans le textarea, et bien entendu le nl2br ne peux pas marcher par la suite. Comment puis je faire pour eviter ça?
Autres questions J'ai l'habitude de faire appel à une fonction de "nettoyage" lors de l'insertion (insertion + update) dans la bdd afin d'avoir des données cohérente. Par exemple,
<?php
function entree()
{
this->id =intval(trim($this->id));
$this->nom=mysql_real_escape_string(strtoupper(trim($this->nom)));
$this->prenom=mysql_real_escape_string(ucfirst(strtolower(trim($this->prenom))));
$this->adresse=mysql_real_escape_string(trim($this->adresse));
}
?>
Pour ne pas avoir ce problème de mysql_rela_escape_string et stripslashes, n'aurais je pas intérré à utiliser seulement des fonctions du style (trim, ucfirst,strtoupper,....) et mettre le mysql_real_escape_string() dans la requete? Comme ça, ça n'affect pas mon $this.
Par contre si l'on passe d'un serveur avec le magic quotes de off à on, il faut tout modifier, n'y a t'il pas une meilleure solution?
Merci pour ce qui auront pris la peine de lire, car j'ai ecrit un pavé, j'en reviens pas :) :) :)
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 4 juin 2008 à 03:51
salut
tu as plusieurs solutions pour ce probleme : d'une part, si mettre le mysql_real_escape_string dans le mysql_query, c'est bien.
d'autre part, faire un htmlentities (avec les bons parametres) te permet de virer toutes les quotes directement, sans avoir a te poser la question "y a t'il des quotes ?".
pour la configuration du serveur, il fau faire un ini_get ou un get_magic_quotes_gpc je crois ( cf http://fr3.php.net/get_magic_quotes_gpc ) pour savoir si tu dois faire un stripslashes ou pas.
ici, tu effectues plein de fois le isset, et t'en as pas besoin."
Concernant cette partie, je suis tout à fait d'accord, en fait j'ai un script beaucoup plus evoluer, et qui déjà dans une application. C'est comme ça que je me suis rendu compte du probleme. J'ai donc fait une classe de test, et le petit bout de code était la juste pour jongler entre l'affichage des donnees une fois saisies, le fromDb, et autres. Je ne l'ai en aucun cas optimisé.
J'ai pris un autre exemple afin de montrer une solution que j'ai trouvé.
<?phprequire_once('Mysql.class.php');classTest{var$id;var$nom;var$prenom;var$attribut=array('id','nom','prenom');functiontest($id=NULL,$nom=NULL,$prenom=NULL){$this->id=$id;$this->nom=$nom;$this->prenom=$prenom;}functioninsert(){$this->entree();foreach($attributas$key=>$value)${$key}=mysql_real_escape_string($value);$mysql=newmysql();$mysql->query("INSERT INTO `test`(`nom`,`prenom`) VALUES ('".$nom."','".$prenom."')");$this->id=$mysql->insert_id();returntrue;}functionentree(){$this->id=intval(trim($this->id));$this->nom=trim(strtoupper($this->nom));$this->prenom=trim(ucfirst(strtolower($this->prenom)));}}?>