PHP сохранить больше массивов в MySQL - PullRequest
2 голосов
/ 09 июня 2019

Я пытаюсь сохранить массивы в базе данных MySQL с PHP.

Код вставляет только первую строку, если у меня есть array из 5 элементов, он просто вставляет первуюelement, остальные и 4 не сохраняют их для меня.

Может кто-нибудь сказать мне, где я не прав?

Большое спасибо.

<?php

//getting user values

$day = $_POST['Day'];
$nDay = $_POST['n_Day'];
$fieldOne = $_POST['Field_one'];
$fieldTwo = $_POST['Field_two'];
$timeOne = $_POST['Time_one'];
$timeTwo = $_POST['Time_two'];
$idR = $_POST['id_ristorante'];

$day_array = explode(",",$day);
$nDay_array = explode(",",$nDay);
$timeOne_array = explode(",",$timeOne);
$timeTwo_array = explode(",",$timeTwo);

$len = count($day_array and $nDay_array and $timeOne_array and $timeTwo_array);

$output=array();

//require database
require_once('db.php');

//checking if email exists
$conn=$dbh->prepare('SELECT id_ristorante FROM Orari WHERE id_ristorante=:idR');
$conn->bindParam(':idR', $idR, PDO::PARAM_STR);

$conn->execute();

//results
if($conn->rowCount() !==0){
    $output['isSuccess'] = 0;
    $output['message'] = "Orario già inserito";
} else {

     for($i=0;$i<$len;$i++){

         $day = $day_array[$i];
         $nDay = $nDay_array[$i];
         $timeOne = $timeOne_array[$i];
         $timeTwo = $timeTwo_array[$i];

        $conn=$dbh->prepare('INSERT INTO Orari (Day, n_Day, Field_one, Field_two, Time_one, Time_two, id_ristorante) VALUES (?,?,?,?,?,?,?)');
        //encrypting the password

        $conn->bindParam(1,$day);
        $conn->bindParam(2,$nDay);
        $conn->bindParam(3,$fieldOne);
        $conn->bindParam(4,$fieldTwo);
        $conn->bindParam(5,$timeOne);
        $conn->bindParam(6,$timeTwo);
        $conn->bindParam(7,$idR);


        $conn->execute();
        if($conn->rowCount() == 0) {
            $output['isSuccess'] = 0;
            $output['message'] = "Errore, riprova.";
        } elseif($conn->rowCount() !==0){
            $output['isSuccess'] = 1;
            $output['message'] = "Orari salvati!";

        }
    } 
}
echo json_encode($output);

?>

Ответы [ 2 ]

0 голосов
/ 10 июня 2019

Изменить эту строку

$len = count($day_array and $nDay_array and $timeOne_array and $timeTwo_array);

На

$len = count($day_array) + count($nDay_array) + count($timeOne_array) + count($timeTwo_array);
0 голосов
/ 10 июня 2019

При попытке сделать count для нескольких массивов как:

$len = count($day_array and $nDay_array and $timeOne_array and $timeTwo_array);

and приводит к булевской оценке массива, поэтому окончательное присвоение $len равно 1, и поэтому цикл выполняется только один раз, и в БД вставляется только первый элемент.

Если все массивы одинаковой длины, вы просто должны рассчитывать на 1 из них как:

$len = count($day_array)

Лучше будет рассчитывать на каждого из них, а затем присваивать $len с минимальным значением

...