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 :

PHP/MSSQL et modulo [SQL-Server]


Sujet :

PHP & Base de données

  1. #1
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut PHP/MSSQL et modulo
    bonjour à tous,
    voilà j'ai un petit problème avec un script qui fait appel à la fonction modulo! en fait je veux que ce script sélectionne de façon aléatoire un certain nombre d'enregistrement (selon la valeur du modulo) et qu'il mette à jour cette dernière!
    lorsque le modulo est égal à 0 ou à 1 je veux qu'il sélectionne 2 enregistrements et lorsqu'il est égal à 2 je veux qu'il en sélectionne 1 mais là ce n'est pas ce que j'obtiens! le script me parrait correct mais je me tourne vers vous pour le vérifier
    voici mon script:
    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
    47
    48
    49
    50
    51
    52
    53
     
    <?
    //initialiser les numéros de groupe
     
    for ($gpe=1; $gpe<=3; $gpe++)
    {
     
    if (($$gpe%3==0) OR ($gpe%3==1))
    {
    //alors on va retirer 2 enregistrements
     $conn=mssql_connect('host','login','pwd);
       mssql_select_db('[db]',$conn);
      //on sélectionne 2 enregistrements 
       $sql = "select top 2 * from table where champ1='0' order by NEWID();"; 
        $req = mssql_query($sql,$conn) or die('Erreur sql '.$sql);
        
        while ($result = mssql_fetch_assoc($req))
        {
        //on met à jour la table 
        $sql1= "update table set champ1='1' where num_card='".$result['champ2']."'";
        $req1 = mssql_query($sql1,$conn) or die('Erreur sql '.$sql1);
        
        //on insère les résultats dans la table2
        $sql2= "insert into table2(champ champ1, champ2) values ('".$result['champ2']."', 'xx', 0);";
        $req2 = mssql_query($sql2,$conn) or die('Erreur sql '.$sql2);
        }//fin récupérer 2 records
    
    }
    
    if ($val%3==2)
    {//on retire 1 record
     $conn=mssql_connect('host','login','pwd');
       mssql_select_db('[bd]',$conn);
      //on sélectionne 1 enregistrement 
       $sql = "select top 1 * from table where champ1='0' order by NEWID();"; 
        $req = mssql_query($sql,$conn) or die('Erreur sql '.$sql);
        
        while ($result = mssql_fetch_assoc($req))
        {//récupérer 1 record
        //on met à jour la table
        $sql1= "update table set champ1='1' where num_card='".$result['champ2']."'";
        $req1 = mssql_query($sql1,$conn) or die('Erreur sql '.$sql1);
        
        //on insère les résultats dans la table 2
        $sql2= "insert into table2(champ, champ1, champ2) values ('".$result['champ2']."', 'xx', 0);";
        $req2 = mssql_query($sql2,$conn) or die('Erreur sql '.$sql2);
        }//fin récupérer 1 record
    
    }
    
    }
    header ("Location: ok.php");
    ?>
    voilà j'espère que c'est claire
    merci
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Salut Allyson,

    Dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (($$gpe%3==0) OR ($gpe%3==1))
    C'est normal le $$ ?

  3. #3
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut
    c'est une faute de frappe lorsque j'ai copié le code
    rassue-toi elle n'apparait pas dans le script original
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $conn=mssql_connect('host','login','pwd);
    => il manque une quote
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql2= "insert into table2(champ champ1, champ2)....
    => il manque une virgule

    Comment ça je suis lourd ?

    Sinon tu vas toujours de 1 à 3 ou ca risque de changer ? En fait je comprend pas bien à quoi sert ta boucle
    Tu pourrais donner ton besoin fonctionnel de manière un peu plus concrête ?

  5. #5
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut
    t'es pas lourd ce sont des fautes de frappe !
    la boucle est en fait une façon de dire qu'il faut exécuter les instructions qui y sont incluses pour chaque groupe!
    je vais te donner un exemple pour illustrer tout:
    j'ai ma table "table" qui contient ces enregistrements là

    champ1 | champ | gpe
    -----------------------
    1110 | 0 | 1
    1111 | 0 | 1
    1112 | 0 | 1
    1113 | 0 | 2
    1114 | 0 | 2
    1115 | 0 | 2
    1116 | 0 | 3
    1117 | 0 | 3
    1118 | 0 | 3

    je voudrais qu'après exécution des instructions du bloc for j'aie dans chaque groupe 2 enregistrements où le champ='1' et le total des enregistrements mis à jour (c'est à dire 2enregistrements * 3 groupes = 6 ) soient insérés dans la table1.
    j'espère avoir été claire
    merci encore
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    pourquoi 3 ? tu n'as que trois groupes ?
    Je ne vois pas gpe qui intervient dans ta selection dans la requete...
    Dans ton exemple champ1 est != 0 alors que tu sélectionnes ceux qui sont == 0

  7. #7
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut
    c'est vrai t'as raison, j'avais oublié de mettre la dernière version du script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = "select top 2 * from table where champ1='0' and gpe='".$gpe."' order by NEWID();"
    désolée
    est-ce correct?
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  8. #8
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Où est la notion aléatoire dans ton code ?

    Désolé de répondre à ta question par d'autres questions, mais c'est pour essayer de mieux comprendre ton problème.

  9. #9
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut
    elle est dans NEWID() qui permets de sélectionner des id différents...
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

  10. #10
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    J'aime pas les copier coller. Je me suis permis de raccourcir ton code et j'ai pris quelques libertés. Tu peux me dire si ça pourrait correspondre à ce que tu cherches à faire ?
    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
    <?
     
    $conn = mssql_connect('host','login','pwd');
    mssql_select_db('[db]',$conn);
     
     
    //initialiser les numéros de groupe
    for ($gpe = 1 ; $gpe <= 3 ; $gpe++)
    {
     
        $sql = 'SELECT TOP '. min(2, 3 - ($gpe % 3)) ." * from table where champ1 = '0' and gpe = '". $gpe ."' order by NEWID();"; 
        $req = mssql_query($sql,$conn) or die('Erreur sql '.$sql);
     
        while ($result = mssql_fetch_assoc($req))
        {
            //on met à jour la table 
            $sql1= "UPDATE TABLE SET champ1 = '1' WHERE num_card = '".$result['champ2']."'";
            $req1 = mssql_query($sql1,$conn) or die('Erreur sql '.$sql1);
     
        }//fin récupérer n records
     
    }
    //on insère les résultats dans la table2
    $sql2= "INSERT INTO table2(champ, champ1, champ2) SELECT champ2, 'xx', 0 FROM table WHERE champ1 = '1';";
    $req2 = mssql_query($sql2,$conn) or die('Erreur sql '.$sql2);
     
    header ("Location: ok.php");
    ?>

  11. #11
    Membre actif Avatar de allyson
    Inscrit en
    Août 2003
    Messages
    261
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 261
    Points : 277
    Points
    277
    Par défaut
    Bonjour
    merci beaucoup Mr.N mais où est passé le modulo?
    là je crois que j'ai réglé le problème qui en fait venait d'une donnée redondante dans la bd: en effet, j'avais deux enregistrement ayant une même valeur du champ2 et bal lors de l'update, la seconde était affectée alors qu'elle ne devait pas!
    j'ai réglé le problème
    merci encore et bon courage
    .: and Justice for all :.
    ------------------------------------------------------------
    Membre du jury de l'élection de Mister DVP.com
    les règles du forum
    de penser au tag

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

Discussions similaires

  1. Conversion appli php/MySQL -> php/MsSQL - Prenage de tête
    Par Joelindien dans le forum MS SQL Server
    Réponses: 19
    Dernier message: 02/09/2008, 17h40
  2. [SQL-Server] Connexion php-mssql après changement de serveur mssql
    Par xelade dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/09/2007, 11h21
  3. Réponses: 2
    Dernier message: 08/12/2006, 15h29
  4. [PHP - MSSQL] Problème d'upload / binaire
    Par noiserie dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 25/07/2005, 18h03

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