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 :

Requête SQL et PHP [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Par défaut Requête SQL et PHP
    slt a tous
    j'ai un code PHP avec 2 requétes sql a insérer dans ma base de donnée,mais j'ai un probléme d'insertion d'une requétes dans sa table,mes tables sont:
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    etudiant(num_insc,nom,prenom)
    emprunt(#num_insc,#code_revue,date_emprunt,date-retour)
    revue(code_revue,num_editeur,titre,type,nbr_exemplaire)
    mon code php est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $varcote=$_POST['code_revue'];
    $varnum=$_POST['num_insc'];
    $varnom=$_POST['nom'];
    $varprenom=$_POST['prenom'];
    $datem=$_POST['date_emprunt'];
    $vardatre=$_POST['date_retour'];
    include('connexion.php');
    $req1="INSERT INTO emprunt Values ('$varnum','$varcote','$datem','$vardatre')";
    mysql_query($req1) or die ('erreur'.$req1);
    $req2="INSERT INTO etudiant values('$varnum','$varnom','$varprenom')";
    mysql_query($req2) or die ('erreur'.$req1);
    echo "votre enregistrement a éte envoyer avec succés ";
    ?>
    ce code s'excute normalement si l'etudiant qui veut faire un emprunt n'existe pas dans notre base de donnée (dans la table etudiant),
    je voudrais un code avec ces deux requétes mais qui gére la situation si:
    cet etudiant existe déja dans notre table etudiant req1 s'excute et req2 ne s'excute pas ,c.a.d on aura pas besoin d'ajouter cet etudiant puisqu'il existe déja dans la table etudiant.
    et merci pour votre aide

  2. #2
    Membre confirmé
    Inscrit en
    Février 2006
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 102
    Par défaut
    Pour moi, il faudrait avant l'enregistrement de l'etudiant que tu executes une requete dans la base qui determine si l'etudiant existe deja ou non

    ou alors tu crée un systeme d'identification, comme ca dans un premier temps l'etudiant est obligé de s'enregistrer et apres il pourra faire ses emprunts

  3. #3
    Membre émérite Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Par défaut
    Salut tu peux faire ça:

    Code php : 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
    <?php
    include('connexion.php');
    $varcote=$_POST['code_revue'];
    $varnum=$_POST['num_insc'];
    $varnom=$_POST['nom'];
    $varprenom=$_POST['prenom'];
    $datem=$_POST['date_emprunt'];
    $vardatre=$_POST['date_retour'];
     
     
    $requete=mysql_query("SELECT * from etudiant where num_insc= '$varnum'",$cnx);
    //si il existe alors on fait l'emprunt
    if (mysql_num_rows($requete) !=0) {
     
    $req1="INSERT INTO emprunt Values ('$varnum','$varcote','$datem','$vardatre')";
    mysql_query($req1) or die (mysql_error().$req1);
     
    }
    //sinon on l'ajoute dans la table etudiant
    else
    {
    $req2='INSERT INTO etudiant values("'.$varnum;'","'.$varnom.'","'.$varprenom.'")';
    mysql_query($req2) or die (mysql_error().$req1);
    }
    echo "votre enregistrement a éte envoyer avec succés ";
    ?>

  4. #4
    Membre chevronné Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Par défaut
    Juste une question. Pourquoi utiliser des bases de données relationnelles pour faire cela. En creant un index unique sur la table étudiant, on simplifie le problème :
    - on execute le INSERT INTO etudiant ...
    S'il échoue, c'est qu'il est déja présent dans la table, donc on execute la seconde requête.

    On évite ainsi la requête en lecture et le choix if...else du PHP.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Salut,

    Juste une question. Pourquoi utiliser des bases de données relationnelles pour faire cela.
    Mais sinon tu veux le faire avec quoi ?
    Des fichiers textes ?
    Des fichiers XML ?
    En JSon ?
    Te compliquer la vie ?

    on simplifie le problème :
    - on execute le INSERT INTO etudiant ...
    S'il échoue, c'est qu'il est déja présent dans la table, donc on execute la seconde requête.
    On évite ainsi la requête en lecture et le choix if...else du PHP.
    La requete peut échouer pour d'autres raisons et ton fonctionnement simpliste répond au besoin, mais laisse planer un flou.
    Si l'insert renvoit false, est ce parce qu'un tel enregistrement existe déjà, ou est ce parce que mon serveur n'à plus d'espace disque suffisant ?
    Comment traiter alors cette réponse, emettre une erreur qui préviendrait immédiatement les admins ?
    Ou la considérait comme un comportement normal de l'application et continuer coute que coute, vaille qui vaille ?

    Bien sûr on pourrait aller lire le messge d'erreur eventuel et effectuer une procédure en fonction de l'erreur, mais coooooommmmmme c'est fastidieux....
    Par rapport à un simple procédé qui consiste à s'efforcer de vérifier que l'insert fonctionnera, sauf en cas d'erreur système, qui mérite alors dans tous les cas d'être remontés dans les logs et redsitribuées aux personnes compétentes.

    Dans la même veine, pourquoi vouloir retirer ce test ?
    C'est une page d'insertion qui à priori ne nécessite pas d'être ultra méga rapide, donc, pourquoi ? Quel est l'interet, sinon par peche de faineantise ?

    @DeveX
    A la rigueur, et au vu de ton schéma tu peux te tourner vers REPLACE INTO.
    Même si je préfére la solution de obito qui consiste à vérifier ce qu'on possède avant de faire un insert ou un update.

    bye

  6. #6
    Membre habitué
    Inscrit en
    Mars 2008
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 8
    Par défaut
    Citation Envoyé par obito Voir le message
    Salut tu peux faire ça:

    Code php : 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
    <?php
    include('connexion.php');
    $varcote=$_POST['code_revue'];
    $varnum=$_POST['num_insc'];
    $varnom=$_POST['nom'];
    $varprenom=$_POST['prenom'];
    $datem=$_POST['date_emprunt'];
    $vardatre=$_POST['date_retour'];
     
     
    $requete=mysql_query("SELECT * from etudiant where num_insc= '$varnum'",$cnx);
    //si il existe alors on fait l'emprunt
    if (mysql_num_rows($requete) !=0) {
     
    $req1="INSERT INTO emprunt Values ('$varnum','$varcote','$datem','$vardatre')";
    mysql_query($req1) or die (mysql_error().$req1);
     
    }
    //sinon on l'ajoute dans la table etudiant
    else
    {
    $req2='INSERT INTO etudiant values("'.$varnum;'","'.$varnom.'","'.$varprenom.'")';
    mysql_query($req2) or die (mysql_error().$req1);
    }
    echo "votre enregistrement a éte envoyer avec succés ";
    ?>
    merci beaucoup OBITO c'est ça le code que je veux

  7. #7
    Membre chevronné Avatar de fenkys
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 376
    Par défaut
    Citation Envoyé par kaymak Voir le message
    Salut,
    Bien sûr on pourrait aller lire le messge d'erreur eventuel et effectuer une procédure en fonction de l'erreur, mais coooooommmmmme c'est fastidieux....
    bye
    C'est pourtant ça la bonne méthode. Il faut systématiquement vérifier les codes d'erreurs. Parce que de la même façon, le select ne renvoie rien, c'est parce qu'il n'y a rien, ou parce que tu n'es pas connecté à la base, ou que la table n'existe pas (voire que la requête est fausse).

    Enfin, en PHP 5, avec une bonne gestion des exceptions, le traitement des codes d'erreurs MySQL n'a rien de fastidieux.

    Enfin, ta méthode n'est pas fiable, contrairement au système des index uniques. Si deux personnes accèdent à la page au même moment, ils peuvent créer deux étudiants avec le même ID. Avec ma méthode ce n'est pas possible.

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

Discussions similaires

  1. [SQL] [Firebird] Requête SQL en PHP
    Par pit2121 dans le forum PHP & Base de données
    Réponses: 27
    Dernier message: 09/10/2007, 00h57
  2. [SQL] Comparer résultat d'une requête Sql avec php
    Par nicoxweb dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 04/09/2007, 22h46
  3. [SQL-Server] Problème d'accents sur requête SQL, de php à SQLServer
    Par pontos dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/04/2007, 14h58
  4. [SQL] Editeur de requête SQL en PHP
    Par lodan dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 19/07/2006, 17h55
  5. [SQL] Concaténer des requêtes SQL en PHP
    Par brotelle dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 18/04/2006, 19h53

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