2009-12-16 104 views
0

更新:我縮小了它,當我在header.php文件中刪除了這個標籤時,它可以工作,有人可以請解釋這一點。PHP更新表插入空白字段

<script src="#" type="text/javascript"></script> 

嗨我有一個相當惱人的問題,我的PHP代碼。我正在嘗試從表單更新一個php數據庫,但是當我這樣做時,數據庫中的字段在提交後變爲空。請幫忙!你可以在這裏查看它的動作http://andcreate.com/shoelace/admin/edit1.php點擊右邊的列表來編輯它們,看看會發生什麼。

<?php 
include("header.php"); 

echo "<h2>Edit Posts</h2>"; 

echo "<div id='editNav'>"; 
echo "<p>Choose Post to Edit</p>"; 




//////////GET ALL RECORDS AND BUILD A NAV SYSTEM FROM THEM//////// 
$results = mysql_query("SELECT * FROM shoeData "); 



while($row = mysql_fetch_array($results)){ 




$id = $row['id']; 
$name = $row['name']; 
$about = $row['about']; 

echo "$date <a href=\"" . $_SERVER['PHP_SELF'] . "?id=$id" . "\">" . substr($name, 0, 40) . " </a> <br/> "; 


} 

$thisID = $_GET['id']; 

if(!isset($thisID)){ 
$thisID = 22; 

} 




//////////FINISH ALL RECORDS AND BUILD A NAV SYSTEM FROM THEM//////// 

echo "</div>"; 



///////IF USER SUBMITS CHANGES UPDATE THE DATABASE////////// 
//has user pressed the button 
$update = $_GET['update']; 

if($update == "yes") { 

$name = $_POST['name']; 

$about = $_POST['about']; 

$company = $_POST['company']; 

$buy = $_POST['buy']; 



//update data for this record 
$sql = "UPDATE shoeData SET 
name = \"$name\", 
about = \"$about\", 
company = \"$company\", 
buy = \"$buy\" 
WHERE id= $thisID"; 
$thisUpdate = mysql_query($sql) or die(mysql_error()); 


} 




///////END IF USER SUBMITS CHANGES UPDATE THE DATABASE////////// 




/////////// HERE WE GET THE INFO FOR ONE RECORD ONLY//////// 
$results = mysql_query("SELECT * FROM shoeData WHERE id=$thisID"); 



while($row = mysql_fetch_array($results)){ 


$name = $row['name']; 

$about = $row['about']; 

$company = $row['company']; 

$buy = $row['buy']; 

} 
//////////////FINISH GETTING INFO FOR ONE RECORD ONLY///////////// 



?> 

<form name="formS" method="post" action="<?php echo $_SERVER['PHP_SELF']."?id=$thisID&update=yes";?>"> 

Name 
<p> 
<input type="text" name="name" id="name" value="<?php echo $name;?>" /> 
</p> 
About 
<p> 
<input type="text" name="about" id="about" value="<?php echo $about;?>" /> 
</p> 
Company 
<p> 
<input type="text" name="company" id="company" value="<?php echo $company;?>" /> 
</p> 
Name 
<p> 
<input type="text" name="buy" id="buy" value="<?php echo $buy;?>" /> 
</p> 



<p> 
<input type="submit" name="submit" id="submit" /> 
</p> 




</form> 
<p><a class="delete" href="delete.php?id=<?php echo $thisID;?>">Delete this post</a></p> 

<?php 
include("footer.php"); 
?> 
+1

將'$ _POST'變量直接包含到SQL查詢中,而無需首先進行消毒/驗證,這是一個巨大的安全漏洞。不要這樣做。 – Amber 2009-12-16 07:03:01

+0

好的,我會採取任何建議來解決這個問題,以及我遇到的問題。 – 2009-12-16 07:05:07

+0

您是否檢查了數據庫以確保shoeData中有一行id列實際上等於'$ thisID'?愚蠢的,我知道,但它發生 – munch 2009-12-16 07:16:09

回答

0

你有$update = $_GET['update'];,但隨後經過正確的,你使用$_POST。給定的請求是GET或POST,而不是兩者 - 因此,無論何時$_GET['update']設置爲「yes」,都不會任何POST變量設置,因此更新將使用它設置的所有值完成空白。

機會是你真正想用的是在兩個地方要麼$_GET$_POST - 因爲你的更新正在經歷,但全部爲空白,這聽起來像你想使用$_GET(儘管表單提交/更新,你應該真的而不是使用POST)。

+0

它*將*有可能在它被硬編碼到ACTION中的鏈接或按鈕的設置中,但不是?例如。即使使用表單的POST方法,仍然會有一個GET變量。 – Kaji 2009-12-16 07:09:17

0

這看起來可能很愚蠢,但是你會混淆$_GET$_POST變量嗎?你用一個來檢查是否進入循環,另一個用來填充字符串。

此外,作爲未成年人放在一邊,你SELECT對片段的最後陳述可以通過添加LIMIT 1到它的最終優化,如想必你只是每id被召回的一個條目,不是嗎?

+0

老實說,我從一個基本的PHP教練得到了這段代碼。然而,代碼在以前的項目中工作得很好,現在還不確定它爲什麼提交空白文檔。當我使用後進入循環,看看它是否被提交,它從來沒有進入它只有GET爲我工作,我不知道爲什麼,但然後插入空白字段。 – 2009-12-16 07:11:29

+0

什麼是爲表單設置的方法? – Kaji 2009-12-16 07:12:59

+0

設置爲發佈的方法,所以我不知道爲什麼甚至工程進入循環。 – 2009-12-16 07:15:35