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

Langage PHP Discussion :

mysql mais pas avec PHP


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 252
    Par défaut mysql mais pas avec PHP
    Bonjour,

    j'ai le code PHP suivant:

    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
    <?php
     
    if (empty($errors)){
    	$uid=6;
    	$in=$trimmed['itemname'];
    	$pdf=$trimmed['pdft'];
    	$is=$trimmed['istatus'];
    	$ides=$trimmed['itemdescription'];
    	$set='setup 1';
    	$creation='Submitted';
     
    	// Make sure the Item Name is available:
    	$q = "SELECT Item_ID FROM items WHERE Item_name='$in'";
    	$r = mysqli_query ($dbc, $q); 
     
    	if (mysqli_num_rows($r) == 0) { // Available.
    		$q="INSERT INTO items (Item_name, Item_description, Item_status_ID, Setup, User_ID, Team_ID, CreationDate, UpdateDate, Creation) VALUES ('$in', '$ides', '$is', '$set', $uid, $pdf, NOW(), NULL, '$creation')";
    		$r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));
     
    		if (mysqli_affected_rows($dbc) == 1) { // If it ran OK.
     
     			$q1 = "SELECT Item_ID FROM items WHERE Item_name='$in' LIMIT 1";
    			$r1 = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));
     
    				if (mysqli_num_rows($r1) == 1) {
    					$item=mysqli_fetch_array($r, MYSQLI_NUM);
    					$itemID=$item[0];
     
    					$_SESSION['success_item']='The item has been added in the system';
     
    					$url = absolute_url ('listofitems.php');
    					header("Location: $url");
    					exit();
    					mysqli_close($dbc);
     
    				}
    		} else { //Not OK
    			echo '<p class="error">You could not enter your item due to a system error. We apologize for any inconvenience.</p>';
    		}
    	}
    	else { // The Item Name is not available.
    		echo '<p class="error">That Item Name has already been registered.</p>';
    	}
    }
    ?>
    ce code doit:

    - verifier si le ITEM NAME est disponible
    - si OUI, alors inserer le nouvel ITEM NAME
    - et ainsi recuperer l'ID de ce nouvel ITEM NAME
    mais voila quand je le teste j'ai une erreur:

    An error occurred in script 'D:\wamp\www\PHP-TESTS\dbvalidation.php' on line 23: Query: INSERT INTO items (Item_name, Item_description, Item_status_ID, Setup, User_ID, Team_ID, CreationDate, UpdateDate, Creation) VALUES ('item4', 'item4 description', '2', 'setup 1', 6, 5, NOW(), NULL, 'Submitted')
    MySQL Error: Duplicate entry 'item4' for key 'Item_name'

    ....

    [q] => INSERT INTO items (Item_name, Item_description, Item_status_ID, Setup, User_ID, Team_ID, CreationDate, UpdateDate, Creation) VALUES ('item4', 'item4 description', '2', 'setup 1', 6, 5, NOW(), NULL, 'Submitted')
    [r] => 1
    [q1] => SELECT Item_ID FROM items WHERE Item_name='item4' LIMIT 1
    [r1] =>
    Je vois que j'ai pas de resultat dans r1 et je ne comprends pas pourquoi. Puisque quand je teste les requetes directement dasn MySQL:

    [q] => INSERT INTO items (Item_name, Item_description, Item_status_ID, Setup, User_ID, Team_ID, CreationDate, UpdateDate, Creation) VALUES ('item4', 'item4 description', '2', 'setup 1', 6, 5, NOW(), NULL, 'Submitted')
    [q1] => SELECT Item_ID FROM items WHERE Item_name='item4' LIMIT 1
    Je recois comment Item_ID: 24

    Pourquoi est ce que avec PHP ca plante?

    Merci d'avance.

    Billy

  2. #2
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    L'erreur de MYSQL est clairement marquée dans ton message :
    MySQL Error: Duplicate entry 'item4' for key 'Item_name'
    en gros elle te dit que tu n'as pas le droit d'insérer item4 en clé parce que ca existe déjà (tu as du mettre plusieurs fois le meme nom?)

    Vu que tu essaies de vérifier si l'item existe deja AVANT d'essayer de l'insérer il est possible que ce soit ta première requete qui échoue.
    essaie de rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $q = "SELECT Item_ID FROM items WHERE Item_name='$in'";
    $r = mysqli_query ($dbc, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($dbc));
    Pour t'assurer que la requête qui vérifie la présence de l'item n'échoue pas

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    252
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 252
    Par défaut
    Merci

  4. #4
    Membre émérite Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Par défaut
    ce code doit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    - verifier si le ITEM NAME est disponible
    - si OUI, alors inserer le nouvel ITEM NAME
    - et ainsi recuperer l'ID de ce nouvel ITEM NAME
    Salut
    Ton code semble contradictoire à ce que tu souhaites.
    Ou bien je n'ai pas pigé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (mysqli_num_rows($r) == 0) { // Available.
    		$q="INSERT INTO items (Item_name,............
    Parce que là, ton code donne une méthode inverse, en l'occurence:
    Si "NON", alors inserer un nouvel ITEM NAME.

  5. #5
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonsoir,
    Citation Envoyé par alain31tl Voir le message
    Parce que là, ton code donne une méthode inverse, en l'occurence:
    Si "NON", alors inserer un nouvel ITEM NAME.
    Non c'est bien çà, il faut répondre NON à la question "ITEM NAME est disponible ?". La réponse est bien OUI si le nombre de lignes renvoyées par mysql pour la recherche de cet ITEM NAME est de 0.

    Aussi, la personne qui a le souci n'a pas rajouté le code donné par koopajah au bon endroit.

    Pour finir, tu peux simplement récupérer l'ID par avec mysqli_insert_id.

  6. #6
    Membre émérite Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Par défaut
    Citation Envoyé par ThomasR Voir le message

    Non c'est bien çà, il faut répondre NON à la question "ITEM NAME est disponible ?". La réponse est bien OUI si le nombre de lignes renvoyées par mysql pour la recherche de cet ITEM NAME est de 0.
    Je comprends pas là.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (mysqli_num_rows($r) == 0) { // Available.
    		$q="INSERT INTO items (Item_name,............
    Si je traduis cette requête :

    Si ITEM NAME n'existe pas, on procéde à une insertion

    Ce qui est contradictoire à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ce code doit:
     
    - verifier si le ITEM NAME est disponible
    - si OUI, alors inserer le nouvel ITEM NAME

  7. #7
    Membre Expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Par défaut
    Voyez le autrement : l'utilisateur veut s'inscrire au site, il a besoin de savoir si son login est disponible ou pas => savoir si quelqu'un d'autre la déjà pris avant !

    Si l'item n'existe pas dans la base, alors il est disponible, ca correspond a un nom, pas a une disponibilité de stocks.

    Le probleme est résolu ce qui montre bien que vous aviez mal compris.

  8. #8
    Membre émérite Avatar de alain31tl
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 935
    Par défaut
    Citation Envoyé par koopajah Voir le message
    Voyez le autrement... ...
    ...pas a une disponibilité de stocks.
    C'est clair, j'étais parti sur une philosophie plus classique.

    Désolé.

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

Discussions similaires

  1. [MySQL] Problème Proc Stockée, s'éxecute sous PhpMyAdmin mais pas avec PHP
    Par toham dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 07/02/2012, 16h55
  2. [MySQL] Requete qui fonction sous PhpMyAdmin mais pas avec PHP
    Par lorentdups dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 09/09/2011, 20h35
  3. [MySQL] requête fonctionne sur mysql mais pas en php
    Par clanou01 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/07/2011, 15h49
  4. connection avec mysql mais pas avec mysqli
    Par paragoge dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2009, 23h09
  5. Session ok avec PHP 5 mais pas avec PHP 6
    Par ceweb dans le forum Langage
    Réponses: 5
    Dernier message: 23/07/2009, 16h10

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