Implode() для преобразования массива в строку не работает?

#php #arrays #string #mysqli #implode

#php #массивы #строка #mysqli #implode

Вопрос:

Я застрял с этим в течение нескольких часов, пытаясь это исправить, но моих небольших знаний о php недостаточно, поэтому я прошу вашей помощи.

HTML

         <input type="checkbox" name="type[]" value="type1">Type 1<br>
        <input type="checkbox" name="type[]" value="type2">Type 2<br>
        <input type="checkbox" name="type[]" value="type3">Type 3<br>
        <input type="checkbox" name="type[]" value="type4">Type 4
  

Проверка PHP (отдельный файл)

 if (empty($_POST["type"])) {
    $typeErr = "This field is required";
} else {
    $type = array($_POST["type"]);
}
  

PHP

 /*this is line 90*/ $type_string = implode(',', $type);

$sql = "INSERT INTO `table1`(`type`) VALUES ('$type_string')";
  

Ошибка

  Notice: Array to string conversion in C:xampphtdocsprojectexample.php on line 90
  

Он продолжает говорить мне, что я преобразую массив в строку, когда я использую implode, я понятия не имею, что я делаю не так, у меня просто есть несколько флажков, и выбранные переходят в массив, затем я преобразую этот массив в строку, чтобы иметь возможность отправить его в базу данных mysql…

Вероятно, это глупая ошибка, но я довольно новичок в php и mysql, так что … кто-нибудь может мне помочь?

Я написал $type_string в $typestring, но проблема остается, уведомление все еще происходит…

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

1. $type_string != $typestring

2. замените массив ($_POST[«type»]) на $_POST[«type»]

3. то, что @JohnConde говорит, что $typestring должно быть $type_string или наоборот.

Ответ №1:

 $type = array($_POST["type"]);
  

теперь содержит массив с 0 => array

Итак, implode все еще пытается преобразовать ключ 0 в строку.

Либо

 $type = (array) $_POST["type"]; 
  

Что, я думаю, вы имели в виду или

  /*this is line 90*/ $type_string = implode(',', $type[0]);
  

это должно быть исправлено.

также убедитесь, что вы защищаете от SQL-инъекций

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

1. НАКОНЕЦ, большое вам спасибо, такое простое исправление того, что я застрял на несколько часов! Буквально несколько часов, я должен был спросить об этом раньше… Ну что ж, большое вам спасибо, действительно, полностью исправил это 🙂

2. Я собираюсь принять этот ответ, как только он мне позволит (нужно подождать 5 минут)

Ответ №2:

$POST[«type»] уже является массивом. В вашем коде вы создаете структуру array(array()) srtucture. Если вы хотите быть уверены, что работаете с массивом, используйте

 if(is_array($_POST["type"])){ $type=$_POST["type"] }
  

или преобразовать в массив с помощью

 $type = (array)$_POST["type"];
  

тогда вы можете использовать implode
Удачи 🙂