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 :

SELECT dans un WHILE [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Points : 13
    Points
    13
    Par défaut SELECT dans un WHILE
    Bonjour à tous,
    J'ai un problème avec le résultat d'une requête dans un WHILE voici 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    <?php
    error_reporting(E_ALL);		
     
    @session_start();
    require_once($_SESSION['fip']);
     
    $query = "SELECT  * FROM `$GLOBALS[mysql_prefix]responder` ";	//	recherche la clé pour chaque responder
    $result = mysql_query($query) or do_error($query, 'mysql query failed', mysql_error(), basename( __FILE__), __LINE__);
     
    while ($row = mysql_fetch_array($result)) {
     
    $key = $row['callsign']; // on affecte à la variable $Key la clé dur responder dans la boucle
     
    if (!empty($key)) {   // si clé vide on saute
     
     
        $url = "http://www.insta-mapper.com/api/api_single.php?device_id={$key}";
    			$data="";
    			if (function_exists("curl_init")) {
    				$ch = curl_init();
    				curl_setopt($ch, CURLOPT_URL, $url);
    				curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    				$data = curl_exec ($ch);
    				curl_close ($ch);
    				}
    			else {				
    				if ($fp = @fopen($url, "r")) {
    					while (!feof($fp) && (strlen($data)<9000)) $data .= fgets($fp, 128);
    					fclose($fp);
    					}		
    				else {
    //				
    					return FALSE;
    					}
    				}
     
        $nombre_debut=1;
        $nombre_fin=2;
        $longueur_chaine=strlen($data);
        $json = substr($data, $nombre_debut, $longueur_chaine-$nombre_fin);	
        $obj = json_decode($json);
        $device = $obj->{'device_id'};
        $nom = $obj->{'friendly_name'};
        $updated = $obj->{'datetime'};
        $timestamp = strtotime($updated);
        $lat = $obj->{'lat'};
        $lng = $obj->{'lng'};
        $speed = $obj->{'speed'};
        $alt = $obj->{'altitude'};
        $course = $obj->{'kph'};
        $data2 = $device . "," . $nom. "," .$timestamp. "," .$lat. "," .$lng. "," .$speed. "," .$alt. ",".$course;
     
        echo $data2; //  juste pour tester le resultat
     
    //******************************** morceau qui ne fonctionne pas
     
     
        $query  = "INSERT INTO `$GLOBALS[mysql_prefix]tracks_hh` (`source`,`latitude`,`longitude`,`course`,`speed`,`altitude`,`utc_stamp`,`updated`,`from`)
    							VALUES ('$device','$lat','$lng','$course','$speed','$alt','$timestamp','$updated','$course')";
     
        $result = mysql_query($query) or do_error($query, 'mysql_query() failed', mysql_error(),basename( __FILE__), __LINE__);	
     
    		        $the_time = ($timestamp - date("Z") - (get_variable('delta_mins')*60));
    				$now = mysql_format_date($the_time);		
    				$query2 = "UPDATE `$GLOBALS[mysql_prefix]responder` SET `lat`= '$lat' ,	`lng`=	'$lng',	`updated` =  '$updated' 
    					WHERE `callsign`= '$device' LIMIT 1 ";			
    				$result2 = mysql_query($query2) or do_error($query2, 'mysql_query() failed', mysql_error(),basename( __FILE__), __LINE__);
     
     
     
    //******************************** fin du morceau qui ne fonctionne pas *******************
    }
    else{
    }
    }
        ?>



    Je n’obtiens que le premier résultat qui est bien importé dans la BD mais pas les autres pourquoi?

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que tu as un peu debuguer ?
    Par exemple, affiche tes requêtes avant de les executer, tu verras ainsi si tu n'as qu'une seule insertion ou plusieurs identiques.

    Au passage, pourquoi faire un UPDATE sur une données que tu viens d'insérer ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Oui j'ai déboguer en faisant des dump ,
    En faite la requête $query me retourne plusieurs lignes en même comme en tableau.
    J'ai une piste de solution j'ai testé en créant un nom de variable qui augmente à chaque passe pour me retourner les lignes de data séparément dans mon WHILE :
    avant le WHILE
    après le WHILE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ${"gps".$i}= $data2;
    $i = $i+1;
     
    echo $gps1 .<br/>;
    echo $gps2 .<br/>;
    echo $gps3 .<br/>;
    Et la chaque variable me retourne bien un seul data à la fois.
    En suite je pourrais récupérer la dernière valeur de $i moins 1 et faire un LOOP
    pour faire un insert dans la BD , maintenant c'est là que je suis bloqué.

    Pour le Update c'est simple j'ai deux tables, 'track' ou chaque data est entrée donc INSERT et la table 'responder' ou je n'indique que la dernière entrée

    Merci.

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 105
    Points : 4 455
    Points
    4 455
    Par défaut
    il faudrait faire un fetchall au début, puisque dans la boucle while il y a un mysql_query(), la boucle est cassée faire un $result = mysql_query($query) en plein milieu de la boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($rows[]=mysql_fetch_array($result));
    foreach($rows as $row){
       ...
    }
    $moi= ( !== ) ? : ;

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 12
    Points : 13
    Points
    13
    Par défaut
    Merci papajoker tu as mis le doigt dessus j'avais deux requêtes qui portaient le même nom en changent simplement le nom de la première tout fonctionne, pourtant tellement simple à voir.
    Merci beaucoup

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

Discussions similaires

  1. select dans un while
    Par djo007 dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 10/01/2012, 20h35
  2. [MySQL] Select dans une boucle while
    Par voyageurdumonde dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/04/2011, 00h35
  3. selected dans while
    Par rduvrac dans le forum Langage
    Réponses: 3
    Dernier message: 04/03/2008, 10h09
  4. [MySQL] Requête SELECT insérée dans un WHILE
    Par boubourse92 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 17/01/2008, 16h01
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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