2016-03-02 37 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名稱值,但裏面使用$行,用同樣的告訴我們。 希望它有幫助