今天我在定义类别时遇到了这个错误。
类别的定义如下:
$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
替换为行上传者下填写的有效用户名。
手动它正在运作。那问题应该在哪里呢?任何想法?
答案 0 :(得分: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";
...
注意最后一个类别中的元字符(“ - ”)。只是说'...;)
答案 1 :(得分:2)
首先,它似乎是$categorie
,$cat
,所以为什么需要这些代码?
其次,字符串应始终用引号('或“)表示
这样的事情应该涵盖它:
if (isset($_GET['categorie']) && is_string($_GET['categorie'])) {
$cat = $_GET['categorie'];
}
答案 2 :(得分:1)
你在常量中使用连字符(我希望它们是常量)。它被解释为减法,即Pentru-Copii
是Pentru
的值减去Copii
的值。
我假设来自$_GET['categorie']
的类别是数字。最好创建一个数组并使用它来查找值:
$categories = array(
264 => 'Aventura',
621 => 'Dragoste',
...
);
$cat = $categories[ $_GET['categorie'] ];
或者,如果类别始终是字符串,则可以$cat = mysql_real_escape_string( $_GET[ 'categorie' ] )
。
答案 3 :(得分:1)
任何想法
是否曾尝试打印出结果查询并在phpmyadmin中运行?并将它与你在phpmyadmin中制作的那个进行比较?
这样的elseif列表也没有意义 单行
$cat = mysql_real_escape_string($_GET['categorie']);
就够了
答案 4 :(得分:1)
嗯......那里有那些常数?
你不应该而不是if-elseif fest做类似的事情:
$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();
答案 5 :(得分:0)
编辑。
首先从MySQL查询中准备一个数组,然后使用php函数搜索数组:
$categorie=$_GET['categorie'];
if(in_array($allowedCategories, $categorie)){
$cat = $categorie;
}
就是这样。