Page 1 sur 1

problème de requête dans un WHILE

Posté : 30 nov. 2013, 05:00
par davleo
Bonsoir à tous,
j'ai un souci avec un WHILE,
En effet dans le code ci-bas je n’obtiens que la première ligne de data, si je fait juste un echo j'ai bien toute les lignes.
De ce que je comprend la procédure envoie toutes les réponses en même temps mais le reuqête ne prend en compte que la première ligne pourtant elle est bien à l'intérieur du WHILE.
Je pense que ma requête renvoi toutes les données en une fois mais comment faire pour que la requête se fasse sur chaque $key?

Merci pour votre aide

Code : Tout sélectionner

<?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{ } } ?>

Re: problème de requête dans un WHILE

Posté : 30 nov. 2013, 10:30
par sirakawa
avant tout, il faut passer de mysql à mysqli ou pdo (mysql est obsolète et sera abandonné).
As-tu tenté d'afficher la requête, de la copier et de la coller dans phpmyadmin ou équivalent? Souvent, ça aide à comprendre...

Re: problème de requête dans un WHILE

Posté : 01 déc. 2013, 18:13
par davleo
OUi biensur j'ai fin à dump à chaque requête.
Pour MySQLi je vais voir cela.
Ma problématique est que si je supprime les deux dernières requêtes , le ECHO $data2; m'affiche bien toutes les entrées.
Pourquoi lorsque je fait une autre requête je n'ai plus que la première entrée ?
J'ai pensez à faire un nom de variable qui change à chque passe du WHILE ex:
${"gps".$i}= $data2;
$i = $i+1;
echo $gps1 .<br/>;
echo $gps2 .<br/>;
echo $gps3 .<br/>;
puis je fait mes nouvelles requêtes sur les variable $gps
mais je n'arrive pas à l'imbriquer

Merci

Re: problème de requête dans un WHILE

Posté : 01 déc. 2013, 18:27
par davleo
J'ai trouvé la solution, j'avais deux requêtes qui portaient le même nom :? soit $query en changeant l'une des deux tout fonctionne.

Merci