Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & SQL-Server
PHP & SQL-Server Forum d'entraide sur SQL-Server avec PHP. Avant de poster -> FAQ SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/04/2006, 12h14   #1
Membre confirmé
 
Avatar de allyson
 
Inscription : août 2003
Messages : 248
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 248
Points : 232
Points : 232
Envoyer un message via Yahoo à allyson
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 :
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
allyson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 12h58   #2
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Salut Allyson,

Dans ton code:
Code :
if (($$gpe%3==0) OR ($gpe%3==1))
C'est normal le $$ ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 14h04   #3
Membre confirmé
 
Avatar de allyson
 
Inscription : août 2003
Messages : 248
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 248
Points : 232
Points : 232
Envoyer un message via Yahoo à allyson
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
allyson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 14h47   #4
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
Code :
$conn=mssql_connect('host','login','pwd);
=> il manque une quote
Code :
$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 ?
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 15h14   #5
Membre confirmé
 
Avatar de allyson
 
Inscription : août 2003
Messages : 248
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 248
Points : 232
Points : 232
Envoyer un message via Yahoo à allyson
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
allyson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 15h39   #6
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 15h44   #7
Membre confirmé
 
Avatar de allyson
 
Inscription : août 2003
Messages : 248
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 248
Points : 232
Points : 232
Envoyer un message via Yahoo à allyson
c'est vrai t'as raison, j'avais oublié de mettre la dernière version du script
Code :
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
allyson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 15h48   #8
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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.
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 16h23   #9
Membre confirmé
 
Avatar de allyson
 
Inscription : août 2003
Messages : 248
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 248
Points : 232
Points : 232
Envoyer un message via Yahoo à allyson
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
allyson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2006, 16h52   #10
Expert Confirmé Sénior
 
Avatar de Mr N.
 
Inscription : septembre 2004
Messages : 5 421
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 421
Points : 5 835
Points : 5 835
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 :
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");
?>
Mr N. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2006, 11h55   #11
Membre confirmé
 
Avatar de allyson
 
Inscription : août 2003
Messages : 248
Détails du profil
Informations forums :
Inscription : août 2003
Messages : 248
Points : 232
Points : 232
Envoyer un message via Yahoo à allyson
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
allyson est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h30.


 
 
 
 
Partenaires

Hébergement Web