[php] pb code ignoré

Fermé
Arnaud - 18 janv. 2005 à 12:15
 Utilisateur anonyme - 23 févr. 2006 à 03:04
Bonjour,

J'ai un petit problème, ces lignes de codes sont ignorés dans ma page:

$_POST["message"]=str_replace("\'","\\'",$_POST["message"]);
$_POST["message"]=str_replace("\\\"","¤¤",$_POST["message"]);
$_POST["message"]=str_replace("\n","",$_POST["message"]);

Quelqu'un sait-il pourquoi?

Merci d'avance,

Arnaud
A voir également:

32 réponses

sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
18 janv. 2005 à 14:03
Vu que à mon avis écrire dans le $_POST doit être ignoré, j'aurais plutôt fait:

$message = $_POST["message"]
$message=str_replace("\'","\\'",$message);
$message=str_replace("\\\"","¤¤",$message);
$message=str_replace("\n","",$message);
0
Tout d'abord merci,

J'ai essayé ton code, à savoir:

$message=$_POST["message"];
$message=str_replace("\'","\\'",$message);
$message=str_replace("\\\"","¤¤",$message);
$message=str_replace("\n","",$message);

Mais maintenant, il ne fait plus qu'ignorer ce code, il bloque l'envoie du message s'il contient un de ces caractères. Par contre, ça marche qu'il n'en contient pas.

Arnaud
0
Voci le code actuel dans sa totalité:

<?
session_start ();

if (isset($_SESSION['login']) && isset($_SESSION['pwd']))

include('../Espacemembre/verifsession.php');
include('../Espacemembre/sql_connect.php');

$req=mysql_query("select pseudo from membres where login='$_SESSION[login]'");
$_POST["pseudo"]=mysql_result($req,0,"pseudo");
$req=mysql_query("select prenom from membres where login='$_SESSION[login]'");
$_POST["prenom"]=mysql_result($req,0,"prenom");
$req=mysql_query("select nom from membres where login='$_SESSION[login]'");
$_POST["nom"]=mysql_result($req,0,"nom");

ini_set("sendmail_from","me@localhost.com");

mysql_connect('localhost','root','');
mysql_select_db("arnaudsalley_db");
if (isset($_POST["submit"]))
{
$message=$_POST['message'];
$message=str_replace("\'","\\'",$message);
$message=str_replace("\\\"","¤¤",$message);
$message=str_replace("\n","",$message);
$date=date("Y-m-d H:i:s", time());
mysql_query("INSERT INTO livreor (id, nom, date, message)
VALUES ('','$_POST[pseudo]','$date','$message')");

$entetemail = "MIME-Version: 1.0\r\n";
$entetemail .= "Content-type: text/html; charset=iso-8859-1\r\n";
$entetemail .= "From: LBF Promotion 2002";

mail("webmaster@modeinpress.com","Nouveau message sur le livre d'or",
"


<b>Message de:</b> $_POST[pseudo]
<br><br><b>Date:</b>$date
<br><br><b>Message:</b><br><br> $message
",$entetemail);

echo "
<script LANGUAGE=\"JavaScript\">
parent.bas.location.href='livreormessages.php';
</script>
";
}
?>

personne ne peut m'aider?
merci d'avance,
Arnaud
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
18 janv. 2005 à 17:50
mmmm... désole je ne suis pas un spécialiste du php :-)


Mais tu essai de modifier $_POST.
Or $_POST est fourni par la requête HTTP entrante.
Tu ne dois pas le modifier.
Tu ne peux que le lire (c'est ce que vient du client).
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ben le problème c'est que j'y connais pas grand chose:

Faudrait que je fasse quoi dans ce cas alors?

Arnaud
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
18 janv. 2005 à 18:27
Si tu ne peux pas écrire dans $_POST, écris dans une nouvelle variable.
0
Mais quand j'utilise pas $_post, il me dit UNDEFINED VARIABLE...
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 659
18 janv. 2005 à 20:29
Dans ce cas, définit ta variable:

$mavariable = "toto
0
Moi ça me va... Je veux bien...

Mais de quelle manière? ;-)

Car je ne vois pas comment définir $message...

En tout cas merci...

Arnaud
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
18 janv. 2005 à 20:48
Salut,

Deux trois trucs, j'ai pas tout lu assidûment mais...
D'abord ta première condition (if (isset..........) n'ouvre aucune accolade.
Ensuite les requêtes vers la base de données se font avant la connexion à la base de données dans ton script. La logique voudrait le contraire.
Donc soit ces requêtes sont lancées nulle part, soit tu te reconnectes inutilement....(je pencherais plutôt pour la deuxième option vu que tu inclus une page appelée sqlconnect.php.)

Ensuiote
<b>Message de:</b> $_POST[pseudo] 
est à remplacer par
<b>Message de:</b> $_POST['pseudo'] 
(les guillemets). On retrouve la même erreur un peu au-dessus.

Et pour ton problème plus particulier, tu pourrais écrire:
echo $message;

juste après :
$message=str_replace("\n","",$message); 


...et nous dire ce que ça affiche :-)

PS: Pour $message c'est bon tu as fait comme il fallait.

Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
0
Bonjour,

