2011-11-14 109 views
-1

我想用自己的教程製作自己的論壇。我已經修復了很多錯誤,而且我還有1項工作要做。如何從網址獲取ID值?

當您在線程上發佈回覆時,它會將您的回覆保存在MySQL數據庫中。您的回覆將有一個int,與您回覆的線程ID相匹配,稱爲question_id。

我不能讓我的代碼從URL欄中獲取線程ID。

這些是兩行代碼是應該做的工作:

$id = $_GET['id']; 

$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')"; 

這是整個文件add_answer.php

<?php 

$host="XXXXXX"; // Host name 
$username="XXXXXX"; // Mysql username 
$password="XXXXXX"; // Mysql password 
$db_name="XXXXXX"; // Database name 
$tbl_name="XXXXXX"; // Table name 

// Connect to server and select database. 
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 

// Get value of id that sent from hidden field 
$id = $_GET['id']; 
var_dump($id); 

// Find highest answer number. 
$sql="SELECT MAX(a_id) AS Maxa_id FROM $tbl_name WHERE question_id='$id'"; 
$result=mysql_query($sql); 
$rows=mysql_fetch_array($result); 

// $result=mysql_query($sql) or die(mysql_error()); 

// add + 1 to highest answer number and keep it in variable name "$Max_id". if there no answer yet set it = 1 
if ($rows) { 
    $Max_id = $rows['Maxa_id']+1; 
} 
else { 
    $Max_id = 1; 
} 

// get values that sent from form 
$a_name=$_POST['a_name']; 
$a_email=$_POST['a_email']; 
$a_answer=$_POST['a_answer']; 

$datetime=date("d/m/y H:i:s"); // create date and time 

// Insert answer 
$sql2="INSERT INTO $tbl_name(question_id, a_id, a_name, a_email, a_answer, a_datetime)VALUES('$id', '$Max_id', '$a_name', '$a_email', '$a_answer', '$datetime')"; 
$result2=mysql_query($sql2) or die(mysql_error()); 

if($result2) 
{ 
    echo "Successful<BR>"; 
    echo "<meta http-equiv='refresh' content='4;url=index.php?content=main_forum' />"; 

    // If added new answer, add value +1 in reply column 
    $tbl_name2="forum_question"; 
    $sql3="UPDATE $tbl_name2 SET reply='$Max_id' WHERE id='$id'"; 
    $result3=mysql_query($sql3); 

} 
else { 
    echo "An error as occured. Please report this to administrator. ID: FAA01."; 
} 

mysql_close(); 
?> 
+1

$ _GET ['id']應該工作,如果你的URL看起來像/post.php?id=21,你的URL是怎麼樣的? – Niels

+5

你的代碼容易受到SQL注入攻擊,http://php.net/manual/en/security.database.sql-injection.php。 – kba

+2

我真的希望你不這樣做......如果你直接在你的SQL查詢中包含GET'id'變量,你的論壇不會持續很長時間... – user544262772

回答

1

如果形成由post送你應該得到該ID與:

$id = $_POST['id']; 
+0

爲我工作感謝良好的工作 – humphrey

1

您的$ _GET [id]應該在接觸mysql之前進行消毒。就目前而言,你處於數據庫攻擊的非常真實的危險之中。我建議使用PDO

它很難吸取重新學習的東西,但如果你正在學習,它最好做正確的事。

至於你的問題......我不知道。我會嘗試echo $ sql2;並確保查詢看起來正確。另外print_r($ _ GET)來查看你的數組。

2
  1. $_GET['id']是否存在?在中,它是否實際存在於URL中?什麼是確切的URL使用?仔細檢查有沒有在過程中的任何大寫字母,因爲你出現混合情況下,大量的(提示:只有在代碼中使用小寫字母)

  2. 瞭解addslashesmysql_real_escape_string,否則有人會降低服務器到一個融化的殘骸。

  3. 您有冗餘的錯誤檢查。

    $result2=mysql_query($sql2) or die(mysql_error()); 
    // ... 
    if($result2) {...} else {...} 
    

最後一點是多餘的,因爲如果$result2是假的,然後它已經死了。

2

您必須一次調試一件事!你說:

我不能讓我的代碼從url欄獲取線程ID。

所以首先要看的是瀏覽器的地址欄,其中的URL是。爲什麼要關心下一百行代碼,如果第一行不正確?如果你的線程ID是999,你想這個代碼來獲取這樣的ID:

$id = $_GET['id']; 

...你需要看到id=999在URL中,?符號(這是強制的)之後和#符號之前(這是可選的)。

如果ID是不是在這裏,你應該得到一個通知:

注意:未定義指數:ID

如果你沒有,你沒有正確配置PHP。最簡單的方法是找到你php.ini文件,設置這些指令:

error_reporting = E_ALL 
display_errors = On 

...並重新啓動Web服務器。

最後,學會使用var_dump()

+0

你的解釋保存了我的時間謝謝 – humphrey