begin process at 2010 02 10 07:02:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

POO

 > 

Classes & Objets

 > 

Problème de textarea, nl2br, mysql_real_escape_string avec mes objets


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de textarea, nl2br, mysql_real_escape_string avec mes objets

mercredi 4 juin 2008 à 00:16:53 | Problème de textarea, nl2br, mysql_real_escape_string avec mes objets

takinelinfo

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

        $this->id=$id;
        $this->titre=$titre;
        $this->contenu=$contenu;
    }
   
    function insert()
    {
        $this->entree();
        $mysql = new mysql();
        $mysql->query("INSERT INTO `test`(`titre`,`contenu`) VALUES ('".$this->titre."','".$this->contenu."')");
        $this->id=$mysql->insert_id();
        $this->sortie();
        return true;
    }
   
    function fromDb($id)
    {
        $mysql = new mysql();
        $mysql->connect();
        $this->id = intval(mysql_real_escape_string(trim($id)));
       
        $mysql->query("SELECT * FROM `test` WHERE `id`='".$this->id."'");
       
        if($mysql->num_rows()!=1)
            return false;
       
        $data = $mysql->next_record();
        $this->titre=$data['titre'];
        $this->contenu=$data['contenu'];
        $this->affichage();
    }
   
    function entree()
    {
        $mysql = new mysql();
        $mysql->connect();
       
        $this->id = intval(mysql_real_escape_string(trim($this->id)));
        $this->titre = mysql_real_escape_string(trim($this->titre));
        $this->contenu = mysql_real_escape_string(trim($this->contenu));
    }
   
    function sortie()
    {       
        $this->titre = stripslashes($this->titre);
        $this->contenu = stripslashes($this->contenu);
    }
   
    function affichage()
    {   
        $this->titre = htmlspecialchars($this->titre);
        $this->contenu = htmlspecialchars($this->contenu);
    }
   
    function html()
    {   
        $this->contenu = nl2br($this->contenu);
    }
}
?>

<?php
require_once('Test.class.php');

if(isset($_POST['addTest']))
{
    $test = new Test(NULL,$_POST['titre'],$_POST['contenu']);
    $test->insert();
}
if(true)
{
    $test = new Test();
    $test->fromDb(13);
}
   
$titre    = (isset($test))?$test->titre:'';
$contenu= (isset($test))?$test->contenu:'';

if(isset($test))
    $test->html();
   
$contenuHtml=(isset($test))?$test->contenu:'';

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Ceci est un test</title>
</head>

<body>
    <form action="" method="post">
        <input type="text" name="titre" value="<?php echo $titre; ?>" />
        <textarea name="contenu" cols="50" rows="10"><?php echo $contenu; ?></textarea>
        <input type="submit" name="addTest" value="Ajouter" />
    </form>
    <div><?php echo $contenuHtml; ?></div>
</body>
</html>

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 <br /> 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 <br /> 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 :)  :)  :)
mercredi 4 juin 2008 à 03:51:12 | Re : Problème de textarea, nl2br, mysql_real_escape_string avec mes objets

coucou747

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.

sinon, ton code est un peu lent...


$titre    = (isset($test))?$test->titre:'';
$contenu= (isset($test))?$test->contenu:'';

if(isset($test))
    $test->html();
  
$contenuHtml=(isset($test))?$test->contenu:'';

ici, tu effectues plein de fois le isset, et t'en as pas besoin.
mercredi 4 juin 2008 à 10:19:08 | Re : Problème de textarea, nl2br, mysql_real_escape_string avec mes objets

takinelinfo

"sinon, ton code est un peu lent...

$titre    = (isset($test))?$test->titre:'';
$contenu= (isset($test))?$test->contenu:'';

if(isset($test))
    $test->html();
  
$contenuHtml=(isset($test))?$test->contenu:'';

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

Quand pensez vous?
mercredi 4 juin 2008 à 12:48:12 | Re : Problème de textarea, nl2br, mysql_real_escape_string avec mes objets

coucou747


"Quand pensez vous?"=> quand je ne dors pas...

ta class m'a l'air correcte, peut-etre devrais-tu faire une classe abstraite, et une class d'abstraction de sgbd.


Cette discussion est classée dans : mysql, test, contenu, titre, id


Répondre à ce message

Sujets en rapport avec ce message

modification par formulaire d'un contenu d'une base Mysql [ par mariobotta ] bonsoir,j'ai un petit souci dans ma page de modification d'un contenu provenant d'une base.mon problème : le contenu présent dans le value d'un formul Multiple Update MySQL [ par paul13 ] Bon, comme je ne sais pas trop comment poser la question, voila le contexte.Depuis une page en php me servant à requeter dans la base MySQL, je peux f Requête SQL ne marche pas [ par OneHacker ] Alors j'ai une table Test avec un champ id(int) et un champ value(car char)voici ma table :0   value01   value1Je fait une requête : // pensez a ouvr Formulaire & $_FILES [ par DjChat ] Bonjour a tous, j'ai fait un formulaire d'edition d'un enregistrement d'une BDD MySQL, il y a un upoad d'image et j'aurai aimer que si pendant l'edito probleme insertion requete imbrique [ par G4uthier ] CREATE table SM_properties (id INT(4) NOT NULL AUTO_INCREMENT, postcode VARCHAR(9), price INT(6), branch VARCHAR(150), bedrooms int(2), address1 VARCH une ligne mysql dans une case de tableau [ par bubbledesavon ] bonjour,je me permet d'ecrire car je n'arrive pas a trouver de correspondance a ce que je recherche.j'ai une table mysql "id,nom,descriptif,image,nume acharnement php/mysql [ par seb76250 ] Bonjour a tous, je suis en formation informatique et j'essaie de comprendre le langage php et la gestion de base sql (ce qui n'est pas simple) J'avoue Erreurs de compilation :Undefined offset [ par faty86 ] Salut !! J'ai un code php et lors de la compilation j'ai 2erreurs que je n'arrive pas a trouver !Voici le resultat de la compilation :"partie supprime probleme d'update [ par rymoucha ] bonjour,     j'ai ecris un code me permettant de faire de modifier des champs d'une table. le probleme, c'est que quand la requete s'execute, je ne re Liste déroulante [ par biba00 ] Salut tout le monde,j'ai utilisé une rquete pour mettre une liste des nom dans une liste déroulante , voici mon code :       La liste des modules <


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales