2012-07-26 81 views
0

我是新來的PHP,認爲這應該工作,但我不明白,如果我做錯了語法或什麼東西。這是處理我從表單提交的數據的腳本。php mysql更新基於形式變量

我設置PHP變量從表單發佈數據,它回聲出變量正確的數據,問題是在更新數據庫中的記錄,它不...

表在數據庫中有3個屬性,adID,iconURL,webURL。

表單有2個輸入文本框和一個隱藏字段,iconPath,webPath和recordN。

<?php 
$recNum = $_POST["recordN"]; 
$iconU = $_POST["iconPath"]; 
$webU = $_POST["webPath"]; 
echo 'Number of record updated: ' . $recNum; 
echo '<br />New Icon Path: ' . $iconU; 
echo '<br />New Web Path: ' . $webU; 

$con = mysql_connect("localhost","admin","pass"); 
if (!$con) { die('Could not connect: ' . mysql_error()); } 

mysql_select_db("DBNAME", $con); 

mysql_query("UPDATE adSources set iconURL = $iconU, webURL = $webU 
WHERE adID = $recNum"); 

mysql_close($con); 

echo '<br /><a href="http://mydomain.com/thePage.html" target="_blank">Return to main page</a>' . "\n"; 
?> 

那麼,ADID = RECNUM,我要覆蓋iconURL = $ iconU和WEBURL = $ webU

我有,我想使用$ iconU和$ webU值,iconURL和WEBURL是數據庫中字段的名稱。我閱讀他們很好,可以顯示他們的名字就好了,我只是不能更新這個。

我在數據庫中授予了用戶和所有權限的完整權限。

任何幫助?與其他語言相比,Php看起來很醜陋。

回答

1

你錯過了你的變量名引用。嘗試:

mysql_query("UPDATE adSources set iconURL = '$iconU', webURL = '$webU' 
      WHERE adID = $recNum"); 

更好,如果你也無法逃脫變量:

mysql_query("UPDATE adSources set iconURL = '".mysql_real_escape_string($iconU). 
      "', webURL = '".mysql_real_escape_string($webU). 
      "' WHERE adID = $recNum"); 

這使得它好一點,但使用的mysql_real_escape_string()實際上是不鼓勵。一旦你掌握了它,你應該檢查並用PDO替換它。

+1

非常感謝你,我花了整整一個下午的時間嘗試各種引用組合,拋棄'$ _POST [field]'等變量,你的答案完美無缺。我總是避免使用php,因爲它看起來很可怕:句點,下劃線, - >等,在javascript和C#中看起來很漂亮。但是它的功能看起來非常驚人,我想我需要記住語言的差異。非常感謝你,它完美的工作 – user1108224 2012-07-26 04:09:40

1

要進行調試,請使用mysql_error()。由於需要將字符串($ iconU等)封裝在引號中,因此在語法上會出現錯誤。

但是...你會更好地學習PDO;這將處理包裝和爲你安全的變量。 mysql函數正在被折舊,所以不要從舊的東西開始,從新的開始! http://php.net/manual/en/book.pdo.php

$sth = $dbh->prepare('UPDATE adSources set iconURL = :iconU, webURL = :webU WHERE adID = :recNum'); 
$sth->bindValue(':iconU', $iconU , PDO::PARAM_STR); 
$sth->bindValue(':webU', $webU , PDO::PARAM_STR); 
$sth->bindValue(':recNum', $recNum , PDO::PARAM_INT); 
$sth->execute(); 

編輯:回覆您對「怪胎醜陋」的評論。不打算開始辯論,但是,它開始醜陋。然後你把它包裝到一個很好的類中,讓你的錯誤處理正確(包裝在try/ctach中)並且你在笑。所以從醜陋開始,你很快就會學會如何清理它。

+0

謝謝我會開始,從來沒有聽說過PDO。我只需要爲學校提供一個sql類,以便熟悉sql語言,規範化等,但從來沒有聽說過PDO。 – user1108224 2012-07-26 04:11:09