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 :

Savoir si une valeur existe [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Points : 29
    Points
    29
    Par défaut Savoir si une valeur existe
    Bonjour,

    Ayant terminé la partie admin de mon site, il y a une chose à laquelle je n'ai pas penser Ce sont les doublons.

    Explication: Sur une page j'ai 2 listes déroulantes alimentées via la base de données et 1 champ texte.

    Je voudrais savoir comment je peux savoir si l'enregistrement de la valeur du champ text existe déjà?

    J'ai testé quelques pistes sans résultats et j'avoue être perdu...

    Je vous insère quelques lignes de code afin de mieux cerner mon souci ou alors le fichier complet en PJ.

    Merci d'avance,
    Soksabaidee


    L'insert into:

    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
     
    if($erreur == ""){
    	if($_POST['id']==""){
    	//insert my_sql
    		$sql = "
    		INSERT INTO cities (
    		id_district,
    		id_country,
    		name_cities
    		) VALUES (
    		'$id_district',
    		'$id_country',
    		'$name_cities'
    		)
    		";
    }
    Ma condition:

    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
     
    		  else {
    			$sql="UPDATE cities SET
    				  id_district='$id_district',
    				  id_country='$id_country',
    				  name_cities='$name_cities'
    				  WHERE id_cities=" . $_POST['id'];
    		}
     
    		$result = mysql_query($sql);
     
    		if(!$result){
    			$erreur = "probleme_sql : " . "<br />" . $sql . "<br />" . mysql_error();	
    		}// else {
    			//header("location: list_estate.php");	
    		//}
    	}
    } else if(isset($_GET['id']) && $_GET['id']!=""){
    	$sql = "SELECT * FROM district 
    			WHERE id_district=" . $_GET['id'];
    Fichiers attachés Fichiers attachés

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Points : 192
    Points
    192
    Par défaut
    Personnellement, je ferais un SELECT avant ton INSERT. Si le SELECT te renvoie quelque chose c'est que la valeur existe sinon c'est qu'elle n'existe pas.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Points : 29
    Points
    29
    Par défaut
    Comme ceci?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $sql_cities = mysql_query('SELECT name_cities FROM `cities` WHERE email="'.name_cities.'"'); or die('Erreur SQL !'.$sql.' ;
    if(mysql_num_rows($r)>0) { $erreurs[]='Ville déjà existante';
    }

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Points : 192
    Points
    192
    Par défaut
    Oui un truc dans le genre
    sauf que là ton $r faut que tu le remplace par $sql_cities et "email" par "name_cities", si tu veux que ça fonctionne.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Points : 29
    Points
    29
    Par défaut
    Cela va de soit Merci en tout les cas ; je vais tester cela ce soir après une bonne douche

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Points : 29
    Points
    29
    Par défaut
    Bonjour à tous,

    Après avoir mis mon test avant l'insert into; il m'insère un enregistrement déjà existant
    Pourtant voici ce que je fais juste avant mon insert. Quelqu'un aurait une idée?

    Merci d'avance,
    Soksabaidee

    Requête:

    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
     
    if($erreur == ""){
     
    	if($_POST['id']==""){
     
    	$sql_cities = mysql_query('SELECT name_cities FROM cities WHERE name_cities="'.$name_cities.'"'); 
    		if(mysql_num_rows($sql_cities )>0){ 
    			$erreurs[]='Ville déjà existante';
    		}
    	//insert my_sql
    		$sql = "
    		INSERT INTO cities (
    		id_district,
    		id_country,
    		name_cities
    		) VALUES (
    		'$id_district',
    		'$id_country',
    		'$name_cities'
    		)
    		";
    	} else {
    		$sql="UPDATE cities SET
    			  id_district='$id_district',
    			  id_country='$id_country',
    			  name_cities='$name_cities'
    			  WHERE id_cities=" . $_POST['id'];
    		}
    Echo:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO cities ( id_district, id_country, name_cities ) VALUES ( '9', '2', 'Moulins' )

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Points : 192
    Points
    192
    Par défaut
    Tu as oublié de mettre ton INSERT dans un else, donc du coup il s'execute à chaque fois.

    Il faut que tu fasse ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (mysql_num_rows($sql_cities) > 0){
     //traitement quand la ville est déjà en base
    }else{
    INSERT INTO ...
     
    }

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Points : 29
    Points
    29
    Par défaut
    Ok mais là je suis perdu dans ma syntaxe et ma structure

    Voici ce que je mets initialement (sans faire le test de doublons):

    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
     
    if($erreur == ""){
     
    if($_POST['id']==""){
     
    //insert my_sql
    	$sql = "
    	INSERT INTO cities (
    	id_district,
    	id_country,
    	name_cities
    	) VALUES (
    	'$id_district',
    	'$id_country',
    	'$name_cities'
    	)
    	";
    } else {
    	$sql="UPDATE cities SET
    		  id_district='$id_district',
    		  id_country='$id_country',
    		  name_cities='$name_cities'
    		  WHERE id_cities=" . $_POST['id'];
    }

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Points : 192
    Points
    192
    Par défaut
    Normalement tu as juste à faire ça :

    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
    if($erreur == ""){
    
    $sql_cities = mysql_query("SELECT ...");
     
    if(($_POST['id']=="") && (mysql_num_rows($sql_cities) == 0)){
     
    //S'il y a quelque chose dans id et si la ville est pas en base
    //insert my_sql
    	$sql = "
    	INSERT INTO cities (
    	id_district,
    	id_country,
    	name_cities
    	) VALUES (
    	'$id_district',
    	'$id_country',
    	'$name_cities'
    	)
    	";
    } else {
    	$sql="UPDATE cities SET
    		  id_district='$id_district',
    		  id_country='$id_country',
    		  name_cities='$name_cities'
    		  WHERE id_cities=" . $_POST['id'];
    }

  10. #10
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Points : 29
    Points
    29
    Par défaut
    Il me dit que j'ai une erreur de syntaxe. Or je pense que cela est correct non?

    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
     
    $sql_cities = mysql_query('SELECT name_cities FROM cities WHERE name_cities="'.$name_cities.'"');
     
    if(($_POST['id']=="") && (mysql_num_rows($sql_cities) == 0)){
     
    //insert my_sql
    	$sql = "
    	INSERT INTO cities (
    	id_district,
    	id_country,
    	name_cities
    	) VALUES (
    	'$id_district',
    	'$id_country',
    	'$name_cities'
    	)
    	";

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Points : 192
    Points
    192
    Par défaut
    Il te met quoi exactement comme message d'erreur ?

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Points : 29
    Points
    29
    Par défaut
    Il me mets ceci et je ne pige pas:

    UPDATE cities SET id_district='13', id_country='2', name_cities='Aubenas' WHERE id_cities= probleme_sql :
    UPDATE cities SET id_district='13', id_country='2', name_cities='Aubenas' WHERE id_cities=
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Points : 192
    Points
    192
    Par défaut
    Autant pour moi c'est de ma faute. ^^

    Donc on dit que tu insère en base si l'id n'est pas renseigné et si la ville n'existe pas déjà, et que tu veux modifier, si l'id est renseigné que la ville existe déjà ou non.

    Donc il faut que tu inverse ta condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (($_POST['id'] != "") || (($_POST['id'] == "") && (mysql_num_rows($sql_cities) > 0)){
     //Là tu fais ton update si l'id est renseigné ou que l'id est vide mais que la ville existe
    }else{
    //Là tu fais ton insert donc si l'id est vide && que la ville n'existe pas encore.
    }
    je dois avouer que je commence un peu à m'y perdre également lol.
    j'espère que ce sera bon ^^

  14. #14
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Points : 29
    Points
    29
    Par défaut
    J'essaie et te dis quoi ;-) c'est la dernière chose que je dois faire pour mon examen et c'est clôturé !

  15. #15
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Points : 29
    Points
    29
    Par défaut
    Toujours la même erreur .... J'en perds mon latin... Et je ne sais pas comment m'y prendre

    Code d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE cities SET id_district='13', id_country='2', name_cities='Aubenas' WHERE id_cities= probleme_sql : 
    UPDATE cities SET id_district='13', id_country='2', name_cities='Aubenas' WHERE id_cities=
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5
    Mon Code:

    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
    36
    37
    38
    39
    40
    41
    42
     
    if(isset($_POST['button'])){
     
    	$erreur = "";
     
    	if($_POST['name_cities']==""){
    		$erreur .= "<p class='erreur'>Champ dpt vide</p>"	;
    	} else {
    		$name_cities = $_POST['name_cities'];	
    	}
     
    	$id_district = $_POST['id_district'];
    	$id_country = $_POST['id_country'];
    	$id = $_POST["id"];
    	$sql_cities = mysql_query('SELECT name_cities FROM cities WHERE name_cities="'.$name_cities.'"');
     
     
    	if($erreur == ""){
     
    	if(($_POST['id']=="") || ($_POST['id'] != "") && (mysql_num_rows($sql_cities) > 0)){
     
     
    		$sql="UPDATE cities SET
    			  id_district='$id_district',
    			  id_country='$id_country',
    			  name_cities='$name_cities'
    			  WHERE id_cities=" . $_POST['id'];
     
     
    	} else {
    		$sql = "
    		INSERT INTO cities (
    		id_district,
    		id_country,
    		name_cities
    		) VALUES (
    		'$id_district',
    		'$id_country',
    		'$name_cities'
    		)
    		";
    	}

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Points : 192
    Points
    192
    Par défaut
    le problème vient du faire que la méthode Update s'exécute alors que $_POST['id'] est vide.

    Alors je te propose une autre solution qui j'espère va marcher celle là

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    if(isset($_POST['button'])){
     
    	$erreur = "";
     
    	if($_POST['name_cities']==""){
    		$erreur .= "<p class='erreur'>Champ dpt vide</p>"	;
    	} else {
    		$name_cities = $_POST['name_cities'];	
    	}
     
    	$id_district = $_POST['id_district'];
    	$id_country = $_POST['id_country'];
    	$id = $_POST["id"];
    	$sql_cities = mysql_query('SELECT name_cities FROM cities WHERE name_cities="'.$name_cities.'"');
     
     
    	if($erreur == ""){
     
    	if($_POST['id']!=""){
                    //Si l'id est renseigné tu modifie par l'id
    		$sql="UPDATE cities SET
    			  id_district='$id_district',
    			  id_country='$id_country',
    			  name_cities='$name_cities'
    			  WHERE id_cities=" . $_POST['id'];
     
    	}else if (mysql_num_rows($sql_cities) > 0){
                    //Si la ville existe tu modifie par le nom de ville
                    $sql="UPDATE cities SET
    			  id_district='$id_district',
    			  id_country='$id_country'			  
    			  WHERE name_cities='" . $name_cities."'";
    	} else {
                    //Sinon on insére. Donc on insère si l'id n'est pas renseigné et si la ville n'existe pas
    		$sql = "
    		INSERT INTO cities (
    		id_district,
    		id_country,
    		name_cities
    		) VALUES (
    		'$id_district',
    		'$id_country',
    		'$name_cities'
    		)
    		";
    	}

  17. #17
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Points : 192
    Points
    192
    Par défaut
    Dans la solution précédente j'ai supposé que tu modifier les infos en BD lorsque la ville existait déjà.

    Mais si tu ne veux rien faire lorsqu'elle existe déjà, la solution est celle-ci :

    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
    36
    37
    38
    39
    40
    if(isset($_POST['button'])){
     
    	$erreur = "";
     
    	if($_POST['name_cities']==""){
    		$erreur .= "<p class='erreur'>Champ dpt vide</p>"	;
    	} else {
    		$name_cities = $_POST['name_cities'];	
    	}
     
    	$id_district = $_POST['id_district'];
    	$id_country = $_POST['id_country'];
    	$id = $_POST["id"];
    	$sql_cities = mysql_query('SELECT name_cities FROM cities WHERE name_cities="'.$name_cities.'"');
     
     
    	if($erreur == ""){
     
    	if($_POST['id']!=""){
                    //Si l'id est renseigné tu modifie par l'id
    		$sql="UPDATE cities SET
    			  id_district='$id_district',
    			  id_country='$id_country',
    			  name_cities='$name_cities'
    			  WHERE id_cities=" . $_POST['id'];
     
    	} else if (mysql_num_rows($sql_cities) == 0){{
                    //Sinon on insére. Donc on insère si l'id n'est pas renseigné et si la ville n'existe pas
    		$sql = "
    		INSERT INTO cities (
    		id_district,
    		id_country,
    		name_cities
    		) VALUES (
    		'$id_district',
    		'$id_country',
    		'$name_cities'
    		)
    		";
    	}

  18. #18
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Points : 29
    Points
    29
    Par défaut
    Toujours la même erreur

    Je joins mon fiche afin d'avoir peut être une meilleure visibilité
    Fichiers attachés Fichiers attachés

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Août 2007
    Messages : 156
    Points : 192
    Points
    192
    Par défaut
    Tu as mis
    alors que c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($_POST['id'] != "")
    Ce n'est que lorsque ton id est renseigné que tu veux faire l'UPDATE.

  20. #20
    Nouveau membre du Club
    Inscrit en
    Mai 2010
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 69
    Points : 29
    Points
    29
    Par défaut
    Super ;-) Cela fonctionne PARFAITEMENT

    Un grand merci pour le coup de main !

    Je clôture le sujet

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Tester la base pour savoir si une valeur existe
    Par adrien.gendre dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/07/2007, 17h27
  2. comment savoir si une table existe dans la base?
    Par isa21493 dans le forum ASP
    Réponses: 6
    Dernier message: 01/09/2005, 17h09
  3. Tester qu'une valeur existe dans une "liste"
    Par Oluha dans le forum Langage
    Réponses: 12
    Dernier message: 04/08/2005, 23h01
  4. Savoir si une table existe
    Par Sydaze dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/06/2005, 11h22
  5. [URL] Comment savoir si une URL existe?
    Par jse dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 07/10/2004, 15h33

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