IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

verifier si un enregistrement existe [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 90
    Points : 49
    Points
    49
    Par défaut verifier si un enregistrement existe
    Bonjour, je sais que le sujet a déjà été évoqué mais je suis dans un cas un peu particulier.

    J'ai crée mon formulaire HTML et mon code php dans la même page, pour éviter d'avoir des insertions intempestive il a fallu vérifier que l'on appuyait bien sur le bouton d'envoi du formulaire.

    insersion.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    <html>
    <?php
    $tbl_loc="loc";
    $nom = $_POST['nom'];
    $prenom = $_POST['prenom'];
    $date = $_POST['date'];
     
    if($_POST['ajouter'])
    {
     
    mysql_connect($server, $login, $pass) or die("<p>Acces refusé:  Login ou mot de passe incorrect");
    mysql_select_db($bdd)or die("Impossible de se connecter à la base de données");
    mysql_query("INSERT INTO $contacts (nom,prenom,date)values (NULL,'$nom','$prenom','$date') ")or die(mysql_error ());
     
    }
     
    ?>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" >
     
    <p>
    <font class="label" size="2" face="Arial">Nom:</font><br>
    <input class="controle" type="text" name="nom" size="12" />
    </p>
    <p>
    <font class="label" size="2" face="Arial">prenom:</font><br>
    <input class="controle" type="text" name="prenom" size="12" />
    </p>
    <p>
    <font class="label" size="2" face="Arial">date de naissance:</font><br>
    <input class="controle" type="text" name="date" size="12" />
    </p>
    <button class="positive" type="submit" name="ajouter" value="ajouter">Ajouter</button>
     
    </form>
    mon code pour vérifier si un enregistrement existe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $req = mysql_query("SELECT COUNT(*) AS verif FROM $tbl_loc WHERE nom = '$nom' AND prenom = '$prenom' AND date = '$date' ") or die (mysql_error());
    $donnees = mysql_fetch_array($req);
    $result = ''.$donnees['verif'].'';
    if($donnees['verif'] > 0)
    {
    echo '<font color="red" size="3" face="Arial">Entrée déjà dans la base</font><br>';
    } else {
    echo "ok";
    }
    Mon problème c'est que l'on ne peux pas insérer un "if" dans un autre.
    Donc je suis dans l'impossibilité de vérifier si l'enregistrement que j’insère existe.
    Avez vous une solution?
    Merci

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Mon problème c'est que l'on ne peux pas insérer un "if" dans un autre.
    Pardon ?

    Le plus simple pour éviter de devoir faire une vérification manuelle est de laisser MySQL le faire: avec une clé unique sur un champ par exemple, une insertion ne pourra pas être faite et la requête échouera (on réccupère TRUE ou FALSE dans le cas des requêtes INSERT).

    On peu aussi vouloir écraser un champ existant, pour ça on utilise REPLACE INTO.

    J'ai crée mon formulaire HTML et mon code php dans la même page, pour éviter d'avoir des insertions intempestive il a fallu vérifier que l'on appuyait bien sur le bouton d'envoi du formulaire.
    Pour vérifier que le boutton à bien été cliqué, il suffit de lui mettre un nom et de vérifier sur $_POST ou $_GET qu'on le réccupère. Ce n'est en aucun cas une justification valide pour mélanger du PHP et du HTML.

    Par ailleurs ton code est tout à fait vulnérable aux injection SQL. Je te recommande de sécuriser les données POST avec filter_input et de sécuriser l'insertion au niveau de MySQL avec mysql_real_escape_string.

    Faire mysql_query(...) or die(...) est toléré en débug mais jamais en production, n'oublie pas de les envlever

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 90
    Points : 49
    Points
    49
    Par défaut

    Le plus simple pour éviter de devoir faire une vérification manuelle est de laisser MySQL le faire: avec une clé unique sur un champ par exemple...
    comment?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour, je ne vois pas où est le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?php
    // connexion a la BdD
    	mysql_connect($server, $login, $pass) or die("<p>Acces refusé:  Login ou mot de passe incorrect");
    	mysql_select_db($bdd)or die("Impossible de se connecter à la base de données");
     
    $tbl_loc = 'loc';
     
    // traitement du formulaire
    if($_POST['ajouter'])
    {
    	// recuperation depuis le formulaire
    	$nom = htmlspecialchars(stripslashes(trim($_POST['nom'])));
    	$prenom = htmlspecialchars(stripslashes(trim($_POST['prenom'])));
    	$date = $_POST['date'];
    	// --------------------
    	// on protege d'abord contre les injections SQL
    	$nom = mysql_real_escape_string($nom);
    	$prenom = mysql_real_escape_string($prenom);
    	$date = mysql_real_escape_string($date);
    	// --------------------
    	// on verifie s'il existe deja un enregistrement avec les meme nom - prenom - date
    	$req = mysql_query("SELECT COUNT(*) AS verif FROM $tbl_loc WHERE nom = '".$nom."' AND prenom = '".$prenom."' AND date = '".$date."';") or die (mysql_error());
    	$donnees = mysql_fetch_array($req);
    	if($donnees['verif'] > 0)
    	{
    		// erreur : l'enregistrement existe deja
    		$msg_erreur =  '<font color="red" size="3" face="Arial">Entrée déjà dans la base</font><br>';
    		echo $msg_erreur; // (cet echo peut alors se faire ailleurs dans la page)
    	} else {
    		// OK : on peut effectuer l'enregistrement en BdD
    		mysql_query("INSERT INTO ".$contacts." (nom, prenom, date) values ('".$nom."', '".$prenom."', '".$date."');")or die(mysql_error ());
    	}
    }
    ?>
    Dernière modification par Invité ; 27/07/2011 à 19h39.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. verifier si un enregistrement existe
    Par Devlin111 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/04/2012, 12h55
  2. verifier si un enregistrement existe dans une table
    Par niceen dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 02/04/2008, 21h37
  3. Savoir si un enregistrement existe déjà dans une table?
    Par danje dans le forum Langage SQL
    Réponses: 8
    Dernier message: 20/08/2005, 10h32
  4. TDBlookupcombo et modification d'un enregistrement existant
    Par delphim dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/04/2005, 12h11
  5. Verifier qu'un dossier existe (batch)
    Par kakou dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 08/01/2003, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo