2016-10-09 7 views
0

Я пытаюсь вставить данные в базу данных, используя для цикла. Вот мой код:PHP - попытка вставить данные в базу данных через for-loop, но заполняется только одна строка

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "objednavky"; 

// ****************************************************** 

include 'simple_html_dom.php'; 

$html = file_get_html('http://www.quickbistro.cz/cs/rozvoz'); 
$count = substr_count($html, '<li class="item">'); 
$jidloA = array(); 
$cenaA = array(); 

// ******************************************************** 

$conn = mysqli_connect($servername, $username, $password, $dbname); 

if ($conn->connect_error) { 
    $message = "Connection failed: " . $conn->connect_error; 
} else { 
    for ($x = 0; $x <= $count; $x++) { 
     $cenaA[$x] = $html->find("span[class=price]", $x); 
     $jidloA[$x] = $html->find("div[class=article]", $x); 
     $jidloSQL = strip_tags($jidloA[$x]); 
     $cenaSQL = strip_tags($cenaA[$x]); 
     $id = $x + 1; 
     $array = array(
      "id" => $id, 
      "popis" => "$jidloSQL", 
      "cena" => "$cenaSQL" 
     ); 
     $sql = "INSERT INTO jidla"; 
     $sql.= " (`" . implode("`, `", array_keys($array)) . "`)"; 
     $sql.= " VALUES ('" . implode("', '", $array) . "') "; 
    } 
} 

if ($conn->query($sql) === TRUE) { 
    echo "Data inserted succesfully"; 
} 
else { 
    echo "error creating table" . $conn->error; 
} 

$conn->close(); 
?> 

При запуске сценария он заполняет таблицу моей только с одной строкой, где только ID заполняется с номером 81 (количество пунктов, которые я пытаюсь извлечь). Когда я попытался вставить только одну строку без цикла, все было хорошо, а строка вставлена ​​правильно, поэтому я предполагаю, что проблема находится где-то в моем цикле for.

+1

Не уверен, что вы ожидали? Вы генерируете $ sql foreach и вызываете запрос снаружи, что означает, что будет вставлена ​​только одна запись. –

ответ

2

Ваша проблема в том, что ваш $conn->query($sql), который запускает вставку не внутри for петли, так что она не выполняется на каждом цикле, это только время запуска после ваш цикл for закончен, и поэтому вставляет только результаты финального цикла.

попробовать делать это таким образом:

for($x = 0; $x <= $count; $x++) { 
      $cenaA[$x] = $html->find("span[class=price]", $x); 
      $jidloA[$x] = $html->find("div[class=article]", $x); 
      $jidloSQL = strip_tags($jidloA[$x]); 
      $cenaSQL = strip_tags($cenaA[$x]); 
      $id = $x +1;  
      $array = array(
       "id" => $id, 
       "popis" => "$jidloSQL", 
       "cena" => "$cenaSQL" 
      ); 

      $sql = "INSERT INTO jidla";    
      $sql .= " (`".implode("`, `", array_keys($array))."`)"; 
      $sql .= " VALUES ('".implode("', '", $array)."') "; 

      if($conn->query($sql) === TRUE) { 
       echo "Data inserted succesfully"; 
      } else { 
       echo "error creating record" . $conn->error; 
      } 

     }