Problème de code php
Résolu/Fermé
A voir également:
- Problème de code php
- Code ascii de a - Guide
- Code puk bloqué - Guide
- Code de déverrouillage oublié - Guide
- Code activation windows 10 - Guide
- Code gta 4 ps4 - Guide
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
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);
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
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:
essayez donc le code suivant:
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:
- 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.
"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.