Hum .... ^^
- Qui moi? Mes chevilles? ^^ Nan.... Jamais!!
Les champs marqués %s doivent être remplis avant d'envoyer ce formulaire.
Vous n'êtes pas identifié. Veuillez vous connecter ou vous inscrire.
lesCigales.ORG - Hébergement gratuit sans publicité » Programmation » [PHP] Retour à la ligne » Ecrire une réponse
Les champs marqués %s doivent être remplis avant d'envoyer ce formulaire.
Hum .... ^^
- Qui moi? Mes chevilles? ^^ Nan.... Jamais!!
Mais bien sûr que toad avait raison, qui en doutait ?
C'est bon, problème résolu, Toad avait raison c'est ce mysql_real_escape_ le fautif.
Voilà mon code final:
if (isset($_POST['pseudo']) AND isset($_POST['message']))
{
$heur = date('H') + 1;
$date = date('d/m/y à ') . $heur . date(':i');
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$message = mysql_real_escape_string(nl2br(htmlspecialchars($_POST['message'])));
mysql_query("INSERT INTO livredor VALUES('', '" . $pseudo . "', '" . $message . "', '" . $date . "')");
}
Merci à tous de m'avoir aidé! Maintenant j'ai un livre d'or sans bug!!
J'espère que cette erreur bête pourra aider certains qui ont le même problème.
Bonne fin de soirée à tous!!
essaye ca
$heur = date('H') + 1;
$date = date('d/m/y à ') . $heur . date(':i');
$pseudo = mysql_real_escape_string($_POST['pseudo']);
$message = mysql_real_escape_string($_POST['message']);
mysql_query("INSERT INTO livredor VALUES('', '" . $pseudo . "', '" . $message . "', '" . $date . "')");
}
et pour les afficher
echo htmlspecialchars(stripslashes[message]);
Pour toad: Tu voudrais dire que je doit mettre le nl2br avant le mysql_real_escape_.. ?
ex: $message = mysql_real_escape_string(nl2br(htmlspecialchars($_POST['message'])));
Pour Infobarquee:
if (isset($_POST['pseudo']) AND isset($_POST['message']))
{
$heur = date('H') + 1;
$date = date('d/m/y à ') . $heur . date(':i');
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
$message = nl2br($message);
mysql_query("INSERT INTO livredor VALUES('', '" . $pseudo . "', '" . $message . "', '" . $date . "')");
}
Pour les curieux, voilà la liste des caractères échappés par mysql:
switch (*from) {
case 0: /* Must be escaped for 'mysql' */
escape= '0';
break;
case '\n': /* Must be escaped for logs */
escape= 'n';
break;
case '\r':
escape= 'r';
break;
case '\\':
escape= '\\';
break;
case '\'':
escape= '\'';
break;
case '"': /* Better safe than sorry */
escape= '"';
break;
case '\032': /* This gives problems on Win32 */
escape= 'Z';
break;
}
bonjour,
tu pourrais montrer ton code et dire aussi le type de champs dans ta bdd.
Toad m'a devancé
Je viens de faire des tests et c'est mysql_real_escape_string() qui escape également les \n, tu peux soit l'appeler au dernier moment (comme il se doit), avant de faire une injection sql et ca marchera, soit laisser tel quel et faire la conversion lors de l'affichage:
Première méthode:
$message = nl2br(htmlspecialchars($_POST['message']));
Seconde méthode:
Je ne t'en veux pas d'avoir poster apres mon post.
Mais il ne m'affiche toujours pas les retours à la ligne. Essayez par vous même : http://mtdev.lescigales.org/livredor.php (vous pouvez faire des test je les supprimerais avec le mysql.)
foreach ($_POST as $name => $value) {
$_POST[$name]=mysql_escape_string($value);
}
Simple, efficace et... sûre.
Oui, exactement, alors pourquoi parler de l'insertion dans une base de données ?
Parce que je sais très bien que tu aurais relevé la chose ou qu'elle aurait été demandé.
@ Eric2A
Non je ne le prends pas mal du tout
voilà mon code que j'ai adapté pour ici, il vaut ce qu'il vaut
if ($_POST) {
foreach ($_POST as $name => $value) {
$_POST[$name]=mysql_escape_string($value);
}
$err=check();
if($err) {
echo "<font color='red'>";
for ($i=0;$i<sizeof($err);$i++) {
echo $err[$i]."<br>";
}
}
else {
$query="INSERT INTO `livredor` (`date`,`text`) VALUES (NOW(),'".$_POST['text']."')";
mysql_query($query) or die(mysql_error());
echo "<meta http-equiv='refresh' content='0; url=livredor.php'>";
exit();
}
}function check() {
global $path,$id;
$err=Array();if (!$_POST['text']) $err[sizeof($err)]="Veuillez entrer un texte";
return $err;
}
Infobarquee et Toad, je vais vous faire encore rire...
Mattrix, je ne vois pas d'où peux venir ton problême, vu que ton code est bon.
Désolé !
La prochaine fois, je participerais quand je serais sûr d'avoir la solution.
@ Infobarquee :
J'éspère que tu n'as pas pris mal que je parle de sécurité après ton post.
Pour répondre à eric, enfait je veux que dans la base de donné mysql il enregistre les enter sous la forme <br> pour que quand je fasse un petit echo en bas de la page il me mette les retours à la ligne. hors mon nl2br() me les enregistres sous la forme \r\n et donc le html ne les transforme pas en retour à la ligne.
Mon php (partiel):
<?php
$pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo']));
$message = mysql_real_escape_string(htmlspecialchars($_POST['message']));
$message = nl2br($message);
?>
Oui, exactement, alors pourquoi parler de l'insertion dans une base de données ?
Mea culpa, pfff
la prochaine fois je mettrais tout mon script, et puis quoi encore?
on demande pour le retour chariot, pas pour la sécurité, non?
lesCigales.ORG - Hébergement gratuit sans publicité » Programmation » [PHP] Retour à la ligne » Ecrire une réponse