2013-09-25 82 views
5

我一直在寻找关于此的数十个线程,但尚未找到解决方案。使用HTML表单和PHP更新MySQL

我已经创建了一个窗体,应该在输入框中显示数据库表内容,并且当输入框的内容被更改并提交时,数据库应该更新。

<html> 
<head> 
</head> 
<body> 

<?php 

$dbhost = '****'; 
$dbuser = '****'; 
$dbpass = '****'; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db('****'); 

$query = "SELECT * FROM anstalld"; 
$result = mysql_query($query) or die(mysql_error()); 

?> 


<form method="post" action="<?php $_PHP_SELF ?>"> 
<table width="400" border="0" cellspacing="1" cellpadding="2"> 
<tr> 

<?php 

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

$namn = $row['namn']; 
$mandag = $row['mandag']; 
$tisdag = $row['tisdag']; 
$onsdag = $row['onsdag']; 
$torsdag = $row['torsdag']; 
$fredag = $row['fredag']; 
?> 


<td width="100"></td> 
<td><?=$namn?></td> 
</tr> 
<tr> 
<td width="100">Mandag</td> 
<td><input name="mandagid" type="text" value="<?=$mandag?>"></td> 
</tr> 
<tr> 
<td width="100">Tisdag</td> 
<td><input name="tisdagid" type="text" value="<?=$tisdag?>"></td> 
</tr> 
<tr> 
<td width="100">Onsdag</td> 
<td><input name="onsdagid" type="text" value="<?=$onsdag?>"></td> 
</tr> 
<tr> 
<td width="100">Torsdag</td> 
<td><input name="torsdagid" type="text" value="<?=$torsdag?>"></td> 
</tr> 
<tr> 
<td width="100">Fredag</td> 
<td><input name="fredagid" type="text" value="<?=$fredag?>"></td> 
</tr> 
<?php } ?> 
<tr> 
<td width="100"> </td> 
<td> </td> 
</tr> 
<tr> 
<td width="100"> </td> 
<td> 
<input name="update" type="submit" id="update" value="Update"> 
</td> 
</tr> 
</table> 
</form> 



<?php 

if(isset($_POST['update'])) 
{ 

$namn = $_POST['namnid']; 
$mandag = $_POST['mandagid']; 
$tisdag = $_POST['tisdagid']; 
$onsdag = $_POST['onsdagid']; 
$torsdag = $_POST['torsdagid']; 
$fredag = $_POST['fredagid']; 

$sql = mysql_query("UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn'"); 

$retval = mysql_query($sql, $conn); 
if(! $retval) 
{ 
    die('Could not update data: ' . mysql_error()); 
} 
echo "Updated data successfully\n"; 

} 


?> 
</body> 
</html> 

的形式显示的数据库精细的内容,但在更新我得到这个消息:

您的SQL语法错误;检查手册中 对应于你的MySQL服务器版本正确的语法使用 接近“1”在行1

我感谢所有帮助我能得到这个。

+4

的'mysql_ *'功能**不再维护**,不应在任何新的代码库中。它正逐渐被淘汰,转而采用更新的API。相反,您应该使用[PDO](http://php.net/pdo)或[MySQLi]([**准备好的语句**])(https://www.youtube.com/watch?v=nLinqtCfhKY)( http://php.net/mysqli)。 –

+1

这不能这样工作,因为你有多种形式,并且输入字段总是具有相同的“名称”。你也错过了将'namn'放在至少隐藏的字段中。你错过了很多关闭''' – djot

+1

@djot感谢您指出多种形式的东西了!我怎样才能将UPDATE查询指向输入框而不使用静态名称? – user2052849

回答

4

使用mysqli的,而不是MySQL的,你需要通过数据库名称或模式:

前:

$conn = mysql_connect($dbhost, $dbuser, $dbpass); 

后:

$conn = mysql_connect($dbhost, $dbuser, $dbpass, $myDBname); 
+0

谢谢你。但它并没有解决我遇到的问题。 – user2052849

+0

尝试关闭连接到代码结束,把这个:'mysql_close($ conn);' –

+0

每次,当你打开一个连接,使用后,你需要关闭连接 –

2

更新查询可能有一些问题

$query = "UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn' "; 
echo $query; 

请确保您的变量没有qoutes(')的值,可能是查询正在打破某处。

回显查询并尝试在phpmyadmin本身执行。然后你可以找到问题。

1

您已经执行此查询

$sql = mysql_query("UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn'"); 

所以这条线有问题

$retval = mysql_query($sql, $conn); //$sql is not a query its a result set here 

尝试是这样的:

$sql = "UPDATE anstalld SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn'";  
$retval = mysql_query($sql, $conn); //execute your query 

一点题外话:MySQL_ *扩展名已弃用,使用MySQLi_ *或PDO改为。

+1

谢谢!这固定了“你的SQL语法有错误”,但是,我的数据库仍然没有被新增的内容更新。 – user2052849

+1

你的数据库没有被更新,因为你正在一个循环中生成你的输入框,这将创建许多具有相同名称的输入元素。您可以尝试将输入字段的名称更改为数组,例如'”>'。您需要为每个输入元素和相应的过程执行此操作。 – Konsole

0

你的sql语法错误。

请使用此查询和结帐。

$query = mysql_query("UPDATE `anstalld` SET mandag = '$mandag', tisdag = '$tisdag', onsdag = '$onsdag', torsdag = '$torsdag', fredag = '$fredag' WHERE namn = '$namn' "); 
0

试试这种方式。将表格名称放在引号中(``)。 旁边放置变量'“。$ xyz。”'。

所以,你的SQL查询会像:

$sql = mysql_query("UPDATE `anstalld` SET mandag = "'.$mandag.'" WHERE namn =".$name)or die(mysql_error()); 
+1

您的代码无效 – Naktibalda

+0

它是。我只使用这个代码。还是如何?你能指出这个错误吗?我可以改进 –

+1

你有引号问题,第一个字符串是“更新'anstalld' SET mandag =”下一个是'。$ mandag。',你会得到一个解析错误,因为没有。它们之间。如果你修复了所有的错误,你的代码将会变得和 – Naktibalda

1

你的SQL不正确。

$sql = mysql_query("UPDATE anstalld.... 

只有

$sql = "UPDATE anstalld...