Je ne comprends pas mon affichage

Répondre
jackbocar
le 02/08/2007 à 09:38
jackbocar
Bonjour,

Je ne comprends vraiment rien à ce système de protection "injections QSL".

Lorsque j'envoie des données dans la base avec cet argument :
$commanderie = mysqli_real_escape_string($link, $_POST['commanderie']);


L'affichage donne dans la table donne ceci : L'\\\année, l'\\\autre, l'\\\enfer…

Pour que ces mots échappés, se lisent correctement, je suis obligé de faire ceci :
stripslashes(stripslashes($row[2])),


Et pour les sauts de ligne : <br />. Je dois écrire mes nouvelles sur une seule ligne comme ceci : Bonjour<br />Le phpfacile est un des meilleurs sites sur ce langage de programmation<br />Jack Bocar.

Car, si j'écris comme ceci :
Bonjour
<br />
Le phpfacile est un des meilleurs sites sur ce langage de programmation
<br />
Jack Bocar.

A l'affichage, je vois des "mm" ?

Ou, si j'écris comme ceci :

Bonjour

Le phpfacile est un des meilleurs sites sur ce langage de programmation

Jack Bocar.



Cette fois-ci, je vois des : \n\n.

Puis, j'ai un autre problème, lorsque j'envoie une nouvelle, elle ne s'affiche que lorsque j'envoie la suivante, qui elle bien sûr, attend la suivante pour s'afficher.

<?php
if (isset($_POST['lieu']) && isset($_POST['dep']) && is_numeric($_POST['dep']) && isset($_POST['commanderie']) && isset($_POST['precepteur']) && isset($_POST['visible']) && is_numeric($_POST['visible']) ) {
if ($link = mysqli_connect('localhost', 'jackbocar', 'XXXXXX')) {
mysqli_select_db($link, 'possessions');
$stmt = mysqli_prepare($link, 'INSERT INTO commanderies (lieu, dep, commanderie, precepteur, visible) VALUES (?, ?, ?, ?, ?)');
$lieu = mysqli_real_escape_string($link, $_POST['lieu']);
$dep = intval($_POST['dep']);
$commanderie = nl2br(mysqli_real_escape_string($link, $_POST['commanderie']));
$precepteur = mysqli_real_escape_string($link, $_POST['precepteur']);
$visible = intval($_POST['visible']);
mysqli_stmt_bind_param($stmt, 'sissi', $lieu, $dep, $commanderie, $precepteur, $visible);
if (mysqli_stmt_execute($stmt)) {
echo 'Commanderies saved.';
} else {
echo 'Error d\'&eacute;criture dans la table.<br /><br />';
}
mysqli_close($link);
} else {
echo 'Connection failed.';
}
}
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>">
Lieu : <input type="text" name="lieu" size="30" /><br />
Dep : <input type="text" name="dep" size="2" /><br />
Commanderie <textarea name="commanderie" cols="50" rows="10"></textarea><br />
Preceteur <input type="text" name="precepteur" size="30" /><br />
Visible : <input type="text" name="visible" size="1" value="0" /><br />
<input type="submit" value="Save" />
</form>
</body>
</html>



Merci de vos conseils

Jack Bocar
moogli
le 02/08/2007 à 10:47
moogli
salut,

pour ce qui est des \ en trop je pense que cela est dû aux magic quote !
pour plus d'info lit cet article de Fred Bouchery http://frederic.bouchery.free.fr/?2005/02/22/40-la-magie-noire-des-apostrophes-magiques

le nl2br (et toute transformation en générale) doit être réservé à l'affichage.

quand au retard d'affichage je ne sais pas c'est assez étonnant, peut etre que si tu nous montré le code d'affichage on y verrais plus clair (sur le wall stp)

@+
Il en faut peu pour être heureux !!!!!
LA GLOBULE
le 02/08/2007 à 11:29
LA GLOBULE
Oui, pour les magic_quote, il faut les désactiver avec un ini_set, puis tu fais des mysql_escape_string à l'insertion en base, et la, tu n'auras pas de \ en base, et à l'affichage, tu fais juste un echo, et c'est bon (avec ou non un htmlentities, tout dépend de ce que tu fais).
Et la, tu es secure.

Mais en aucun cas, tu stripslashes.
jackbocar
le 02/08/2007 à 11:57
jackbocar
Bonjour,

Merci de ta réponse.

J'ai trouvé une solution pour supprimer les "mm" qui se placent lors de l'affichage avant les <br /> et après ces même <br />. Dites-moi si cette solution est fiable en ligne ou s'il faut que je recherche une autre solution.

function mot($chaine){
$chaine = str_replace('\r\n','',$chaine);

return $chaine;
}



Je vous donne mon code d'affichage :

<?php
function mot($chaine){
$chaine = str_replace('\r\n','',$chaine);

return $chaine;
}

require_once './_require/connect_db.php';
require_once './_require/function-barre.php';

$query = 'SELECT count(*) FROM commanderies WHERE visible="1"';
if ($result = $mysqli->query($query)) {
$nb_total = $result->fetch_array(MYSQLI_NUM);
if (($nb_total = $nb_total[0]) == 0) {
echo 'Aucune r&eacute;ponse trouv&eacute;e';
}
else {
if (!isset($_GET['debut'])) $_GET['debut'] = 0;
$nb_affichage_par_page = 5;
$query = 'SELECT lieu, dep, commanderie, precepteur FROM commanderies WHERE visible="1" ORDER by ID DESC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_row()) {

echo '<p class="cadre">';
printf(
'<b class="style">%s &nbsp; (%s)</b><br />%s<br /><br />Precpteur (s) : <span class="precepteur">%s</span><br />', stripslashes(stripslashes($row[0])), $row[1], nl2br(stripslashes(stripslashes(mot($row[2])))), stripslashes(stripslashes($row[3])));
echo '</p>';
}
}
$result->close();
}
echo '<span class="gras">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 5).'</span>';
}
$mysqli->close();
?>


Merci de votre aide

Jack Bocar
LA GLOBULE
le 02/08/2007 à 12:11
LA GLOBULE
Il faudrait que tu traites ta base pour virer tous les \ qui n'ont pas lieu d'etre.

Puis utilise ma technique et vire les stripslashes, et ca roulera sans problème.

Pour tes problème de \r\n, tu peux aussi les virer de ta base avec des REPLACE MySQL (pour traiter la base).
jackbocar
le 02/08/2007 à 12:39
jackbocar
Bonjour,

Merci de ta réponse la globule,

dis-moi comment faire, je ne sais pas si ceci est la bonne solution, en faite, avec elle rien ne change :

<?php
function mot($chaine ) {
return (get_magic_quotes_gpc() == 1 ? $chaine : ini_set($chaine));
}
?>


Jack Bocar
LA GLOBULE
le 02/08/2007 à 13:43
LA GLOBULE
perso, je fais un :

ini_set('magic_quotes_gpc', '0');

Au début de tous mes .php (dans un include quoi).
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours