Insertion sauvage de slash dans ma base de données

Eléphanteau du PHP | 14 Messages

11 févr. 2011, 20:59

Bonjour à tous,

je suis en train de créer un site autour des auteurs de jeux de société avec une base wordpress.

je souhaite faire un formulaire qui crée une page avec leurs informations perso, seulement, à chaque fois, ça envoie dans la base de donnée le contenu en rajoutant des "/// avant chaque apostrophe (') de mon code html et en plus, les accents et caractères spéciaux ne passent pas.

ce qui est bizare c'est que quand je place les articles (dans wordpress) dans la corbeille et que je les restaures, les "/// disparaissent et le contenu est bon (en dehors des accents et caractères spéciaux)

Je précise que tout se passe en 3 partie :
1 remplir un formulaire
2 affichage du résultat (prévisualisation)
3 validation des données et envoie dans la BDD pour créer la page wordpress.


je ne sais pas comment résoudre le problème....

merci d'avance de vos réponses,

Max, un peu (beaucoup ???) désespéré.

Code : Tout sélectionner

<?php global $current_user; if ( isset($current_user)) { if(isset($_POST['carte'])) { $dsn="******"; $login = "************"; $bdd= new PDO($dsn, $login , $pass); $bdd->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = "INSERT INTO wp_haut_lud_posts(ID, post_author, post_date, post_date_gmt, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_password, post_name, to_ping, pinged, post_modified, post_modified_gmt, post_content_filtered, post_parent, guid, menu_order, post_type, post_mime_type, comment_count) VALUES ('', ?, NOW(), '', ?, ?, '', 'pending', 'open', 'open', '', '', '', '', NOW(), NOW(), '', 85, 'http://hauteursludiques.com/auteurs/', 0, 'page', '', 0)"; $stmt= $bdd->prepare($sql); get_currentuserinfo(); $carte_decod = htmlspecialchars_decode($_POST['carte']); $tmp=array( $user_ID, mysql_real_escape_string($carte_decod), mysql_real_escape_string($_POST['nom2'])); $stmt->execute($tmp); } Else { if(isset($_POST['nom'])) { ?> <h1><?php echo $_POST['nom'];?></h1> <div class="carte"> <div class="carteb1"> <div class="carte-bordure"> <p><img class="aligncenter size-thumbnail wp-image-103" style="border-top-width: 2px; border-top-style: solid; border-top-color: #000000; border-bottom-width: 2px; border-bottom-style: solid; border-bottom-color: black;" title="<?php echo $_POST['nom'];?>" src="<?php if($_POST['img'] !==''){echo $_POST['img'];}?>" alt="" width="214" height="150" /></p> <div class="hcart"> <p>Métier : <strong><?php echo $_POST['metier'];?></strong></p> <p>Département : <strong><?php echo $_POST['departement'];?></strong></p> </div> <h1>Ludographie :</h1> <div class="edit"> <p><strong>Jeux édités :</strong></p> <ul> <?php for($i=1;$i<9;$i++) { if($_POST["jeu-edite-".$i]!=='') { echo'<li><span style="font-size: 10px;">'.$_POST["jeu-edite-".$i].'</span></li>'; } } ?> </ul> </div> <div class="edit"> <p><strong>Prototypes :</strong></p> <ul> <?php for($i=1;$i<9;$i++) { if($_POST["proto-".$i]!=='') { echo'<li><span style="font-size: 10px;">'.$_POST["proto-".$i].'</span></li>'; } } ?> </ul> </div> <p style="clear: both; height: 1px;"> </p> </div> </div> </div> <?php $carte_site1 ="<div class='carte'><div class='carteb1'><div class='carte-bordure'><p><img class='aligncenter size-thumbnail wp-image-103' style='border-top-width: 2px; border-top-style: solid; border-top-color: #000000; border-bottom-width: 2px; border-bottom-style: solid; border-bottom-color: black;' title='".$_POST['nom']."' src='".$_POST['img']."' alt='' width='214' height='150'/></p><div class='hcart'><p>Métier : <strong>".$_POST['metier']."</strong></p><p>Département : <strong>".$_POST['departement']."</strong></p></div><h1>Ludographie :</h1><div class='edit'><p>Jeux édités :</p><ul>"; for($i=1;$i<9;$i++) { if($_POST["jeu-edite-".$i]!=='') { $carte_site2=$cartesite2."<li><span style='font-size: 10px;'>".$_POST['jeu-edite-'.$i]."</span></li>"; } } $carte_site2= $carte_site2."</ul></div><div class='edit'><p>Prototypes :</p><ul>"; for($i=1;$i<9;$i++) { if($_POST["proto-".$i]!=='') { $carte_site2=$carte_site2."<li><span style='font-size: 10px;'>".$_POST["proto-".$i]."</span></li>"; } } $carte_site2 = $carte_site2."</ul></div><p style='clear: both; height: 1px;'></p></div></div></div>";?> <?php echo $carte_site1.$carte_site2;?> <form action="http://hauteursludiques.com/debuter/nouvel_auteur/" method="post" enctype="multipart/form-data"> <input type="hidden" name="nom2" value="<?php echo $_POST['nom'];?>"> <input type="hidden" name="carte" value="<?php echo $carte_site1.$carte_site2 ?>"> <input type="submit" value="valider ma carte"> <?php } Else { ?> <form action="http://hauteursludiques.com/debuter/nouvel_auteur/" method="post" enctype="multipart/form-data"> Vos nom et prénom : <input type="text" value="" name="nom"><br/> url de votre image (largeur:212px) : <input type="text" name="img"><br/><br/> <div class="carte" style="width:400px; margin-right:50px;"> <div class="carteb1"> <div class="carte-bordure"><p><img class="aligncenter size-thumbnail wp-image-103" style="border-top-width: 2px; border-top-style: solid; border-top-color: #000000; border-bottom-width: 2px; border-bottom-style: solid; border-bottom-color: black;" title="Baby-Boom-sourd" src="http://hauteursludiques.com/wp-content/uploads/2011/01/Baby-Boom-sourd1-214x150.jpg" alt="" width="214" height="150" /></p> <div class="hcart"><p>Métier : <input type="text" name="metier"></p> <p>Département : <input type="text" name="departement"></p></div> <h1>Ludographie :</h1> <div class="edit" style="width:160px;"><p><strong>Jeux édités :</strong></p> <ul> <li><input type="text" name="jeu-edite-1"></li> <li><input type="text" name="jeu-edite-2"></li> <li><input type="text" name="jeu-edite-3"></li> <li><input type="text" name="jeu-edite-4"></li> <li><input type="text" name="jeu-edite-5"></li> <li><input type="text" name="jeu-edite-6"></li> <li><input type="text" name="jeu-edite-7"></li> <li><input type="text" name="jeu-edite-8"></li> </ul> </div> <div class="edit"><p><strong>Prototypes :</strong></p> <ul> <li><input type="text" name="proto-1"></li> <li><input type="text" name="proto-2"></li> <li><input type="text" name="proto-3"></li> <li><input type="text" name="proto-4"></li> <li><input type="text" name="proto-5"></li> <li><input type="text" name="proto-6"></li> <li><input type="text" name="proto-7"></li> <li><input type="text" name="proto-8"></li> </ul> </div> <p style="clear: both; height: 1px;"> </p></div> </div> </div> <input type="submit" value="créer ma carte"></form> <?php } } } else { echo 'Merci de vous connecter'; } ?>

