2016-07-28 2 views
0

Первый ученик. Я просто пытаюсь сделать цикл в $ _POST заявления PHP как этот

if ($_POST) { //Get value of Latitude, Longitude, Radius from site.php to calculate in Query above 
    include('config/dbconnect.php'); //Database connection 
    $lat = array(); 
    $lon = array(); 
    $rad = array(); 
    $stmt = array(); 
    $sql = array(); 

    $lat1 = $_POST['lat1']; //Get value of Latitude 1 
    $lon1 = $_POST['lon1']; //Get value of Longitude 1 
    $rad1 = $_POST['rad1']; //Get value of Radius 1 
    $endrow = $_POST['endrow']; 

    for ($i = 2; $i <= $endrow; $i++) { 
     $lat[$i] = $_POST['lat'.$i]; //Get value of Latitude n 
     $lon[$i] = $_POST['lon'.$i]; //Get value of Longitude n 
     $rad[$i] = $_POST['rad'.$i]; //Get value of Radius n 
    } 

    //Haversine Formula and view only match Site CI and d2g_trx CI 
    $sql = "SELECT site.*,d2g_trx.*, 
     (6371 * acos(cos(radians($lat1)) 
         * cos(radians(site.latitude)) 
         * cos(radians(site.longitude) - radians($lon1)) 
        + sin(radians($lat1)) 
         * sin(radians(site.latitude)))) AS distance 
     FROM site 
     INNER JOIN d2g_trx ON site.ci = d2g_trx.CI 
     HAVING distance <=$rad1 
     ORDER BY distance 
     LIMIT 0 , 50"; 

    $stmt = $dbh->query($sql)->fetchAll(); // Input 1 

    for ($j = 2; $j <= $endrow; $j++) { 
     //Haversine Formula and view only match Site CI and d2g_trx CI 
     $sql[$j] = "SELECT site.*,d2g_trx.*, 
      (6371 * acos(cos(radians($lat[$j])) 
          * cos(radians(site.latitude)) 
          * cos(radians(site.longitude) - radians($lon[$j])) 
         + sin(radians($lat[$j])) 
          * sin(radians(site.latitude)))) AS distance 
      FROM site 
      INNER JOIN d2g_trx ON site.ci = d2g_trx.CI 
      HAVING distance <=$rad[$j] 
      ORDER BY distance 
      LIMIT 0 , 50"; 
     $stmt[$j] = $dbh->query($sql[$j])->fetchAll(); //Input n 
    } 
} 

я получил ошибку как этот

Fatal error: Call to a member function fetchAll() on a non-object in F:\XAMPP\htdocs\kp\getsite.php on line 28

Во всяком случае, линия 28 это одна

$stmt[$j]= $dbh->query($sql[$j])->fetchAll(); //Input n 

К сожалению, мой Английский очень плохо :(

Любая идея, как исправить этот сэр?

Благодаря перед тем

+1

Показать файл dbconnect.php – rad11

+2

Этот код уязвим для атак SQL-инъекций. Вы не должны создавать запросы путем конкатенации строк, особенно если пользовательский ввод не задействован, потому что пользователю нельзя доверять. Вместо этого используйте готовую операционную функцию MySQLI/PDO. – GordonM

+0

Я думаю, что это похоже на этот вопрос: [http://stackoverflow.com/questions/8567847/loop-through-post-variables-with-similar-names](http://stackoverflow.com/questions/8567847/ loop-through-post-variables-with-similar-names) – cakpep

ответ

0

В конце концов, это может быть, как это

if($_POST){ //Get value of Latitude, Longitude, Radius from site.php to calculate in Query above 
include('config/dbconnect.php'); //Database connection 
$tempsss = array(""); 
$lat = array(""); 
$lon = array(""); 
$rad = array(""); 

$j=1; 
foreach($_POST as $k => $v) { 
    if(strpos($k, 'lat') === 0) { 
     $lat[$j] =$v; //Get value of Latitude 
     $j++; 
    } 
}; 
$z=1; 
foreach($_POST as $k => $v) { 
    if(strpos($k, 'lon') === 0) { 
     $lon[$z] =$v; //Get value of Latitude 
     $z++; 
    } 
}; 
$h=1; 
foreach($_POST as $k => $v) { 
    if(strpos($k, 'rad') === 0) { 
     $rad[$h] =$v; //Get value of Latitude 
     $h++; 
    } 
}; 
0

Просто потому, что вы можете сделать это:

$dbh->query($sql[$j])->fetchAll(); 

не означает, что вы должны. По крайней мере, для целей тестирования вы должны реально смотреть на возвращаемые значения (я предполагаю, что вы используете PDO):

$result = $db->query($sql[$j]); 
if($result === false) { 
    print_r($db->errorInfo()); 
    exit; 
} 
$stmt[$j] = $result->fetch(); 
+0

Спасибо, я получил этот сэр «Array ([0] => 42000 [1] => 1064 [2] => У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL для правильного синтаксис для использования рядом с «S» в строке 1) « –

+0

ошибка не соответствует вашему запросу, пожалуйста, обновите свой код выше, чтобы показать фактический код (даже если форматирование кода ужасно), вы добавили пробел или что-то после S SELECT? – Jakumi