[SQL+PHP] Vérifier base de donnée et formulaire

Mammouth du PHP | 965 Messages

05 mai 2006, 20:39

J'ai fais l'inscription de mon site avec la verrification des champs mais après quelque test je me rend compte qu'il est facile de contourner certains obstacles j'avais par exemple mis :

Code : Tout sélectionner

if($pseudo!="" && $password!="" && $password2!="" && $email!="" && $email2!="")
pour verrifier que les champs ne soit pas vide mais un simple espace suffit a contourner le problème commre pour l'email je ne vois pas comment faire pour obliger a avoir un @ et un .quelquechose.

Pour le reste j'ai fais ca :
<?php

require ("connect.php");

$pseudo=$_POST['pseudo'];
$password=$_POST['password'];
$password2=$_POST['password2'];
$email=$_POST['email'];
$email2=$_POST['email2'];

$ress=mysql_query("SELECT * FROM `art` WHERE nom='$pseudo' or email='$email' ");
$existe=mysql_num_rows($ress);
$chaine_hachee = md5($_POST['pseudo'].$_POST['password'].$_POST['email']);



//On verrifie si les champs son vide
if($pseudo!="" && $password!="" && $password2!="" && $email!="" && $email2!="")
{

		//On verrifie que les mot de passe et email sont bien recopiés
		if($password==$password2 && $email==$email2)
	
		{
			//On verrifie que l'email ou le pseudo n'est pas enregistré
			if(!$existe)
				{
				$sql = "INSERT INTO art (nom,mdp,email) VALUES ('".$pseudo."','".$password."','".$email."')";
				$test = mysql_query($sql) or die("erreur ! ".mysql_error());
				$id = mysql_insert_id();
					$adresse = $email;
					$titre = "Inscription au generateur de son";
					$headers="From: Admin : Generateur de son !\n";
					$message = "Bienvenue !

Votre nom est : ".$pseudo."
Votre pass est : ".$password."

pour vous connecter sur le site et acceder a votre profil vous devez d'abord cliquer sur le lien suivant :
http://localhost/ketalombre/inscrip.php?pseudo=".$pseudo."&cle=".$chaine_hachee;

				mail($adresse,$titre,$message,$headers);
				echo "<br>Votre nom a été ajouté a la base de donnée";

				}else{
					header("location: inscription.php?erreur3");
					}
		}else{
			header("location: inscription.php?erreur2");
			}

}else{
	header("location: inscription.php?erreur1");
	}


?>
et en fait ce qui ne me vas pas du tout sur ce script c'est qu'il manque des verrification sur le formulaire mais surtout ce qui m'ennuie c'est l'envoie de l'email de confirmation.

Il me creer bien le bonhomme dans la BDD mais alors pour envoyer l'email il me marque une erreur PHP suivante :
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\www\verifinscription.php on line 48
alors qu'il confirme a côté donc comment parametrer les email sortant de chez moi puisque le server est hebergé chez moi ?

merci d'avance pour votre aide !!

Mammouth du PHP | 19672 Messages

05 mai 2006, 22:38

Et visiblement tu n'as pas compris ce message qui t'indique clairement quoi vérifier: le paramétrage du serveur SMTP dans ton fichier php.ini. Il y a fort à parier qu'en local, tu n'as pas de serveur SMTP d'installé. Il faut donc pointer vers un serveur existant, habituellement on utilise celui de son FAI : dans ton php.ini, ajuste le serveur SMTP vers ton FAI, par exemple smtp.wanadoo.fr et ça devrait fonctionner tout seul par la suite.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

06 mai 2006, 08:35

Merci pour le conseil je vais essayer ca dès ce soir ;)

En fait j'avais ouvert le port de mon routeur et je ne comprenais pas d'ou venais l'erreur. :oops:

Mammouth du PHP | 19672 Messages

06 mai 2006, 08:39

Dans ton php.ini, cherches ces lignes et adaptes par rapport à tes propres paramètres :

Code : Tout sélectionner

[mail function] ; For Win32 only. SMTP = "smtp.wanadoo.fr" smtp_port = 25
Ceci est ma propre configuration et je n'ai pas touché à la configuration de mon routeur : tout ça fonctionne très bien.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

