2016-03-02 82 views
2

我试图显示数据库中的每个工作记录,当用户单击记录时,它将继续在新记录上显示该记录的工作描述页。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注入,我打算很快修复它:) 任何人都可以提供一个解决方案或把我放在正确的轨道上?

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

UPDATE

我已经把大家的建议 - 谢谢你,但我的“showjob”页面仍然没有显示任何东西。这是我的新代码:

$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>'; 
       } 
+1

你错过了'$结果= $ pdo-> query($ sql);'和foreach'应循环'$ results as $ row' –

+0

*好奇:*您是否在这里和同时使用带有*** PDO的'mysql_' ***?以及您使用哪个MySQL API进行连接? –

+0

@ Fred-ii-我不确定如果我理解你的问题,我是一个用PHP新手,但我使用PDO来连接 –

回答

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

"This extension was deprecated in PHP 5.5.0, and it was removed in PHP 7.0.0."

你需要在这里使用什么是为了逃避数据,这是你正在寻找在这里做什么准备语句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,则错误报告会抛出你类似如下的内容:

Fatal error: Call to undefined function mysql_real_escape_string()...

+0

Upvote努力和正确。这应该确实被标记为接受。 – DaSourcerer

+0

@DaSourcerer谢谢,*欢呼* –

+0

@FirstOne好。我不会再给它一个大胆的排版,然后;-)编辑:嘿...你去哪里了?大声笑 –

0

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

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

到:

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

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

0

您正在通过这项工作id参数为id。但是,在获取特定作业的ID时,您会从$_GET超全局中检索job_id$_GET['id']而不是$_GET['job_id']应该工作。 PS:正如Alex指出的那样,实际上通过$results = $pdo->query($sql)发出查询也可能有所帮助。接着迭代foreach($results as $row)。虽然应该永远只能是一个结果......

0

似乎

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

您正在使用$ PDO名称值,但里面使用$行,用同样的告诉我们。 希望它有帮助