2013-02-12 1 views
0

Я получил этот код для получения названия категории и показать детали в этой категории:

<?php 
// This block grabs the whole list for viewing 
$cat_list=""; 
$cat=$_POST['cat']; 
$cat_sql="SELECT * FROM products,prod_cat,categories WHERE categories.id=prod_cat.cat_id AND products.id=prod_cat.prod_id AND categories.id=$cat"; 
$cat_query=mysql_query($cat_sql) or die(mysql_error()); 
$results=mysql_fetch_assoc($cat_query); 
$cat_list= "$results[cat_name]"; 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>show</title> 

</head> 
<?php echo $cat_list; ?> 

</html> 

это дает мне эту ошибку:

Notice: Undefined index: cat in show.php on line 12

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Все, что мне нужно, это показать cat_name из категорий из переменной $cat, как show.php?cat=6.

+0

вам нужно '$ _GET ['cat']' не писать, а лучше только вызывать свою базу данных после: a) вы сантитировали (экранировали) вашу переменную $ cat, b) $ cat не пуст() – Najzero

+0

переменная как шоу .php? cat = 6 - запрос запроса, попробуйте использовать массив $ _GET – BattleBit

+0

используйте $ _GET ["cat"] вместо $ _POST ["cat"]; – ripa

ответ

0

Делай так,

$cat = ""; 
if(isset($_GET['cat'])) { 
    $cat=$_GET['cat']; 
} 
+0

РАБОТАЕТ КАК ШАРМ ףׁ – user2003332

+0

Теперь мне нужно показать изображение продукта, который назван с номером id. не работает: $ cat_list. = "Идентификатор продукта: $ id - $ product_name -
"; – user2003332

0
  1. Вы не получите $ значение кота, изменить его $_GET;

  2. Чтобы убедиться, ваш запрос не ломается, как, что в будущем, объявление ' идентификаторам тоже:

SELECT 
    * 
FROM 
    products 
    ,prod_cat 
    ,categories 
WHERE 
    categories.id=prod_cat.cat_id 
    AND products.id=prod_cat.prod_id 
    AND categories.id='$cat'
0
show.php?cat=6 

в вашем URL означает, что вы используете переменную GET , использовать

$_GET['cat'] 

Кроме того:

  1. ПОЖАЛУЙСТА сделать что-то о безопасности. Люди могут поместить все, что захотят, в эту переменную GET, чтобы они могли добавлять то, что они хотят в ваш SQL! ЭТО ПЛОХО!
  2. Пожалуйста, прочитайте уведомление на странице руководства PHP по функциям mysql*: они устарели и не должны использоваться. Использовать PDO или MySQLi
1

$_GET и $_POST не то же самое. В этом случае вы пытаетесь получить доступ к коту в show.php?cat=6, поэтому вы должны использовать $_GET['cat'].

Вообще:

  • $ _GET извлекает переменные из строки запроса, или ваш URL.
  • $ _POST извлекает переменные из метода POST, такие как формы.

PHP.net руководство:
$ _GET - http://php.net/manual/en/reserved.variables.get.php
An associative array of variables passed to the current script via the URL parameters.

$ _POST - http://php.net/manual/en/reserved.variables.post.php
An associative array of variables passed to the current script via the HTTP POST method.

1

Первое использование $ _GET или $ _REQUST вместо $ _POST , А также убедитесь, что вы защищаете свой вход.Попробуйте эту функцию:

function protect($string){ 
    $string = urldecode($string); // url decode to make things like %20 into whitespace 
    $string = trim(strip_tags($string)); //remove whitespaces 
    $string = preg_replace("/'/", "", $string); //remove single quotes 
    return $string; 
} 

и использовать его как этот

$cat = protect($_REQUEST['cat']); 

Наконец, я думаю, что есть синтаксис здесь здесь. Эта линия здесь

$cat_list= "$results[cat_name]"; 

должны быть

$cat_list= $results['cat_name']; 

Он ищет постоянную называется cat_name. Ключи массивов всегда являются строками. Надеюсь, это поможет.

Смежные вопросы