несколько динамически генерируемых флажков в PHP / MySQL - PullRequest
0 голосов
/ 25 июня 2009

У меня есть ряд флажков, которые выходят из одной таблицы 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);
}


?>

И это возвращаемая ошибка:

Примечание: неопределенный индекс: стратегия в /casestudyform.php в строке 66 Ошибка: у вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с '' study_id ',' имя_страницы ') VALUES (' 1 ',' N; ')' в строке 1

Кто-нибудь знает, как это исправить? или лучший способ сделать это?

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 25 июня 2009

Попробуйте это:


$query ="INSERT INTO sslink (study_id, strategyname) VALUES ('".$_GET['id']. "', '" .$strategy. "')";
0 голосов
/ 25 июня 2009

У вас есть две ошибки, которые не связаны друг с другом:

Примечание: неопределенный индекс: стратегия в /casestudyform.php в строке 66

Как указывает @montooner, это уведомление от PHP, поскольку массив $_POST не содержит значения для клавиши 'strategy'. То есть форма была отправлена ​​без флажка стратегии. Прежде чем ссылаться на него, вы должны проверить, существует ли ключ.

 if (array_key_exists('strategy', $_POST)) ...

Ошибка: у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '' study_id ',' имя_страницы ') VALUES (' 1 ',' N; ')' в строке 1

Это ошибка синтаксического анализа SQL. Вы поместили одинарные кавычки вокруг столбцов в своем выражении INSERT. В SQL одинарные кавычки ограничивают строковые константы, а не имена столбцов.

Если вам необходимо разделить имена столбцов (поскольку они содержат ключевые слова SQL, пробелы, специальные символы и т. Д.), Вы должны использовать обратные кавычки в MySQL или двойные кавычки в ANSI SQL.

Также будьте осторожны с SQL-инъекцией. Не думайте, что параметры HTTP-запроса содержат только целые или дружественные строки. Фильтр значений или экранирование их перед использованием в 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')";
0 голосов
/ 25 июня 2009

Неопределенный индекс предполагает, что $ _POST ['стратегии'] не было установлено. Не могли бы вы проверить, что она есть в вашей форме? Кроме того, эхо фактического запроса было бы неплохо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...