06 mai 2006, 18:11

j'ai tester en mettant :

Code : Tout sélectionner

[mail function] ; For Win32 only. smtp_port = 25 SMTP = "smtp.free.fr"
Toujours rien j'ai le message suivant :
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\www\verifinscription.php on line 42

Mammouth du PHP | 19672 Messages

06 mai 2006, 18:12

As-tu redémarré le serveur Apache après modification ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Invité
Invité n'ayant pas de compte PHPfrance

06 mai 2006, 19:25

Ah non et ce n'etait pas une mauvaise idée ca me change maintenant le nom du message en :
Warning: mail() [function.mail]: SMTP server response: 501 Bad address syntax in C:\www\verifinscription.php on line 42
donc si je comprends bien le server SMTP me dis qu'il ya une erreur de synthaxe dans le nom a la ligne 42 qui est :
mail($adresse,$titre,$message,$headers);

Mammouth du PHP | 19672 Messages

06 mai 2006, 19:46

Les erreurs :
Erreur 400 Bad Request
la requête est mal formulée.

Erreur 401 Unauthorized
le client ne possède les autorisations d'accès requises.

Erreur 403 Forbidden
la requête est interdite.

Erreur 404 Not Found
l'adresse spécifiée est invalide.

Erreur 500 Internal Error
le serveur n'a pas pu traiter correctement la requête.

Erreur 501 Not Implemented
le serveur ne supporte pas le type de service ou de protocole appelé.

Erreur 503 Gatewa
y Timeout
la réponse du serveur s'est fait trop attendre.
Le problème vient peut-être du numéro du port. Vérifie dans ta configuration de client de courriel au cas où, tu trouveras l'information exacte.

Sinon, ça vient peut-être de ton code d'envoi de courriel, mais il faudrait qu'on en voie un peu plus dans ce qui précède l'appel de la fonction mail().
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

06 mai 2006, 19:48

Voila ce qui précède quand au server je l'ai verrifier c'est bien smtp.free.fr
<?php

require ("connect.php");

$pseudo=$_POST['pseudo'];
$password=$_POST['password'];
$password2=$_POST['password2'];
$email=$_POST['email'];
$email2=$_POST['email2'];

$ress=mysql_query("SELECT * FROM `art` WHERE nom='$pseudo' or email='$email' ");
$existe=mysql_num_rows($ress);
$chaine_hachee = md5($_POST['pseudo'].$_POST['password'].$_POST['email']);



//On verrifie si les champs son vide
if($pseudo!="" && $password!="" && $password2!="" && $email!="" && $email2!="" && $pseudo!=" " && $password!=" " && $password2!=" " && $email!=" " && 

$email2!=" ")
{

		//On verrifie que les mot de passe et email sont bien recopiés
		if($password==$password2 && $email==$email2)
	
		{
			//On verrifie que l'email ou le pseudo n'est pas enregistré
			if(!$existe)
				{
				$sql = "INSERT INTO art (nom,mdp,email) VALUES ('".$pseudo."','".$password."','".$email."')";
				$test = mysql_query($sql) or die("erreur ! ".mysql_error());
				$id = mysql_insert_id();
					$adresse = $email;
					$titre = "Inscription au generateur de son";
					$headers="From: Admin : Generateur de son !\n";
					$message = "Bienvenue !

Votre nom est : ".$pseudo."
Votre pass est : ".$password."

pour vous connecter sur le site et acceder a votre profil vous devez d'abord cliquer sur le lien suivant :
http://localhost/ketalombre/inscrip.php?pseudo=".$pseudo."&cle=".$chaine_hachee;

				mail($adresse,$titre,$message,$headers);
				echo "<br>Votre nom a été ajouté a la base de donnée";

				}else{
					header("location: inscription.php?erreur3");
					}
		}else{
			header("location: inscription.php?erreur2");
			}

}else{
	header("location: inscription.php?erreur1");
	}


?>

Mammouth du PHP | 19672 Messages

06 mai 2006, 20:15

À première vue, je ne vois pas d'erreur flagrante, j'ai quand même un doute sur ton header "From:" sans adresse de retour :-k

