2016-11-05 39 views
0

我试图创建一个表单,允许您使用php更新数据库表。 我对PHP很陌生,所以如果我在代码中犯了一个愚蠢的错误,请原谅我。使用HTML表单更新MySQL

这是我的edit.php代码:

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

<?php 

$con=mysqli_connect("localhost","root","root","test"); 
// Check connection 
if (mysqli_connect_errno()) 
{ 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$result = mysqli_query($con,"SELECT * FROM cats"); 

?> 


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

<?php 

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

$name = $row['name']; 
$email = $row['email']; 
$rank = $row['rank']; 
$birth = $row['birth']; 
$joined = $row['joined']; 
$steamid = $row['steamid']; 
?> 


<td width="100"></td> 
<td><?=$name?></td> 
</tr> 
<tr> 
<td width="100">Email</td> 
<td><input name="emailid" type="text" value="<?=$email?>"></td> 
</tr> 
<tr> 
<td width="100">Rank</td> 
<td><input name="rankid" type="text" value="<?=$rank?>"></td> 
</tr> 
<tr> 
<td width="100">Birth</td> 
<td><input name="birthid" type="text" value="<?=$birth?>"></td> 
</tr> 
<tr> 
<td width="100">Joined</td> 
<td><input name="joinedid" type="text" value="<?=$joined?>"></td> 
</tr> 
<tr> 
<td width="100">Steamid</td> 
<td><input name="steamidid" type="text" value="<?=$steamid?>"></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'])) 
{ 

$name = $row['nameid']; 
$email = $row['emailid']; 
$rank = $row['rankid']; 
$birth = $row['birthid']; 
$joined = $row['joinedid']; 
$steamid = $row['steamidid']; 

$update = mysqli_query($con,"UPDATE cats SET email = '$email', rank = '$rank', birth = '$birth', joined = '$joined', steamid = '$steamid' WHERE name = '$name';"); 

$retval = mysqli_query($con,"UPDATE cats SET email = '$email', rank = '$rank', birth = '$birth', joined = '$joined', steamid = '$steamid' WHERE name = '$name';"); 
if (!$update) { 
    echo "Could not update data: " . mysqli_error($con); 
} 
echo "Updated data successfully\n"; 

} 
mysqli_close($con); 

?> 
</body> 
</html> 

它显示表和信息,但更新不工作。

Updated data successfully 

我检查了数据库,但没有更新任何东西。

+0

“更新数据成功”消息不是有条件的,所以无论何时提交表单,它都会打印。用“其他”包装它。 – Terry

+0

现在看,你错了更新你的数据。 –

+0

我已经更新了我的答案。 –

回答

0

信息:

随着mysqli_error()你需要写你想要的连接出现错误,就像这样:

mysqli_error($con); 

随着mysqli_query()你需要给两个参数,connectionquery像这个:

$update = mysqli_query($con,"UPDATE cats SET email = '$email', rank = '$rank', birth = '$birth', joined = '$joined', steamid = '$steamid' WHERE name = '$name';"); 

如何调试:

如果你想检查UPDATE查询返回,你可以做这样的事情的错误:

if (!$update) { 
    echo "Could not update data: " . mysqli_error($con); 
} 

你可以尝试这样的事情来调试查询:

$sql = "UPDATE cats SET email = '$email', rank = '$rank', birth = '$birth', joined = '$joined', steamid = '$steamid' WHERE name = '$name';"; 
echo $sql; // this output write in your phpMyadmin to check if there are any errors. 
$update = mysqli_query($con, $sql); 

其他问题,我们得到:

1.我想想也是,你应该在你的代码有else,f.ex:

if (!$update) { 
    echo "Could not update data: " . mysqli_error($con); 
} else { 
    echo "Updated data successfully\n"; 
} 

2.你是不是从$_POST获取数据就应该是这样的:

$name = $_POST['nameid']; // not $row['nameid'] 
$email = $_POST['emailid']; 
$rank = $_POST['rankid']; 
$birth = $_POST['birthid']; 
$joined = $_POST['joinedid']; 
$steamid = $_POST['steamidid']; 

更多关于使用的功能:

PHP: mysqli::$error

PHP: mysqli::query

在你的情况下,它是程序风格

+0

谢谢,但它还没有完全working.I已更新的代码。 –

+0

它在数据库中更新吗? –

+0

不,它不更新数据库中的任何东西 –

0

尝试使用PHP PDO访问数据库的功能,因为它代表你的代码容易受到SQL注入! PDO还将使调试和数据库的工作更容易。

我认为您的$ _POST中的“更新”检查不起作用,因为更新不是表单中的字段,而是提交按钮本身,请尝试检查其中一个字段。

1

亲爱的我想你更改基于名称的记录,因为你可以使用where子句中$名字,你也可以改变名称比从未真正where子句让你的查询执行上的任何成功,但不影响该行。

你想得到可编辑的记录,这是唯一的ID基地更新行,它将反抗工作。