2013-12-23 15 views
0

林:

$id=$_GET['id']; 
$n = $_GET['n'];   
switch ($id) { 
    case 0: 
     include("news.php"); 
     break;  
    case 1: 
     include("newsdetail.php?n=".$n); 
     break;                        
    default: 
     include("news.php"); 
} 

在news.php i顯示了所有現有的消息是這樣的:

while($myrow = mysqli_fetch_array($result)){ 
    echo "<table> 
      <tr> 
      <td><img width='200' heigth='115' src='images/".$myrow['smallimage'].".jpg'/></td> 
      <td> 
      <b>".$myrow['title']."</b> 
       <br /> 
      <i>By ".$myrow['author'].", ".$myrow['date']."</i> 
       <br /> 
      ".$myrow['preview']."<br> 
      <a href='index.php?id=1&n=".$myrow['id']."'><b>READ</b></a> 
      </td> 
      </tr> 
      </table>"; 
} 

而且insidetails.php:

$idnews = $_GET['n']; 
$sql = "SELECT * FROM news WHERE id='$idnews'"; 
$result = mysqli_query($db,$sql); 
while($myrow = mysqli_fetch_array($result)){ 
    echo $myrow['title']."<br> 
      <i>Por ".$myrow['author']."</i><br> 
      ".$myrow['date']."<br> 
      <img src='images/".$myrow['bigimage'].".jpg'> 
      ".$myrow['body'].""; 
} 

當我嘗試這個,我得到一個URL像.../index.php?id=1&n=1,但目前尚無CON帳篷。單獨測試時一切正常。 是否有可能做出這樣的事情,並使其工作?

+2

我不認爲你可以通過查詢字符串爲'include',但你可以只包括文件,然後使用'$ _GET'得到'N'再次證明文件中。 – naththedeveloper

+1

@FDL的確是對的。 'file_get_contents'將起作用,但你不包括它。 – jeremy

回答

6

你不能這樣做會有這樣的:

case 1: 
    include("newsdetail.php?n=".$n); 
    break;         

這將讓PHP試圖找到一個叫做newsdetail.php?n=1文件,因此沒有顯示出來沒有內容。

但是沒有必要這樣做;您包含的文件仍然可以訪問$ _GET變量 - 比如$ _POST等,它們是全局變量,所以可以在代碼中的任何地方訪問。

只是一個注意要警惕;您將$_GET中的值直接傳遞到查詢中。這可以解決SQL注入問題。你應該看看使用mysqli_或PDO,它們都可以幫助你編寫更安全的代碼。

+0

我只刪除了'n =「。$ n',並且完美地工作了!謝謝你的澄清和提醒,生病了會做點什麼 –

+0

我很高興能幫上忙,如果你需要更多的幫助,感覺免費問! – andrewsi

1

你的代碼有很多問題。我會盡力一一解決。

  • 首先,你是廣泛開放的SQL Injection。始終使用 準備好的語句和參數化查詢。

  • 您正在將SQL與您的邏輯甚至演示代碼混合使用。你應該把它放在完全不同的班級上,因爲每個班級都應該有一個責任。這也使得你的代碼更易於維護,你可以重複使用你的代碼而不是粘貼它(違反DRY原則)。這個概念的一個例子是MVC模式。

  • 要訪問你的應用程序的不同部分,你應該使用front controller模式(看起來你已經這麼做了)。這很好。現在你可以使用一個autoloader這將自動加載所需的文件。我推薦使用namespaces並使用PSR-0 autoloader

  • 現在您仍然需要將請求路由到正確的類方法(如果您使用的是MVC,則爲controller)。我建議你使用這樣的許多可用庫之一,例如klein。如果你想自己寫,至少看看一些路由庫的代碼,看看他們是如何做的。

我知道這很多,但我希望您花時間瞭解我上述的概念。如果你第一次不瞭解所有事情,別擔心。如果您有任何問題,請離開。

+1

你給了我很多作業哈哈非常感謝信息,我有很多空閒時間,所以我會閱讀這之前繼續編碼我的網頁。謝謝! –