probleme de validation

Petit nouveau ! | 6 Messages

08 janv. 2008, 11:17

Bonjour à tous,

J'ai un problème avec les car spe entre autre ' . Sans les ' tout vas bien. Je ne trouve pas la solution

voilà mon formulaire :

Code : Tout sélectionner

<form method="post" name="formulaire" action="../toto/" enctype="x-www-form-urlencoded" onSubmit="return validationformulairecomment();"> <input type="hidden" name="_cat" value="Copte" /> <input type="hidden" name="_idart" value="22" /> <h3>Poster un commentaire</h3> <strong>Votre nom : </strong><input type="text" name="_name" /><br /> <strong>Votre Email : </strong><input type="text" name="_mail" /><br /> <strong>Votre Pays : </strong><br /> <select name="_villes"> <option value="France" selected>France</option> <option value="autre">autre</option> </select> <strong>Votre commentaire : </strong> <textarea name="_comm" cols="40" rows="4"></textarea><br /> <input type="submit" name="Submit" value="Envoyer" /> </form>
voila mon code php
<?php
	if(!isset($_GET['page'])){ 	
	$time = date('Y/m/d'); 
   	mysql_query( "INSERT INTO asn_comment ( com_name, com_town, com_mail, com_comment, com_date, com_valid, com_cat, com_idart )
	VALUES ('".$_POST['_name']."','".$_POST['_villes']."','".$_POST['_mail']."','".$_POST['_comm']."','".$time."','0','".$_POST['_cat']."','".$_POST['_idart']."'
	)" ) or error( mysql_error() );
	$newid = mysql_insert_id();
/////////////////////////////
// A MODIFIER SUIVANT BESOINS
/////////////////////////////

	$to = 'toto; //Mail à moi
	$to2 = 'toto; //Mail à moi
	$from = 'From: toto;  // email de l'entete
	$titre = "Nouveau commentaire"; // titre du mail pour l'internaute
			
	// Mail pour l'internaute
	$message = "Un nouveau commentaire\n\n";
	$message .= "De ".$_POST['_name']."\n\n";
	$message .= "Ville : ".$_POST['_villes']."\n\n";
	$message .= "Mail : ".$_POST['_mail']."\n\n";
	$message .= "Commentaire\n\n";
	$message .= "".nl2br($_POST['_comm'])."\n\n";
	$message .= "Lien de validation :\n";
	$message .= "toto?page=valid_comment&id=".$newid."\n\n";
	$message .= "Lien de suppression :\n";
	$message .= "toto?page=supp_comment&id=".$newid."\n\n";
	$message .= "http://www.visite-egypte.com/";
	
/////////////////////////////
//      FIN DES MODIFICATIONS
/////////////////////////////
	mail($to,$titre,$message,$from); 
	mail($to2,$titre,$message,$from); 
		echo '<meta http-equiv="refresh" content="0;URL=?page=validation">'; // REDIRECTION VERS LA PAGE SECURISEE
	}
	if(isset($_GET['page'])){ 	
		if($_GET['page'] == 'validation'){ 
?>
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 janv. 2008, 11:29

Bonjour,

Regarde du côté de:
http://fr.php.net/mysql_real_escape_string
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 353 Messages

08 janv. 2008, 11:31

Ton problème c'est ou?

C'est bien ici :
if(!isset($_GET['page'])){     
    $time = date('Y/m/d'); 
       mysql_query( "INSERT INTO asn_comment ( com_name, com_town, com_mail, com_comment, com_date, com_valid, com_cat, com_idart )
    VALUES ('".$_POST['_name']."','".$_POST['_villes']."','".$_POST['_mail']."','".$_POST['_comm']."','".$time."','0','".$_POST['_cat']."','".$_POST['_idart']."'
    )" ) or error( mysql_error() );
    $newid = mysql_insert_id(); 
déjà je ne peux que te conseiller de traiter tes variables du $_POST.
En général il vaut mieux éviter de manipuler directement du $_POST.

Petit nouveau ! | 6 Messages

08 janv. 2008, 11:32

oui :D

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Petit nouveau ! | 6 Messages

08 janv. 2008, 11:34

comment tu vois le code alors
je suis novice en php

:oops:

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Petit nouveau ! | 6 Messages

08 janv. 2008, 11:49

comment tu vois le code alors
je suis novice en php

:oops:
au fait les magic_quotes sont à off dans mon php.ini

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Eléphant du PHP | 353 Messages

08 janv. 2008, 12:00

comme l'a dit arthur, utilise les mysql_real_escape_string ou un addslashes() basique.

Ton problème est qu'il faut protéger les données que te renvoi post.

Je t'explique.
TU as :
 
 mysql_query( "INSERT INTO asn_comment ( com_name, com_town, com_mail, com_comment, com_date, com_valid, com_cat, com_idart )
    VALUES ('".$_POST['_name']."','".$_POST['_villes']."','".$_POST['_mail']."');
Imagine que l'on ait les valeurs suivantes :
Name => "Bob",
Ville => L'arcueil
Mail => [email protected]

Tu va donc te retrouver àvec ceci : VALUES ('Bob','L'arcueil','[email protected]')
Regarde pour la ville, tu te retrouve donc avec un ' au milieu ce qui te fait planter.
C'est la raison pour laquelle il faut protéger les donnée que tu stocks dans la base. Par exemple en mettant des antislashes ce qui du coup donnerai : VALUES ('Bob','L\'arcueil','[email protected]') et ne ferait plus planter ta requête.

Petit nouveau ! | 6 Messages

08 janv. 2008, 12:13

ça j'ai compris sauf que depuis hier soir j'essaye de coder ça mais je n'y arrive pas je ne trouve pas où et comment je doit rajouter addslashes().

Je sais je suis nul j'y suis depuis hier soir :oops:
c'est en forgeant que l'on devient forgeron

Mammouth du PHP | 1885 Messages

08 janv. 2008, 12:20

As-tu le message de @arthur? Les fonctions mysql_real_escape_string ou mysql_escape_string te seront utiles.

Passe ta variable dans la moulinette de mysql_(real_)escape_string() avant de l'utiliser dans ta requête:
$name = mysql_escape_string($_POST['_name']);
$villes = mysql_escape_string($_POST['_villes']);
$mail = mysql_escape_string($_POST['_mail']);
$comm = mysql_escape_string($_POST['_comm']);
$cat = mysql_escape_string($_POST['_cat']);
$idart = mysql_escape_string($_POST['_idart']);

mysql_query( "INSERT INTO asn_comment ( com_name, com_town, com_mail, com_comment, com_date, com_valid, com_cat, com_idart )
    VALUES ('$name','$villes','$mail','$comm','$time','0','$cat','$idart'
    )" );
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Petit nouveau ! | 6 Messages

08 janv. 2008, 12:58

J'ai touvé j'avais un autre fichier appelé qui contenait les fonction de connection à la base.

J'y ai mis apres
function dbConnect()
	{
	global $dbHost, $dbutilisateur, $dbPasswd, $dbName;
	mysql_connect( $dbHost, $dbutilisateur, $dbPasswd ) or error( mysql_error() );
	mysql_select_db( $dbName );
	}
une fonction avec ton code
	function formulaire ($string){
	$name = mysql_escape_string($_POST['_name']); 
	$villes = mysql_escape_string($_POST['_villes']); 
	$mail = mysql_escape_string($_POST['_mail']); 
	$comm = mysql_escape_string($_POST['_comm']); 
	$cat = mysql_escape_string($_POST['_cat']); 
	$idart = mysql_escape_string($_POST['_idart']); 
	}
et ca marche
Merci
c'est en forgeant que l'on devient forgeron

Eléphant du PHP | 353 Messages

08 janv. 2008, 13:21

Pense à signaler que ton problème a été résolu.