PHP — пытается вставить данные в базу данных через for-цикл, но заполнена только одна строка

#php #mysql #for-loop #insert #cycle

#php #mysql #for-цикл #вставить #цикл

Вопрос:

Я пытаюсь вставить данные в базу данных с помощью цикла for. Вот мой код:

 <?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();
?>
  

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

Комментарии:

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

Ответ №1:

Ваша проблема в том, что ваш $conn->query($sql) , который запускает insert, не находится внутри вашего 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;
            }  

        }