2012-07-26 86 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