ViPHP
ViPHP | 5462 Messages

11 févr. 2011, 21:58

t'as vérifié les magic_quote ?
http://php.net/manual/fr/security.magicquotes.php

Eléphanteau du PHP | 14 Messages

11 févr. 2011, 22:15

lorsque je fais :


echo get_magic_quotes_gpc();


ca renvoie 1.....

le problème c'est que je sais pas comment éviter cette fonction dans mon code....

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

11 févr. 2011, 22:19

un peut de lecture supplémentaire sur le sujet !

http://www.phpdebutant.org/article150.php

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 5462 Messages

11 févr. 2011, 22:23

le problème c'est que je sais pas comment éviter cette fonction dans mon code....
c'est dans le lien : Désactiver les guillemets magiques :wink:

Eléphanteau du PHP | 14 Messages

11 févr. 2011, 22:26

Je l'ai fait ! :)


ca enlève une patie des antislash^^

voici un extrait du code renvoyé dans ma page wordpress :

Code : Tout sélectionner

<div class=\'carte\'> <div class=\'carteb1\'> <div class=\'carte-bordure\'> <p><img class=\'aligncenter size-thumbnail wp-image-103\' style=\'border-top-width: 2px; border-top-style: solid; border-top-color: #000000; border-bottom-width: 2px; border-bottom-style: solid; border-bottom-color: black;\' title=\'dfgn\' src=\'dgn\' alt=\'\' width=\'214\' height=\'150\'/></p> <div class=\'hcart\'> <p>Métier : <strong>dfgn</strong></p> <p>Département : <strong>fdgn</strong></p> </div> <h1>Ludographie :</h1> <div class=\'edit\'> <p>Jeux édités :</p> <ul> <li><span style=\'font-size: 10px;\'>gfg</span></li> </ul> </div> <div class=\'edit\'> <p>Prototypes :</p> <ul></ul> </div> <p style=\'clear: both; height: 1px;\'> </div> </div> </div>
le problème c'est qiu'il reste des " \" quand même.... GRRRRRRRRRRR

