[RESOLU] problème de requête dans un WHILE

Petit nouveau ! | 3 Messages

30 nov. 2013, 05:00

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

Mammouth du PHP | 2278 Messages

30 nov. 2013, 10:30

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...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 3 Messages

01 déc. 2013, 18:13

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

Petit nouveau ! | 3 Messages

01 déc. 2013, 18:27

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