2011-09-23 56 views
-4

今天我得到了这个错误与定义类别。查询问题不起作用

类别被定义如下:

$categorie=$_GET['categorie'];  
if($categorie==nimic)  
$cat="nimic";  
elseif($categorie==Aventura)  
$cat="Aventura";  
elseif($categorie==Dragoste)  
$cat="Dragoste";  
elseif($categorie==Politiste)  
$cat="Politiste";  
elseif($categorie==Pentru-Copii)  
$cat="Pentru-Copii";  
elseif($categorie==Romanesti)  
$cat="Romanesti";  
elseif($categorie==Mistere)  
$cat="Mistere";  
elseif($categorie==Scient-Fiction)  
$cat="Scient-Fiction";  
elseif($categorie==Vampiri)  
$cat="Vampiri";  
elseif($categorie==Thriller)  
$cat="Thriller";  
elseif($categorie==Drama)  
$cat="Drama";  
elseif($categorie==Erotic)  
$cat="Erotic";  
elseif($categorie==Mitologie)  
$cat="Mitologie"; 

查询是:

$query="SELECT *  
FROM carte  
WHERE categorie='$cat'  
AND uploader='$username'  
ORDER BY data_ad  
DESC LIMIT $lista"; 

那么问题在于,在第一4 $cat工作时,正在显示的结果,可以被编辑。但在$cat的其余部分产生0文件进行编辑..

在phpMyAdmin我已经手动企图以谁不工作类别更换$cat检查查询和$username与下充满了有效的用户名行上传器。

手动它工作。那么问题出在哪里?任何想法?

回答

2

对于不使用引号的方式,我确实非常不舒服。我会推荐这个代替:

$categorie=$_GET['categorie']; 
if($categorie=='nimic') 
$cat="nimic"; 
elseif($categorie=='Aventura') 
$cat="Aventura"; 
elseif($categorie=='Dragoste') 
$cat="Dragoste"; 
elseif($categorie=='Politiste') 
$cat="Politiste"; 
elseif($categorie=='Pentru-Copii') 
$cat="Pentru-Copii"; 
... 

请注意最后一个类别中的元字符(“ - ”)。只是说'...;)

+0

在分类下的db中,我推出了两个分类为“ - ”的分类,查询在“Pentru-Copii”中工作,但在该分类后显示我的结果在下一个分类 – Darius

+0

@Darius - 为什么不采取保罗的建议并在你的字符串周围使用引号,看看这是否能解决你的问题? – Kev

1

你在常量中使用连字符(我希望他们是常量)。它被解释为减法,即Pentru-CopiiPentru的值减去Copii的值。

我假设来自$_GET['categorie']的类别是数字。它最好能够创建一个数组,并用它来查找值:

$categories = array(
    264 => 'Aventura', 
    621 => 'Dragoste', 
    ... 
); 

$cat = $categories[ $_GET['categorie'] ]; 

或者,如果类始终是一个字符串,你可以这样做$cat = mysql_real_escape_string($_GET[ 'categorie' ])

+0

绝对正确。这就是我在帖子中试图说的。两个问题:a)“dash == subtract”问题(通过不引用文字),以及b)为什么复杂if/else块(或$ categories []数组)如果“_ $ GET ['categorie']”总是== $猫? – paulsm4

2

首先看起来好像$categorie是,$cat是,那为什么需要这个代码?

if (isset($_GET['categorie']) && is_string($_GET['categorie'])) { 
    $cat = $_GET['categorie']; 
} 
1

任何IDEEA

曾经试过:

其次,字符串应该始终用引号(”或“)

这样的事情应该覆盖它记打印出你的结果查询并在phpmyadmin中运行它,并将它与你在phpmyadmin中创建的一个进行比较?

在这样的elseif列表中也没有任何意义。
单行

$cat = mysql_real_escape_string($_GET['categorie']); 

足够

1

电解金属锰..那些常量呢?

不应该你,而不是,如果 - elseif的巨星做这样的事情:

$category=$_GET['categorie']; 
$data = array( 
    1 => 'nimic', 
    2 => 'Aventura', 
    3 => 'Dragoste', 
    4 => 'Politiste', 
     etc ... 
); 

if (!array_key_exists($category , $data) ) 
{ 
    $category = 1 // set default category 
} 

$cat = $data[ $category ]; 

而且..请,学会用PDO准备的语句:

$db = new PDO('mysql:host=localhost;dbname=demo', 'login', 'password'); 
$sth = $db->prepare(' 
    SELECT * FROM carte 
    WHERE categorie=:category AND uploader=:user 
    ORDER BY data_ad DESC LIMIT :limit' 
); 
$sth->bindParam(':category', $cat, PDO::PARAM_INT); 
$sth->bindParam(':user', $username , PDO::PARAM_STR); 
$sth->bindParam(':limit', $limit, PDO::PARAM_INT); 
$result = $sth->fetchAll(); 
+0

在代码中拥有数据库内容的副本有什么意义? –

+0

@ col-shrapnel什么副本?整个目录的 –

+0

。所有这些Politiste和nimic已经在数据库中。在代码中输入它有什么意义? –

0

编辑。

首先,你准备从MySQL查询数组,然后搜索数组用PHP函数:

$categorie=$_GET['categorie']; 

if(in_array($allowedCategories, $categorie)){ 
    $cat = $categorie; 
} 

这就是全部。

+0

它不是最干净的方式。制作数据库内容的手动拷贝没有意义。 –

+0

糟糕。没有看到查询。清晨,呵呵:) – avall