Envoie de données sur la BDD assez bizard.

Résolu/Fermé
Julien - Modifié par Julien le 3/04/2011 à 19:40
 Julien - 4 avril 2011 à 07:37
Bonjour,
J'ai déjà posté hier, car j'avais un problème à afficher des données sortant de la BDD. Tout cela a été corrigé, et je remercie encore les personnes qui m'ont aider, car cela a marché.
Aujourd'hui j'ai fini le design du site, j'ai bien avancé, corriger énormément de bug, et même poster des messages que j'ai stocké dans la BDD depuis une zone admin. Mais depuis tout à l'heure, j'ai fais quelque chose, je ne sais pas quoi, et depuis que j'envoie du HTML sur la BDD, il y a des "\" qui apparaisse sur le code. Par exemple, je vais envoyer un code du genre :
<a href="http://google.fr">Google</a> 

Et je vais avoir
<a href=\"http://google.fr\">Google</a> 

D'afficher sur la page où j'appelle mes derniers billets.

Cela fait maintenant 1h30 environ que je suis en train de modifier mes codes, mais ça ne changer rien. Je voudrais savoir pourquoi ça fait ça, et comment le corriger si cela est possible s'il vous plait. Je ne pense pas que ce soit mon code, car j'ai remis des anciens codes, mais ça me fais pareil. Je vous met quand même mon code, mais encore une fois, cela m'étonnerait beaucoup que ça vienne de là.
Admin.php :
<html> 
<head> 
<title>Admin</title> 
<?php include ('header.php'); ?> 
</head> 
<body> 
<?php 
if (isset($_POST['pseudo']) AND $_POST['pseudo'] == "Julien95") 
if (isset($_POST['mdp']) AND $_POST['mdp'] == "HuesKSi") 
{ 
?> 
<form action="news_post.php" method="post"> 
<p><div align="center"> 
Pseudo : 
<input type="text" name="pseudo"><br /> 
Titre du poste : 
<input type="text" name="titre"><br /> 
<textarea name="contenu" rows="8" cols="45"></textarea> 
<input type="submit" value="Envoyer"> 
</div></p> 
</form> 
<?php 
} 
else 
{ 
echo '<p>Le pseudo et / ou le mot de passe incorect.</p>'; 
} 
?> 
</body> 
</html> 

Et new_post.php :
<?php 
try 
{ 
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; 
    $bdd = new PDO('mysql:host=localhost;dbname=blog', 'root', '', $pdo_options); 
     
    $req = $bdd->prepare('INSERT INTO billets (titre, contenu, date_creation, pseudo) VALUES(?,?,NOW(),?)'); 
    $req->execute(array($_POST['titre'], $_POST['contenu'], $_POST['pseudo'])); 
     
    header('Location: index.php'); 
} 
catch(Exception $e) 
{ 
    die('Erreur : '.$e->getMessage()); 
} 
?> 

Et puis cela ne vient pas de la page d'accueil, car les données sont comme ça sur la BDD. Et puis, cela serait dommage de faire une zone admin, en passant à chaque fois sur phpMyAdmin pour modifier le code, autant le mettre directement dans l'index.php.

Encore désoler pour le dérangement, et je vous remercie d'avoir prit la peine de tout lire.
Cordialement, Julien.

PS : Je code depuis ce matin (7heure de codages environ) donc c'est normale que je commence à désespéré, avec tout les bugs que j'ai pu rencontrer. Mais là, je ne vois vraiment pas.

2 réponses

caphar Messages postés 50 Date d'inscription mardi 15 mars 2011 Statut Membre Dernière intervention 7 septembre 2011 12
Modifié par caphar le 3/04/2011 à 20:26
C'est une histoire d'échappement des caractères spéciaux : guillemets doubles et simples, slashes, etc.

Ton serveur doit avoir les magic quotes activées (ajout automatique d'antislashes lors du POST sur un formulaire), or ton système PDO va lui même échapper une deuxième fois ces caractères, d'où les antislashes qui apparaissent.

La meilleure chose à faire, c'est de désactiver les magic quotes, par exemple en plaçant cette ligne dans un fichier .htaccess à la racine :
php_flag magic_quotes_gpc Off


Source :
https://www.php.net/manual/en/security.magicquotes.disabling.php
1
Merci beaucoup caphar.
0