[php] pb code ignoré

Arnaud -  
 Utilisateur anonyme -
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   Statut Modérateur Dernière intervention   15 662
 
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
Arnaud
 
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
Arnaud
 
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   Statut Modérateur Dernière intervention   15 662
 
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
Arnaud
 
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   Statut Modérateur Dernière intervention   15 662
 
Si tu ne peux pas écrire dans $_POST, écris dans une nouvelle variable.
0
Arnaud
 
Mais quand j'utilise pas $_post, il me dit UNDEFINED VARIABLE...
0
sebsauvage Messages postés 32893 Date d'inscription   Statut Modérateur Dernière intervention   15 662
 
Dans ce cas, définit ta variable:

$mavariable = "toto
0
Arnaud
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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
Arnaud
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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
Arnaud
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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
Arnaud
 
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   Statut Membre Dernière intervention   1
 
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
Arnaud
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 


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
 
Ou mieux :
$message = str_replace("'","''",$message);

Oui tu peux en mettre 2. On les double en SQL.
0
Arnaud
 
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