使用$ _GET后,变量和字符串不会回显

时间:2018-08-03 13:57:33

标签: php variables

我目前正在为MAMP托管的学校项目编写一个电子商务网站,我需要使用$ _GET变量将产品框链接到描述页面。当我单击这些框时,它们都成功链接到details.php页面。但是,重定向的页面是空白的,只有背景颜色和我的导航栏。 php代码不回显任何字符串或变量,甚至html文本。我已经使用了php语法检查器来检查代码,并且没有错误!我很困惑。

非常感谢您的帮助。

以下代码是我的详细信息页面上的php文本。

   

 <?php
    if(isset($_GET['comp_id'])){

	$company_id = $_GET['comp_id'];
	
	$sql = "SELECT * FROM company WHERE id = '$company_id;";
	$result = mysqli_query($conn,$sql);
	
	while ($row = mysqli_fetch_array($result)){
		$comp_image = $row ['image'];
		$comp_name = $row ['name'];
		$comp_location= $row ['location'];
		$comp_position = $row ['position'];
		$comp_duration = $row ['duration'];
		$comp_description = $row['description'];
		$comp_applink= $row['form'];
		
		echo "
		<h1>Hello</h1>
		";
	}
}
?>

3 个答案:

答案 0 :(得分:1)

if(isset($_GET['comp_id'])){

    $company_id = $_GET['comp_id'];

    $sql = "SELECT * FROM company WHERE id = '$company_id'";
    $result = mysqli_query($conn,$sql);

    while ($row = mysqli_fetch_array($result)){
        $comp_image = $row ['image'];
        $comp_name = $row ['name'];
        $comp_location= $row ['location'];
        $comp_position = $row ['position'];
        $comp_duration = $row ['duration'];
        $comp_description = $row['description'];
        $comp_applink= $row['form'];

        echo "
        <h1>Hello</h1>
        ";
    }
}

这不是最好的方法,您的脚本可以进行sql注入,但可以尝试达到目的,并且考虑到$company_id是整数,可以这样做。阅读mysqli中准备好的语句,以使您的代码更安全。您的错误是您缺少单引号,但如果处理字符串数据,则可能会出现更多问题。

$stmt = $mysqli->prepare("SELECT * FROM company WHERE id =?")
$stmt->bind_param("i", $company_id);
$result=$stmt->execute();

这是一个基于您的代码的示例,用于准备的语句。要访问它,您需要获取日期(可以在while循环内完成),例如:

while ($row = $result->fetch_assoc()) {
        // do things
    }

您可以了解有关 mysqli提取 here

的更多信息

答案 1 :(得分:0)

您在这里缺少引号:

$sql = "SELECT * FROM company WHERE id = '$company_id;";

添加引号:

$sql = "SELECT * FROM company WHERE id = '$company_id'";

不带引号的查询将无效,并且mysqli_query失败时将返回false:

  

失败时返回FALSE。要成功执行SELECT,SHOW,DESCRIBE或   EXPLAIN查询mysqli_query()将返回mysqli_result对象。对于   其他成功的查询mysqli_query()将返回TRUE。

http://php.net/manual/en/mysqli.query.php

由于它返回false,因此条件中的while将变为false,并且while块将永远不会执行。

此外,如果您不确定所使用的参数是否正确转义,则您的网站可能会受到黑客攻击。使用mysqli_ *,您需要查看mysqli_real_escape_string

编辑

尽管我的建议是使您能够快速解决问题,但正如David在评论部分中指出的那样,您确实需要使用参数化查询。他给出了这个有用的链接:How can I prevent SQL injection in PHP?

答案 2 :(得分:0)

首先检查您的标记中是否提到method =“ GET”。并在$ sql查询中使用以下更改。

   

 <?php
    if( isset($_GET['comp_id']) ) {
	$company_id = $_GET['comp_id'];    	
	$sql = "SELECT * FROM company WHERE id = '".$company_id."'";
	$result = mysqli_query($conn,$sql);
	
	while ( $row = mysqli_fetch_array($result) ){
		$comp_image = $row['image'];
		$comp_name = $row['name'];
		$comp_location= $row['location'];
		$comp_position = $row['position'];
		$comp_duration = $row['duration'];
		$comp_description = $row['description'];
		$comp_applink= $row['form'];
		
		echo "<h1>Hello</h1>";
	}
    }
?>

我希望这对您有所帮助,请检查并告知我。