我正在尝试显示数据库中的每个作业记录,当用户点击记录时,它会继续在新页面上显示该记录的作业说明。
在我目前的状态下,我设法显示每个作业,点击它们会将用户引导到" 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>';
}
答案 0 :(得分:2)
您在使用PDO进行连接时使用mysql_real_escape_string()
混合MySQL API,因此在连接/查询相同代码时无法一起使用这些API。
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']
应该有用。
$_GET['job_id']
发出查询也可能有所帮助。然后迭代$results = $pdo->query($sql)
。虽然应该只有一个结果......
答案 3 :(得分:0)
似乎
foreach ($results as $pdo) {
echo '<div id="job_listing">' . $row['job_title']
在foreach中你使用的是$ pdo名称值,但在里面使用$ row,请使用相同的告诉我们。 期待它的帮助