Problème de code php

Résolu/Fermé
Julien - 22 sept. 2010 à 21:40
 Julien - 23 sept. 2010 à 17:51
Bonjour,

Voilà, j'ai un petit problème, toutes les parties de mon code fonctionnent sauf une: la partie des champs manquant: quand les champs ne sont pas remplis, le message d'erreur s'affiche bien mais le reste des infos sont quand même envoyés à ma BDD.
Voici le code: (partie défectueuse soulignée)

<?php
// Paramètres persos
$host = "localhost"; // hébergeur
$user = "*******"; // utilisateur
$pass = "*******"; // mot de passe
$bdd = "ancestra_other"; // nom de la BDD
// connexion
@mysql_connect($host,$user,$pass)
or die("Service temporairement inaccessible. Veuillez le signaler à l'administrateur général");
@mysql_select_db("$bdd")
or die("Service temporairement inaccessible. Veuillez le signaler à l'administrateur général");
// récupérer les champs
if(isset($_POST['nom'])) $nom=$_POST['nom'];
else $nom="";

if(isset($_POST['pass'])) $pass=$_POST['pass'];
else $pass="";

if(isset($_POST['classe'])) $classe=$_POST['classe'];
else $classe="";

if(isset($_POST['serveur'])) $serveur=$_POST['serveur'];
else $serveur="";
// On vérifie si les champs sont vides

if(empty($nom) OR empty($pass))
{
echo '<font color="red">Veuillez remplir tous les champs.</font>';
}


// on regarde si l'info existe déjà
$sql = "SELECT id FROM service_classe WHERE nom='$nom'";
$req = mysql_query($sql) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql.'<br>'.mysql_error());

// on compte le nombre de résultats
$res = mysql_num_rows($req);

if($res!=0) // l'info existe déjà, on affiche un message d'erreur
{
echo '<center><font color="red">Vous avez déjà validé ce service avec ce compte, veuillez attendre une semaine avant de pouvoir l\'activer de nouveau.</font></center>';
}
// on vérifie si l'utilisateur existe
$sql2 = "SELECT guid FROM accounts WHERE account='$nom'";
$req2 = mysql_query($sql2) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql2.'<br>'.mysql_error());

// on compte le nombre de résultats
$res2 = mysql_num_rows($req2);

if($res2!=1) // l'utilisateur n'existe pas, on affiche un message d'erreur
{
echo '<center><font color="red">Ce nom de compte n\'existe pas!</font></center>';
}
// on vérifie si le mot de passe existe
$sql3 = "SELECT guid FROM accounts WHERE pass='$pass'";
$req3 = mysql_query($sql3) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql3.'<br>'.mysql_error());

// on compte le nombre de résultats
$res3 = mysql_num_rows($req3);

if($res3!=1) // le mot de passe n'existe pas, on affiche un message d'erreur
{
echo '<center><font color="red">Ce mot de passe n\'existe pas!</font></center>';
}
// Aucun champ n'est vide, on peut enregistrer dans la table
else
{
// Requete d'insertion MYSQL
$requete = "INSERT INTO service_classe (id, nom, pass, classe, serveur) VALUES ('','$nom','$pass','$classe','$serveur')";

// on insère les informations du formulaire dans la table
mysql_query($requete) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql.'<br>'.mysql_error());

// on affiche le résultat pour le visiteur
echo "Vos infos on été ajoutées.";
}



?>

Merci d'avance pour votre aide,

Julien

A voir également:

3 réponses

ktm620enduro Messages postés 293 Date d'inscription mardi 21 septembre 2010 Statut Membre Dernière intervention 12 mars 2013 38
23 sept. 2010 à 02:20
oui car entrer la chaine vide ne suffit par a supprimer une variable, il faut utiliser la fonction
unset($nom);
0
kadeh Messages postés 334 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 15 novembre 2012 92
Modifié par kadeh le 23/09/2010 à 03:06
Bonjour,

"quand les champs ne sont pas remplis, le message d'erreur s'affiche bien mais le reste des infos sont quand même envoyés à ma BDD"
parce que selon votre code, l'insertion des données dans la base est indépendante de votre test sur le remplissage des champs.
il faut que vous procéder de la manière suivante:

