Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从中生成一个变量?_Php_Mysql - Fatal编程技术网

Php 如何从中生成一个变量?

Php 如何从中生成一个变量?,php,mysql,Php,Mysql,最好的 我正在忙着做一个网站,但有一件事阻碍了我。。 我必须做一个真正的长搜索查询,我已经做了以下PHP代码: if($\u GET['genre']){ echo“从电影中选择*,其中“genre1`=”; foreach($_获取['grove']作为$grove) { $genres=数组(“活动”、“动画”、“Avontuur”、“纪录片”、“戏剧”、“厄洛蒂克”、“家庭”、“幻想”、“电影”、“恐怖”、“小米迪”、“米斯达德”、“穆齐克”、“神秘”、“欧尔洛格”、“路演电影”、“

最好的

我正在忙着做一个网站,但有一件事阻碍了我。。 我必须做一个真正的长搜索查询,我已经做了以下PHP代码:

if($\u GET['genre']){
echo“从电影中选择*,其中“genre1`=”;
foreach($_获取['grove']作为$grove)
{   
$genres=数组(“活动”、“动画”、“Avontuur”、“纪录片”、“戏剧”、“厄洛蒂克”、“家庭”、“幻想”、“电影”、“恐怖”、“小米迪”、“米斯达德”、“穆齐克”、“神秘”、“欧尔洛格”、“路演电影”、“浪漫”、“科幻”、“惊悚”、“西部”);
if(!in_数组($genre,$genres))
{
标题('位置:?错误=1');
} 
回显“'.$GREEP.”或“genre2`='.$GREEP.”如果(结束($\u GET['GREEP'])!=$GREEP)
{ 
“echo”或“genre1`=”;
} 
} 
echo“和'year`>'”、'year`>'、'year`>'、'year`>'、'year`>'、'year`>'、'year2'.“;”;
} 
其他的
{ 
echo“从电影中选择*,其中'year`>'”、'year`<'、'year`>'”、'year``.'、“$”将获得['year2']。”;”;
}
在这样的URL上:

127.0.0.1/querygenerator.php?genre%5B3%5D=Avontuur&genre%5B4%5D=Documentaire&genre%5B6%5D=Erotiek&year1=1900&year2=2014
它的输出如下:

SELECT * FROM movies WHERE `genre1` = 'Avontuur' OR `genre2` = 'Avontuur' OR `genre1` = 'Documentaire' OR `genre2` = 'Documentaire' OR `genre1` = 'Erotiek' OR `genre2` = 'Erotiek' AND `year` > '1900' AND `year` < '2014';
从以下电影中选择*,`genre1`='Avontuur'或`genre2`='Avontuur'或`genre1`='documentair'或`genre2`='documentair'或`genre1`='Erotiek'或`genre2`='Erotiek'和`year`>'1900'和`year`<'2014';
所以,我的问题是,我如何让一个PHP变量代表整个PHP变量,以便运行查询? 我可以用
file\u get\u contents
来实现这一点,但我想这并不安全

谢谢!
-Karim

只需连接到字符串评级器,而不是回显:

if($_GET['genre']) { 
  $sql = 'SELECT * FROM movies WHERE `genre1` = '; 
  foreach($_GET['genre'] as $genre) {
    $genres = array( "Actie", "Animatie", "Avontuur", "Documentaire", "Drama", "Erotiek", "Familie", "Fantasy", "Film", "Horror", "Komedie", "Misdaad", "Muziek", "Mystery", "Oorlog", "Roadmovie", "Romantiek", "Sciencefiction", "Thriller", "Western" );
    if (!in_array($genre, $genres)) {
      header('location: ?error=1');
      die(); 
    } 
    $sql = $sql . " '".$genre."' OR `genre2` = '".$genre."'"; 
    if(end($_GET['genre']) !== $genre) { 
      $sql = $sql . ' OR `genre1` = '; 
    } 
  } 
  $sql = $sql . " AND `year` > '".$_GET['year1']."' AND `year` < '".$_GET['year2']."';"; 
} else { 
  $sql = "SELECT * FROM movies WHERE `year` > '".$_GET['year1']."' AND `year` < '".$_GET['year2']."';"; 
}

echo $sql;
if($\u GET['genre']){
$sql='从电影中选择*,其中'genre1`=';
foreach($_获取['grove']作为$grove){
$genres=数组(“活动”、“动画”、“Avontuur”、“纪录片”、“戏剧”、“厄洛蒂克”、“家庭”、“幻想”、“电影”、“恐怖”、“小米迪”、“米斯达德”、“穆齐克”、“神秘”、“欧尔洛格”、“路演电影”、“浪漫”、“科幻”、“惊悚”、“西部”);
if(!in_数组($genre,$genres)){
标题('位置:?错误=1');
模具();
} 
$sql=$sql.“$GREEP.”或'genre2`='“$GREEP.”;
如果(结束($_GET['grove'])!==$grove){
$sql=$sql.'或'genre1`=';
} 
} 
$sql=$sql.”和'year`>'”、'year`>'”、'year`<'”、'year`>'”、'year`>'”、'year`>'”;
}否则{
$sql=“从电影中选择*,其中'year`>'”、'year`<'”、'year`>'”、'year`<'”、'year`>'”;
}
echo$sql;

是否要将数据库查询作为请求url的一部分进行传输?不要!当然,如果不像您那样转义请求参数,就不能这样做。这是一个一英里宽的安全问题,你打开!阅读“sql注入”和“准备好的语句”或至少是“转义”。我不确定您想要什么,但您可以用
$yourVar=
替换
echo
,并将其放在变量中?只做一篇文章,让代码在后面运行到您想要搜索的内容,这不是更明智吗?因为这样,你的URL栏会变得杂乱无章,很容易被注入。我想说的是,如果你使用那个邪恶的双引号来创建字符串,你可以将数组元素放入其中,比如:“element:{$array['element']}”我知道这个查询是不安全的,它只是一个测试代码,我将很快添加mysql\u real\u escape\u string函数:)你是个伟人:)