Как отфильтровать заданное значение от выборки из SQL в PHP - PullRequest
0 голосов
/ 10 декабря 2011

Я с трудом пытаюсь это сделать.У меня есть этот код здесь:

function submit_category_list()
{
    $sql_query2 = "SELECT * FROM categories WHERE status = 1 ORDER by title ASC";
    $result2 = mysql_query($sql_query2);
    if (mysql_num_rows($result2))
    {
        while ($row = mysql_fetch_array($result2))
        {
            $catid = $row['id'];
            $catname = $row['title'];
            $catname = stripslashes($catname);
            $content = $content . "<option value=\"$catid\">$catname</option>";
        }
    }
    return $content;
}

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

Редактировать: Я нашел этот код вФайл проверки формы, который является лучшим подходом для предотвращения подачи категории, но я просто не знаю, с чего начать и что делать:

// Check to see if the URL is banned.
         $array=parse_url($contenturl2);
          $domaincheck = $array['host'];
          $domaincheck1 = str_replace("www.", "", $domaincheck);
          $domaincheck2 = "http://".trim($domaincheck1);
          $domaincheck3 = "http://www.".$domaincheck2;


          $query = "select id from banned where (url = '$contenturl' || url = '$contenturl2' || url = '$domaincheck' || url = '$domaincheck1' || url = '$domaincheck2' || url = '$domaincheck3') && url != ''";
          $result = mysql_query($query);
            if (mysql_num_rows($result)>0)
            {
            $_SESSION['submitstatus'] = "Cannot Approve Submission";
            header('Location: '.$frompage.'');
            exit;
            }

Я ценю любую помощь с этим

Ответы [ 2 ]

2 голосов
/ 10 декабря 2011

Обновите ваш запрос, чтобы исключить эту конкретную категорию (при условии, что в вашей таблице есть столбец cat_id):

SELECT * FROM categories
  WHERE status = 1 AND cat_id <> the_id_to_exclude
  ORDER by title ASC

Но убедитесь, что вы также проверили отправку! Пользователи могут и будут подделывать GET или POST, чтобы указать, что они хотят, поэтому проверка перед вставкой обязательна . (Наряду со всеми обычными средствами защиты SQL-инъекций.)

1 голос
/ 10 декабря 2011

Вам нужно сделать больше, чем просто не показывать эту категорию пользователю.Вредоносный (т. Е. Злой) пользователь может в любом случае отправлять данные этого типа вашему обработчику отправки, и поэтому вам также следует добавить проверку безопасности, когда содержимое передается в любую категорию.

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

  • Измените условие SQL где для фильтрации для некоторого значения столбца categories, которое вам не нужно.

    Дляпример, отфильтровывая все категории с помощью title "hello world";WHERE status = 1 AND title <> 'hello world'

    фильтрация по идентификатору: WHERE STATUS = 1 AND id <> 42 (где 42 - релевантный идентификатор)

  • Выполнить фильтрацию в вашем PHP (не очень рекомендуется, mysql)лучше справляется с такими проблемами).

.

while ($row = mysql_fetch_array($result2))
{
  $catid = $row['id'];
  $catname = $row['title'];
  $catname = stripslashes($catname);

  if ($row['title'] != 'hello world')
    $content = $content . "<option value=\"$catid\">$catname</option>";
}
...