J'ai remplacé le code. Merci.
En ce qui concerne le echo $message; lorsque je l'inserts j'obtiens le message sur la meme page, en tout debut, sans aucune erreur, mais il ne l'ecrit pas dans la table. Et ce, uniquement lorsqu'il y a un caractère ennoncé dans str_replace. Sinon, ça marche très bien.

C'est grave docteur?

Arnaud
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
19 janv. 2005 à 13:32
Salut,

Ok.
Mais sans la requête, le message s'affiche toujours bien? Et il n'ya pas de problème avec le str_replace? Ca filtre bien?

Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
0
En fait, le message ne s'affiche pas au bon endroit. Il s'affiche sur la meme page que celle ou on ecrit le message, à un endroit ou il ne devrait pas. Mais il s'affiche bien meme si on insert les caractere se trouvant dans str_replace.
Si on n'insert pas ces caracteres, le message s'enregistre correctement dans la table et s'affiche dans la page de reception des messages.

Arnaud
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
19 janv. 2005 à 15:06
Ah c'est bizzare. Le echo $message c'était juste pour tester. Visiblement le problème ne vient pas du filtre.... Je ne sais pas d'où ça vient...

Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
19 janv. 2005 à 15:13
Encore un test:
Ajoute cette ligne :
echo "INSERT INTO livreor (id, nom, date, message) 
VALUES ('','$_POST[pseudo]','$date','$message' <br>";
avant le echo $message;
Puis essaie de reproduire un de ces fameux messages qui ne passent pas dans la base de données (à partir du formulaire d'envoi).

Puis dis moi ce que tu as tapé dans ce formulaire, puis ce qui est affiché à l'ecran après envoi :-)

Li4uLlZvdHJlIGTpdm916SBzZXJ2aXRldXIuLi4u
                
                
0
Bon, j'ai essayé le code. J'ai ensuite fait deux tests: Une première fois avec un caractère dit "à problème". Voici le texte tapé: T'T et voici le message obtenu:


T'TINSERT INTO livreor (id, nom, date, message) VALUES ('','Superman','2005-01-19 14:54:46','T'T'

Le deuxième test, je l'ai fait avec du texte normal: meme message mais ecriture dasn la table.
0
massimo501 Messages postés 37 Date d'inscription jeudi 20 janvier 2005 Statut Membre Dernière intervention 2 janvier 2006 1
21 janv. 2005 à 13:58
1er page : formulaire
<input ... nom ...>

2eme page
$nom=$_POST["nom"]
recupération de ta variable passée par page

si mnt tu veux l'enregistrer en session
(récup par session de tes variables)

il faut savoir 2 choses, la 1er c'est de savoir sur quelle version d'easy php tu es 1.6? 1.7? et la 2eme chose que utilises tu pour enregistrer tes variables de session?

car j'ai utilisé dans le temps la variable session_register("nomvariable"); fonctionnait nickel mais avec la vers easy php1.7 c'est plus le cas , pas d'erreur mais il n'y a rien dans mes variables comme si elles étaient vides!
véçu
-----
ben aucune faute dans le script mais j'arrivais pas à récupérer mes variables de session dans une autre page que celle créée
c a d ds la 1er ok ça fonctionne mais ds la suivante rien , vide

j'ai utilisé à la place de session_register( ) , $_SESSION["session_nom"] pour enregistrer mes variables de session

$session_nom=$_SESSION["session_nom"];

et là ça fonctionne nickel!

fait des echo de tes variables .

voilà
0
Ben écoute, pour te répondre j'utilise easyphp 1,6... Mais je n'ai aucun problème pour récupérer mes variables, mais seulement pôur pouvoir passer certains caractères dans mon formulaire. Mise à part ça (quand les caractères sont absents), le formulaire fonctionne très bien... Tout mon problème est là...

Arnaud
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
22 janv. 2005 à 19:01


Désolé pour la barre de défilement c'est à cause de ma signature. Je l'ai supprimée de mon profil comme ça plus de soucis :-)

Bon pour ton erreur, le problème c'est ta requête:
INSERT INTO livreor (id, nom, date, message) VALUES ('','Superman','2005-01-19 14:54:46','T'T') 


Il ne devrait pas y avoir de guillemet simple qui se balade dans T'T.
Donc il faut que tu rajoutes cette ligne à la fin de tes str_replace():
$message=str_replace("'","\'",$message);


Et si ça ne marche pas, essaie :
$message=str_replace("'","\\'",$message);
0
Utilisateur anonyme
23 févr. 2006 à 02:59
Ou mieux :
$message = str_replace("'","''",$message);

Oui tu peux en mettre 2. On les double en SQL.
0
Beau gosse... C'est tout ce que j'ai à dire...
T'as deuxième ligne à fonctionner...

Faut que je m'occupe du reste maintenant...

Pendant que j'y suis, tu penses quoi du streaming? J'ai quelques videos que je voudrais mettre en ligne sur mon site... C'est une bonne idée ou pas de le mettre en streaming? (Sachant que j'héberge sur mon ordi le site)

En tout cas merci pour tout, une fois de plus!

Arnaud
0