У меня есть ряд флажков, которые выводятся из одной таблицы MySQL:
<?php
$result = mysql_query("SELECT * FROM strategies");
if (!$result) {
die("Database query failed: " . mysql_error());
}
while($row = mysql_fetch_array($result)) {
$strategylist = $row['name'];
$strategyname = htmlspecialchars($row['name']);
echo '<input type="checkbox" name="strategy[]" value="' . $strategylist . '" />' . $strategyname;
}
?>
Я хочу иметь возможность хранить несколько "стратегий" для каждой строки в таблице "исследования", поэтому я использую другую таблицу (sslink) для хранения идентификатора исследования и названия стратегии. Отчасти это объясняется тем, что будет постоянно возрастать количество "стратегий", поэтому их необходимо сохранить в базе данных. Это код, который я использую в настоящее время:
<?php
if(isset($_POST['update1']))
{
$strategy=serialize($_POST['strategy']); //line 66, where the warning is happening
if(!get_magic_quotes_gpc())
{
$strategy = addslashes($strategy);
}
// update the article in the database
$query ="INSERT INTO sslink('study_id', 'strategyname') VALUES ('".$_GET['id']. "', '" .$strategy. "')";
mysql_query($query) or die('Error : ' . mysql_error());
$cacheDir = dirname(__FILE__) . '/cache/';
$cacheFile = $cacheDir . '_' . $_GET['id'] . '.html';
@unlink($cacheFile);
@unlink($cacheDir . 'index.html');
echo "<b>Article '$title' updated</b>";
$strategy = stripslashes($strategy);
}
?>
И эта ошибка возвращается:
Примечание: Undefined index: стратегия в /casestudyform.php в строке 66 Ошибка: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с '' study_id ',' strategyname '). VALUES (' 1 ',' N; ')' в строке 1
Кто-нибудь знает, как это исправить? или лучший способ сделать это?
Спасибо заранее!
Попробуйте следующее:
$query ="INSERT INTO sslink (study_id, strategyname) VALUES ('".$_GET['id']. "', '" .$strategy. "')";
У вас есть две ошибки, которые не связаны друг с другом:
Примечание: Undefined index: стратегия в /casestudyform.php в строке 66
Как отмечает @montooner, это уведомление относится к PHP, потому что массив $_POST
не содержит значения для ключа 'strategy'
. То есть форма была отправлена без проверки флажка стратегии. Вы должны проверить, существует ли ключ, прежде чем пытаться ссылаться на него.
if (array_key_exists('strategy', $_POST)) ...
Ошибка: у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса, используемого рядом с '' study_id ',' strategyname '). VALUES (' 1 ',' N; ')' в строке 1
Это ошибка синтаксического анализа SQL. Вы поставили одинарные кавычки вокруг столбцов в инструкции INSERT. В SQL одиночные кавычки ограничивают строковые константы, а не имена столбцов.
Если вам нужно разграничить имена столбцов (поскольку они содержат ключевые слова SQL, пробелы, специальные символы и т.д.), вы должны использовать обратную кавычку в MySQL или двойные кавычки в ANSI SQL.
Также будьте осторожны с SQL-инъекцией. Не предполагайте, что параметры HTTP-запроса содержат только целые числа или дружественные строки. Filter значения или escape их прежде чем использовать их в SQL. Функция addslashes()
не является хорошим решением для защиты от SQL-инъекций.
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT);
$strategy_esc = mysql_real_escape_string($strategy);
$query ="INSERT INTO sslink(`study_id`, `strategyname`)
VALUES ($id, '$strategy_esc')";
Undefined указывает, что $_POST ['strategy'] не был установлен. Могли бы вы сделать проверку здравомыслия, что у вашей формы есть это? Кроме того, эхо реального запроса было бы приятным.