From 20dddd3705de7c2867195465ad8a9e0986474f3f Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 19:06:39 +0100 Subject: [PATCH] Make the PHP Script Better with error management --- Sources/php_script/script/config.php | 16 ++--- Sources/php_script/script/db.php | 10 --- Sources/php_script/script/distance.php | 90 +++++++++++++------------- Sources/php_script/script/insert.php | 2 +- 4 files changed, 55 insertions(+), 63 deletions(-) delete mode 100644 Sources/php_script/script/db.php diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index 21d19bb..7ccd56a 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,13 +1,13 @@ getMessage(); - echo $error; -} diff --git a/Sources/php_script/script/distance.php b/Sources/php_script/script/distance.php index a97058f..03148aa 100644 --- a/Sources/php_script/script/distance.php +++ b/Sources/php_script/script/distance.php @@ -2,54 +2,56 @@ function meters($lat1, $lng1, $lat2, $lng2): float { - // Radius of the Earth in meters : - $earth_radius = 6378137; - // Calculation of the distance between 2 GPS coordinates: - $rlo1 = deg2rad($lng1); - $rla1 = deg2rad($lat1); - $rlo2 = deg2rad($lng2); - $rla2 = deg2rad($lat2); - $dlo = ($rlo2 - $rlo1) / 2; - $dla = ($rla2 - $rla1) / 2; - $a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo)); - $d = 2 * atan2(sqrt($a), sqrt(1 - $a)); - // Return the distance in meters between 2 GPS points - return round($earth_radius * $d); + $earth_radius = 6378137; // Radius of the Earth in meters : + $rlo1 = deg2rad($lng1); //Transform the coordinate longitude1 from degree to radian + $rla1 = deg2rad($lat1); //Transform the coordinate latitude1 from degree to radian + $rlo2 = deg2rad($lng2); //Transform the coordinate longitude2 from degree to radian + $rla2 = deg2rad($lat2); //Transform the coordinate latitude2 from degree to radian + $dlo = ($rlo2 - $rlo1) / 2; //Stock in $dlo the result of the calcul : ($rlo2 - $rlo1) / 2 + $dla = ($rla2 - $rla1) / 2; //Stock in $dla the result of the calcul : ($rla2 - $rla1) / 2 + $a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo)); //Do some operations to return the distance in meters + $d = 2 * atan2(sqrt($a), sqrt(1 - $a)); //Do some operations to return the distance in meters + return round($earth_radius * $d); // Return the distance in meters between 2 GPS points } - -$connect=""; -include "config.php"; -$id = $_POST['id']; -$query = 'SELECT * FROM gps'; -$stm = $connect->prepare($query); -$stm->execute(); -$row = $stm->fetchAll(PDO::FETCH_ASSOC); -$lat1=0; -$lng1=0; -$listUser=[]; -Foreach ($row as $col) { - if (strcmp($col['id'], $id) == 0) { - $lat1 = $col['latitude']; - $lng1 = $col['longitude']; - } -} -if ($lat1==0 && $lng1==0){ - print(json_encode("ERROR No user found in the database")); - exit(1); +$connect=""; //Else PHP send an error, "connect don't exist", but that work anyway, this is just to remove a fake error +$res=include "config.php"; //$res get the result of the calling of "config.php" +if ($res != 1){ //Check if config.php work + print (json_encode("Failed to connect to MySQL")); //Return a json string, so the dart script can interpret the error } - -Foreach ($row as $col) { - if (strcmp($col['id'],$id)!=0) { - $lat2 = $col['latitude']; - $lng2 = $col['longitude']; - $userID = $col['id']; - $idMusic = $col['idMusic']; - $dist = meters($lat1, $lng1, $lat2, $lng2); - if ($dist <= 100) { - $listUser[] = ['user' => $userID, 'music' => $idMusic]; } +if (!empty($_POST)) { + $id = $_POST['id']; //Get the result of the POST method in id + $query = 'SELECT * FROM gps'; //Browse all the database + $results = mysqli_query($connect, $query); //Execute the SQL command + $lat1 = 0; //Set $lat1 to test if the user exist + $lng1 = 0; //Set $lng1 to test if the user exist + $listUser = []; //Set the listUser to an empty list + while ($row = $results->fetch_row()){ //For all the row in the database + if (strcmp($row[0], $id) == 0) { //If the user is found in the database + $lat1 = $row[1]; //Set $lat1 to the latitude of the current user + $lng1 = $row[2]; //Set $lng1 to the longitude of the current user + } + } + if ($lat1 == 0 && $lng1 == 0) { //Check if the user get found in the database + print(json_encode("ERROR No user found in the database")); //Return a json string, so the dart script can interpret the error + exit(1); //Exit the actual script + } + $results = mysqli_query($connect, $query); //Execute again the SQL command to restart the fetch_row() + while ($row = $results->fetch_row()) { //For all the row in the database + if (strcmp($row[0], $id) != 0) { //If the row is not the row of the current user + $lat2 = $row[1]; //Set $lat2 to the latitude of the user who is in the actual row + $lng2 = $row[2]; //Set $lng2 to the latitude of the user who is in the actual row + $userID = $row[0]; //Set $userID to the username of the user who is in the actual row + $idMusic = $row[3]; //Set $idMusic to the id of the actual song of the user who is in the actual row + $dist = meters($lat1, $lng1, $lat2, $lng2); //With the function meters, calcul of the distance between the current user and the user who is in the actual row + if ($dist <= 100) { //If the user in the actual row is less than 100 meters away of the current user + $listUser[] = ['user' => $userID, 'music' => $idMusic]; //Add the username and the ID of the song that user who is in the actual row is listening + } + } } + print(json_encode($listUser)); //Return a json string of the list listUser +}else{ //If the method POST return nothing + print (json_encode("The POST didn't return any values")); //Return a json string, so the dart script can interpret the error } -print(json_encode($listUser)); diff --git a/Sources/php_script/script/insert.php b/Sources/php_script/script/insert.php index 3ae92f5..c272129 100644 --- a/Sources/php_script/script/insert.php +++ b/Sources/php_script/script/insert.php @@ -22,5 +22,5 @@ if (!empty($_POST)) { VALUES('$id','$latitude','$longitude','$idMusic',CURRENT_TIMESTAMP);"; //Insert into the database the new data and new information about this user $results = mysqli_query($connect, $query); //Execute the SQL command }else{ //If the method POST return nothing - print (json_encode("The POST method failed")); //Return a json string, so the dart script can interpret the error + print (json_encode("The POST didn't return any values")); //Return a json string, so the dart script can interpret the error } \ No newline at end of file