Извините за мой английский, но это не мой родной язык. Я создал пользовательский интерфейс для вставки данных в MySQL. Все, кроме одного, хорошо, но когда я хочу прочитать данные из нескольких флажков и записать их в тип SET в MySQL, это просто не работает. Я пытался найти ответ, но через 4 часа я не могу его найти или не понимаю.

http://jyxo.info/uploads/21/21b104df77f6ca723bb708d8d0549af5430e8e91.jpg

Доба Vyskytu типа SET и есть в течение месяца вы можете найти грибы (мое время онлайн атлас грибов)

В пользовательском интерфейсе у меня есть 12 флажок на 12 месяцев.

http://jyxo.info/uploads/FD/fd548760b155307dfa677ada7c4be4996abf7b93.png

В dobavyskytu мне нужно иметь множественный выбор, и именно поэтому я использую $ doba + =

if(isset($_POST["Leden"]))
{
    $doba += "Leden";
}

if(isset($_POST["Únor"]))
{
    $doba += "Únor";
}

if(isset($_POST["Březen"]))
{
    $doba += "Březen";
}


Db::query("INSERT INTO houby(nazev,dobaVyskytu,mistoVyskytu,popis,jedovatost,img)VALUES(?,?,?,?,?,?)",$nazev,$doba,$misto,$popis,$jedovatost,$foto);

Спасибо всем за чтение и за помощь, потому что это работает сейчас.

1
Osobní_Ježíš 28 Май 2017 в 09:02

2 ответа

Лучший ответ

Для строк в PHP он использует . в качестве конкатенации, а не +, поэтому

$doba .= "Leden";

Изменить: Для лучшего способа сделать это, вы должны попробовать что-то вроде ...

$options = [];
if(isset($_POST["Leden"]))
{
    $options[] = "Leden";
}

if(isset($_POST["Únor"]))
{
    $options[] = "Únor";
}
...
$doba = implode(',', $options);

Как это даст вам что-то вроде Leden,Únor

1
Nigel Ren 28 Май 2017 в 07:00

Мои гипотезы таковы:

  • $ doba - это переменная, которую вы хотите вставить в столбец типа SET (я перевел, и, похоже, значения, которые вы указали в качестве примера в своем вопросе, являются словацкими для «января», «февраля», «марта» - я полагаю, что это может быть Больше).

  • Я предполагаю, что ваш столбец типа SET имеет значение «dobaVyskytu» и что вы правильно создали его в MySQL, включив все возможные значения в определение столбца.

(Ваше обновление вопроса, кажется, подтверждает мои гипотезы!)

Во-первых, когда вы хотите вставить несколько значений в столбец типа SET в MySQL, строковое значение должно быть разделено запятыми.

С помощью кода, который я вижу, вы можете получить строку «LedenÚnorBřezen» (я полагаю, вы используете + = для конкатенации строк, но вы должны действительно использовать. =, Как упоминал Найджел Рен). Вы действительно хотите получить строку типа «Leden, Únor, Březen», если все 3 значения, которые вы показываете, отмечены в вашей форме.

Смотрите здесь о том, как обрабатывать тип SET в MySQL: https://dev.mysql.com/doc/refman/5.7/ ан / set.html

Поскольку вы не знаете, будете ли вы в конечном итоге иметь 0 или несколько значений для этого столбца, я бы предложил сделать $ doba массивом.

$doba = array(); // depending on your PHP version, you can also write $doba = [];

После этого вы можете добавить свои значения следующим образом (синтаксис $ array [] = 'value' добавит значение в массив):

$doba[] = "Leden";
$doba[] = "Únor";
$doba[] = "Březen";

Затем, перед вставкой, вы можете преобразовать массив в строку со значениями, разделенными запятыми, следующим образом:

$csvDoba = implode(',', $doba);

Затем используйте $ csvDoba вместо $ doba в вашей строке Db :: query ().


После того, как вы это заработаете, вот несколько вещей, которые вы можете искать, чтобы улучшить свой код:

  • Вы также можете воспользоваться магией PHP, назвав свой флажок формы специальным именем, чтобы избежать повторения.

    Например, вы можете назвать все свои флажки с именем "doba []", и если (isset ($ _ POST ["doba"]), это уже будет массив со всеми проверенными значениями! Но будьте осторожны, если нет значения отмечен, он не будет установлен. Таким образом, вы избежите выполнения условия if для каждого из ваших флажков.

    Вы можете сделать что-то вроде этого в своем коде, чтобы получить значение:

    $ doba = isset ($ _ POST ['doba'])? (массив) $ _POST ['doba']: array ();

    Что это делать?

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

    Если вы не знакомы с этим синтаксисом, выполните поиск «троичный оператор».

  • Вы, конечно, захотите провести некоторую проверку ваших значений, если это еще не сделано.

  • Возможно, вы захотите поместить значения в другую таблицу вместо того, чтобы использовать «тип SET», но это зависит от вас, и на этом этапе у вас, вероятно, еще есть пара вещей, которые нужно выучить, поэтому я не хочу вас засыпать много информации ;-)

0
Michael Muryn 28 Май 2017 в 07:11