if(champs vides) { 
 // message d'erreur 
} 
else { 
 // les sont champs sont remplis, insertion des données dans la BDD 
}

essayez donc le code suivant:

<?php 
// Paramètres persos 
$host = "localhost"; // hébergeur 
$user = "*******"; // utilisateur 
$pass = "*******"; // mot de passe 
$bdd = "ancestra_other"; // nom de la BDD 
// connexion 
@mysql_connect($host,$user,$pass) 
or die("Service temporairement inaccessible. Veuillez le signaler à l'administrateur général"); 
@mysql_select_db("$bdd") 
or die("Service temporairement inaccessible. Veuillez le signaler à l'administrateur général"); 
// récupérer les champs 
if(isset($_POST['nom'])) $nom=$_POST['nom']; 
else $nom=""; 
if(isset($_POST['pass'])) $pass=$_POST['pass']; 
else $pass=""; 
if(isset($_POST['classe'])) $classe=$_POST['classe']; 
else $classe=""; 
if(isset($_POST['serveur'])) $serveur=$_POST['serveur']; 
else $serveur=""; 

// On vérifie si les champs sont vides 
if(empty($nom) OR empty($pass)) 
{ // champs vides => message d'erreur 
 echo '<font color="red">Veuillez remplir tous les champs.</font>'; 
} 
else 
{ // les champs ne sont pas vides => on regarde si l'info existe déjà 
  $sql = "SELECT id FROM service_classe WHERE nom='$nom'"; 
  $req = mysql_query($sql) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql.'<br>'.mysql_error()); 
  // on compte le nombre de résultats 
  $res = mysql_num_rows($req); 
  if($res!=0) 
  { // l'info existe déjà, on affiche un message d'erreur 
   echo '<center><font color="red">Vous avez déjà validé ce service avec ce compte, veuillez attendre une semaine avant de pouvoir l\'activer de nouveau.</font></center>'; 
  } 
  else 
  { // on vérifie si l'utilisateur existe 
   $sql2 = "SELECT guid FROM accounts WHERE account='$nom'"; 
   $req2 = mysql_query($sql2) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql2.'<br>'.mysql_error()); 
   // on compte le nombre de résultats 
   $res2 = mysql_num_rows($req2); 
   if($res2!=1) 
   { // l'utilisateur n'existe pas, on affiche un message d'erreur 
 echo '<center><font color="red">Ce nom de compte n\'existe pas!</font></center>'; 
   } 
   else 
   { // on vérifie si le mot de passe existe 
    $sql3 = "SELECT guid FROM accounts WHERE pass='$pass'"; 
    $req3 = mysql_query($sql3) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql3.'<br>'.mysql_error()); 
    // on compte le nombre de résultats 
    $res3 = mysql_num_rows($req3); 
    if($res3!=1) 
    { // le mot de passe n'existe pas, on affiche un message d'erreur 
     echo '<center><font color="red">Ce mot de passe n\'existe pas!</font></center>'; 
    } 
    else 
    { // Aucun champ n'est vide, => Requête d'insertion MYSQL 
     $requete = "INSERT INTO service_classe (id, nom, pass, classe, serveur) VALUES ('','$nom','$pass','$classe','$serveur')"; 
     // on insère les informations du formulaire dans la table 
     mysql_query($requete) or die('Erreur SQL, veuillez prévenir l\'administrateur de ce bug.'.$sql.'<br>'.mysql_error()); 
     // on affiche le résultat pour le visiteur 
     echo "Vos infos on été ajoutées."; 
    } 
  } 
 } 
} 
?> 

Remarque:
- vous testez le compte et le mot de passe indépendamment, donc si le mot de passe existe, comment vous savez qu'il correspond à ce compte. je pense qu'il vaut mieux faire:
$sql = "SELECT guid FROM accounts WHERE account='$nom' AND pass='$pass'";

- code mal sécurisé, faites attention aux injections sql, il faut traiter les données avant de les utiliser dans les requêtes.

bonne chance.
0
Merci à vous, mon problème est résolu.
Pour ce qui est de la sécurité, je n'allais pas l'oublié, je test juste les fonctionnalités de mon code petit à petit, car je ne suis pas vraiment un pro en php ^^
0