Я пытаюсь обновить запись с информацией из поля множественного выбора, я работал нормально, когда я использовал INSERT INTO для добавления новой строки, но теперь, когда я пытаюсь добавить ее в этот код, который используя mysql_real_escape_string(), он возвращает сообщение об ошибке внизу этого сообщения. Я предполагаю, что у него что-то не так со значением, которое я пытаюсь передать в него, но я не знаю, как отформатировать его, чтобы сделать PHP счастливым!
$query = "UPDATE studies
SET strategies = '" . mysql_real_escape_string($strategies) . "' WHERE id = '" . mysql_real_escape_string($id) . "'";
while($row = mysql_fetch_array($result)) {
$strategylist = $row['name'];
$strategyname = htmlspecialchars($row['name']);
$pagelink = str_replace(" ","_",$strategylist);
echo '<option value="<a href="strategies.php?strategy=' . $pagelink . '">'.$strategyname.'</a>" >' . $strategyname . '</option>' . '\n';
}
Предупреждение: mysql_real_escape_string() ожидает, что параметр 1 будет строкой, массив указан в строке 100 (это строка выше, которая запускает стратегии SET = '".....)
Похоже, что $strategy - это массив, а не строка. Поскольку у вас есть многоэкранный выбор, если они выбирают несколько элементов, $стратегии возвращаются как массив.
Это сводится к тому, как вы хотите сохранить несколько выборов в этом столбце единой базы данных. Если вы просто хотите добавить выделение вместе в одну большую строку, используйте команду implode():
// Sets strategies to a comma-separated list of selected strategies.
$query = "UPDATE studies
SET strategies = '" .
mysql_real_escape_string(is_array($strategies) ? implode(',', $strategies) : $strategies) . "'
WHERE id = '" . mysql_real_escape_string($id) . "'";
ETA:
В стороне, то, что вы здесь делаете, выглядит очень страшно. У вас есть html-ссылка для значения в опции окна выбора, которую вы затем сохраняете в базе данных (предположительно для отображения позже?).
Это действительно открывает себя для тривиальной атаки XSS, когда кто-то подает фальшивую форму со своими опциями, содержащими ссылки на сайт атаки, которые вы счастливо храните в своей БД и позже показываете на своем сайте.
Сохраните идентификатор (или список идентификаторов в вашем случае) или что-то в своей базе данных, а затем создайте ссылки позже, когда вам нужно их отобразить.
Он жалуется, что $Strategies/$id является массивом и должен быть строкой.
Я думаю,
$id не является строкой
mysql_real_escape_string($id)