2011-12-29 38 views
0

我有一個名爲index.html的頁面,它從用戶接收一些變量,當用戶提交它們時,它會轉到下一頁(result.php)結果。 php發佈index.html表單中的變量。結果.php連接到數據庫運行一個查詢等所有這些工作正常。在results.php看起來是這樣的:mysql_fetch_array()向自我提交表單時出錯

<?php 
$h = "localhost"; 
$u = "root"; 
$p = "******"; 
$d = "********"; 
//connectipn to mysql 
$conn = mysql_connect($h, $u, $p); 
//connection to database 
mysql_select_db($d); 
$code = $_POST['code']; 
$usage = $_POST['usage']; 
$days = $_POST['days']; 
$value = $_POST['value]; 
$sql_runners_up = "SELECT code 
from some_table 
where number = $value;" 
$plans['p_h10'] = array(); 
$rs2 = mysql_query($sql_runners_up, $conn); 
while ($row = mysql_fetch_array($rs2)) 
{ 
    $plans['p_h10'][] = $row["p_h10"]; 
} 
?> 

的results.php也有一個表格,用戶可以更新在查詢中使用的一些領域。我目前有看起來像這樣的形式...

<form action="results.php" name="filter" method="post"> 
usage:<input name="" type="search" value="" /><br/> 
days:<input name="" type="search" value="" /><br/> 
<input name="" type="checkbox" value="" />value<br /> 
<input type="submit" value="submit" name="submit" /> 
</form> 

即使只要用戶提交我得到一個錯誤(我已經嘗試填寫表單使用真正的變量,但仍然得到了形式的空白同樣的錯誤)

警告:mysql_fetch_array():提供的參數不是一個有效的MySQL 結果資源

錯誤指圍繞while語句行。我的猜測是,在表單提交後或者整個results.php表單沒有被服務器提交/處理後,某些變量不會被傳遞。但說實話我真的不確定。任何幫助將不勝感激。

+0

您的代碼易受攻擊。查看一些關於SQLi的文章 – genesis 2011-12-29 10:38:37

回答

1

這是因爲mysql_query返回false。 此外,在你的代碼,你有一個語法錯誤

$value = $_POST['value']; 

而且,你的代碼是脆弱的。不要相信用戶的輸入!

所以,正確的代碼將

$value = intval($_POST['value']); 
-1

看起來像你這樣錯別字......

<?php 
    $h = "localhost"; 
    $u = "root"; 
    $p = "******"; 
    $d = "********"; 
    //connectipn to mysql 
    $conn = mysql_connect($h, $u, $p); 
    //connection to database 
    mysql_select_db($d); 
    $code = $_POST['code']; 
    $usage = $_POST['usage']; 
    $days = $_POST['days']; 
    $value = $_POST['value']; // here 
    $sql_runners_up = "SELECT code 
    from some_table 
    where number = $value"; // and here 
    $plans['p_h10'] = array(); 
    $rs2 = mysql_query($sql_runners_up, $conn); 
    while ($row = mysql_fetch_array($rs2)) 
    { 
     $plans['p_h10'][] = $row["p_h10"]; 
    } ?> 

也是你的形式不張貼參數......因爲name屬性沒有設置

<form action="results.php" name="filter" method="post"> 
usage:<input name="usage" type="search" value="" /><br/> 
days:<input name="days" type="search" value="" /><br/> 
<input name="value" type="checkbox" value="" />value<br /> 
<input type="submit" value="submit" name="submit" /> 
</form> 
+0

爲什麼它會是一個錯字? – genesis 2011-12-29 10:40:18

0

首先,此行是無效的:

$value = $_POST['value]; 

應該$_POST['value'];

但是,當有,通常會出現此錯誤您的查詢中有錯誤,或連接不好。檢查你的mysql_connect() & mysql_select_db()設置,它可能是壞的。

1

嘗試這樣的:

$sql_runners_up = "SELECT * from some_table where number = '$value';" 

,並檢查$value已包含該值..

編輯:在上面的代碼我使用*其選擇所有字段,原因是看在你的代碼所做的:

$sql_runners_up = "SELECT code from some_table where number = $value;" 

,並獲取查詢您致電到字段名p_h10

while ($row = mysql_fetch_array($rs2)) 
{ 
    // didn't selected $row["p_h10"] in your query 
    $plans['p_h10'][] = $row["p_h10"]; 
} 
1

嘗試:

 

$value = (int) $value; 
$sql_runners_up = "SELECT code from some_table where number = $value"; 
$plans['p_h10'] = array(); 
$rs2 = mysql_query($sql_runners_up);