PHP - 根据新页面上的用户选择显示MySQL数据

时间:2016-03-02 18:46:01

标签: php mysql

我正在尝试显示数据库中的每个作业记录,当用户点击记录时,它会继续在新页面上显示该记录的作业说明。

在我目前的状态下,我设法显示每个作业,点击它们会将用户引导到" showjob.php?id ="。我的问题是它没有显示我的工作信息。

包含作业列表的页面:此作品

$results = $pdo->query('SELECT * FROM jobs');
foreach ($results as $row) {
    echo '<a class="job_listing_href" href="showjob.php?id="' . $row['job_id'] . '><div id="job_listing">' . $row['job_title'] . '   ' 
            . $row['cat_job'] . '</div><br/><br/>';
}

包含个人职位信息的页面:

    $pkey = mysql_real_escape_string($_GET['job_id']);
    $sql = "SELECT * FROM jobs WHERE job_id='$pkey'";
    foreach ($results as $pdo) {
        echo '<div id="job_listing">' . $row['job_title'] . '   ' . $row['cat_job'] . '</div><div id="job_listing_content">' . $row['job_desc'] . 
        '</div>';
    }

它与我的job_desc无关,因为我可以将它实现到我的上一页,它列出来就好了。我的猜测是它与我的$_GET有关,但不确定。

另外作为旁注,我知道我的网站容易受到SQL注入攻击,我很快就会修复它:) 任何人都可以提供解决方案或让我走上正确的轨道吗?

感谢任何花时间帮助我的人!

更新

我已经接受了所有人的建议 - 谢谢你,但是我的&#34; showjob&#34;页面仍然没有显示任何内容。这是我的新代码:

$pkey = mysql_real_escape_string($_GET['id']);
        $sql = "SELECT * FROM jobs WHERE job_id='$pkey'";
        $results = $pdo->query($sql);
            foreach($results as $row) {
                echo '<div id="job_listing">' . $row['job_title'] . '   ' . $row['cat_job'] . '</div><div id="job_listing_content">' . $row['job_desc'] . 
                '</div>';
                }

4 个答案:

答案 0 :(得分:2)

您在使用PDO进行连接时使用mysql_real_escape_string()混合MySQL API,因此在连接/查询相同代码时无法一起使用这些API。

  • 旁注:理论上您可以使用旧版本的PHP,但从PHP 7.0开始,mysql_ API已被删除,因此如果是这样的话,您肯定无法在此处使用它

参考:http://php.net/manual/en/function.mysql-real-escape-string.php

  

&#34;此扩展在PHP 5.5.0中已弃用,并已在PHP 7.0.0中删除。&#34;

您需要在这里使用的是PDO准备语句以逃避数据,这是您希望在此处执行的操作。

$pdo = new PDO("...");

if(!empty($_GET['job_id'])){

$pkey = $_GET['job_id'];
$statement = $pdo->prepare("SELECT * FROM jobs WHERE job_id = :jobid");
$statement->execute(array(':jobid' => $pkey));

while($row = $statement->fetch(PDO::FETCH_ASSOC)) {
    // echo $row['field1'].' '.$row['field2']; //etc... taken from an example, sorry.
        echo '<div id="job_listing">' . $row['job_title'] . '   ' . $row['cat_job'] . '</div><div id="job_listing_content">' . $row['job_desc'] . 
    '</div>';
}

}

else{
   echo "GET is empty, check for errors.";
}

如果您还没有这样做,请检查错误。

参考文献:

PDO参考:

<强>脚注:

我注意到您正在使用href="showjob.php?id但您正在使用$_GET['job_id']数组。

  • id!= job_id

如果你仍在使用这些需要匹配,那么你将失败。

错误报告会告诉你这件事。

error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Then the rest of your code

旁注:只应在暂存时进行显示错误,而不是生产。

其他说明:

如果您的服务器不支持mysql_ MySQL API,那么错误报告会抛出类似以下内容:

  

致命错误:调用未定义的函数mysql_real_escape_string()...

答案 1 :(得分:0)

结果未显示,因为您的变量名称混淆了,请参阅以下修订版: 变化:

 $pkey = mysql_real_escape_string($_GET['job_id']);

为:

 $pkey = mysql_real_escape_string($_GET['id']);

更新:您也遗失:$results = $pdo->query($sql);

答案 2 :(得分:0)

您正在将作业ID参数传递为id。但是,在获取特定作业的ID时,您需要从job_id超全局中检索$_GET。 <{1}}代替$_GET['id']应该有用。

PS:正如Alex指出的那样,实际上通过$_GET['job_id']发出查询也可能有所帮助。然后迭代$results = $pdo->query($sql)。虽然应该只有一个结果......

答案 3 :(得分:0)

似乎

foreach ($results as $pdo) {
                echo '<div id="job_listing">' . $row['job_title']

在foreach中你使用的是$ pdo名称值,但在里面使用$ row,请使用相同的告诉我们。 期待它的帮助