:)

une autre idée pour virer le reste des antislashs ?
Modifié en dernier par equiibriste le 11 févr. 2011, 22:29, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

11 févr. 2011, 22:28

ils sont aussi dans ta base ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

11 févr. 2011, 22:31

qu'elle magic_quote passée à on ?

Il est possible que les \ soient dans la base s'il n'ont pas étaient géré à grand coup de stripslashes.

le mieux serait de regarder directement avec le client mysql en ligne de commande.

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 14 Messages

11 févr. 2011, 22:53

les \ sont présent dans la base de donnée.

le code de la page est strictement le même que celui qui est dans la base :)

du coup, ça veux dire que c'est au moment de l'envoie du formulaire que ça chie... :s

je suis mauvais en php..... :s faut que je progresse ! :)

avec votre aide :)

ViPHP
ViPHP | 5462 Messages

11 févr. 2011, 23:13

les \ sont présent dans la base de donnée.

le code de la page est strictement le même que celui qui est dans la base :)

du coup, ça veux dire que c'est au moment de l'envoie du formulaire que ça chie... :s

je suis mauvais en php..... :s faut que je progresse ! :)

avec votre aide :)
aie, il va falloir les enlever :(

Eléphanteau du PHP | 14 Messages

11 févr. 2011, 23:14

oui, mais comment ? :)

ViPHP
xTG
ViPHP | 7331 Messages

11 févr. 2011, 23:36

Voir la fonction stripslashes(). :)

Eléphanteau du PHP | 14 Messages

11 févr. 2011, 23:41

j'ai modifier le code de mon formulaire :

Code : Tout sélectionner

<form action="http://hauteursludiques.com/debuter/nouvel_auteur/" method="post" enctype="multipart/form-data"> <input type="hidden" name="nom2" value="<?php echo $_POST['nom'];?>"> <input type="hidden" name="carte" value="<?php echo stripslashes($carte_site1.$carte_site2) ?>"> <input type="submit" value="valider ma carte">
Mais ce ne change rien, les antislashes sont toujours là :(

Eléphanteau du PHP | 14 Messages

11 févr. 2011, 23:47

Pour info, j'ai utilisé ce code pour viré les deux premières paires d'antislash :

Code : Tout sélectionner

if (get_magic_quotes_gpc()) { $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST); while (list($key, $val) = each($process)) { foreach ($val as $k => $v) { unset($process[$key][$k]); if (is_array($v)) { $process[$key][stripslashes($k)] = $v; $process[] = &$process[$key][stripslashes($k)]; } else { $process[$key][stripslashes($k)] = stripslashes($v); } } } unset($process); }
il reste un antislash avant chaque apostrophe....

Eléphanteau du PHP | 14 Messages

12 févr. 2011, 00:12

Personne n'a de pistes ? ?? :(