Sinon, il mauqerait un test d'erreur et une simplification:
<?php
require ("connect.php");

$pseudo    = $_POST['pseudo'];
$password  = $_POST['password'];
$password2 = $_POST['password2'];
$email     = $_POST['email'];
$email2    = $_POST['email2'];

$ress   = mysql_query("SELECT * FROM `art` WHERE nom='". $pseudo ."' or email='". $email ."' ");
$existe = mysql_num_rows($ress);
$chaine_hachee = md5($_POST['pseudo'].$_POST['password'].$_POST['email']);

//On vérifie si les champs son vide
if($pseudo != "" && $password != "" && $password2 != "" && $email != "" && $email2 != "" && $pseudo != " " && $password != " " && $password2 != " " && $email != " " && $email2 != " ")
{
    //On vérifie que les mot de passe et email sont bien recopiés
    if($password == $password2 && $email == $email2)
    {
        //On vérifie que l'email ou le pseudo n'est pas enregistré
        if(!$existe)
        {
            $sql    = "INSERT INTO art (nom,mdp,email) VALUES ('".$pseudo."','".$password."','".$email."')";
            $test   = mysql_query($sql) or die("erreur ! ".mysql_error());
            $id     = mysql_insert_id();
            $titre    = "Inscription au generateur de son";
            $headers  ="From: Admin : Generateur de son !\n";
            $message  = "Bienvenue !";
            $message .= "Votre nom est : ". $pseudo ." ";
            $message .= "Votre pass est : ".$password." ";

            $message .= "pour vous connecter sur le site et acceder a votre profil vous devez d'abord cliquer sur le lien suivant : ";
            $message .= "http://localhost/ketalombre/inscrip.php?pseudo=". $pseudo ."&cle=". $chaine_hachee;

            if(mail($email, $titre, $message, $headers))
            {
                echo "<br>Votre nom a été ajouté a la base de donnée";
            }
            else
            {
                //..... renvoi vers message d'erreur approprié : la fonction mail a échoué
            }
        }
        else
        {
            header("location: inscription.php?erreur3");
        }
    }
    else
    {
        header("location: inscription.php?erreur2");
    }
}
else
{
    header("location: inscription.php?erreur1");
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

06 mai 2006, 20:21

Oui je peux aussi mettre une erreur de mail mais je ne desire pas la garder par la suite si le code est bien fait il ne devrait pas avoir ce genre de retour.

Donc pour l'instant je chercher a comprendre cette erreur 501 que je ne comprends pas.

J'ai bien reverifier au niveau du routeur le port 25 en TCP est bien redirigé sur ma machine...

Je bloque un peu sur cette fonction mail()

Mammouth du PHP | 19672 Messages

06 mai 2006, 22:10

bon, tu as mal saisi l'histoire du port 25 et du serveur SMTP :

Il n'y a pas de serveur SMTP sur ta machine : le port 25 dans ton cas n'est pas un port qui doit s'ouvrir sur ta machine mais sur la machine où est installé le serveur SMTP, en l'occurence le serveur de free.fr.

En mettant "smtp = "smtp.free.fr" dans ton php.ini, la fonction mail va alors utiliser une connexion au serveur de free.fr pour expédier ton courriel. L'erreur 501 pose problème et je comprends mal le pourquoi de ça. Si ton fournisseur est bien free.fr, ça devrait fonctionner normalement : est-ce que ton client de courriel habituel fonctionne correctement ? (Thunderbird ou Outlook ?)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

06 mai 2006, 22:12

Je n'ai pas de client de courriel et j'aie pas envie d'en installer un jeu gère tout par yahoo mail ...

Donc je peux refermer le port 25 ca ne changera rien.

Quelqu'un a déjà eut le soucis ?

Mammouth du PHP | 19672 Messages

06 mai 2006, 22:22

Quel est le résultat de la modification que j'ai suggéré plus tôt ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 965 Messages

06 mai 2006, 22:24

J'ai essayer avec le code que tu m'as donné mais rien de plus, toujours la même erreur 501 qui reviens.

il m'indique bien que c'est un problème d'adresse donc ca doit venir de php.ini ou alors le server que je choisis n'est pas bon ?