我的代码出现问题。这段代码应该显示一个mysql数据库,让用户编辑它,以便它们的编辑在mysql表中注册。但由于某种原因,查询不起作用,我无法得到它,以便用户可以编辑成mysql表。
<!DOCTYPE HTML>
<html>
<head>
<title><?php echo 'giggity'; ?></title>
</head>
<body>
<?php
$con = mysqli_connect('localhost', 'root', 'ankith12','Employees');
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$sql = "select * from Employ";
$query = mysqli_query($con,$sql);
echo "<table border ='1' style='height:90%;width:90%; position: absolute; top: 50; bottom:50; left: 0; right: 0;border:1px solid' align = 'center'>
<tr>
<th>Employee id</th>
<th>Firstname</th>
<th>Lastname</th>
<th>Meetings Today</th>
<th>Sales</th>
<th>Comments</th>
</tr>";
?>
<form method = 'Post'>
<?php
$i = 1;
while( $row = mysqli_fetch_array($query) )
{
echo "<tr><td>". $row['employee_id'] . "<br><input type ='submit' name = 'Submit_$i' >". "</td>";
echo "<td>". $row['Firstname']. "<input type = 'textfield' name = 'first' >"."</td>";
echo "<td>". $row['Lastname']."<input type = 'textfield' name = 'second' >" . "</td>";
echo "<td>". $row['Meetings']."<input type = 'textfield' name = 'third' >". "</td>";
echo "<td>". $row['Sales']."<input type = 'textfield' name = 'fourth' >". "</td>";
echo "<td>". $row['Comments']."<input type = 'textfield' name = 'fifth' >". "</td></tr>";
$i++;
}
echo "</table>";
?>
<br>
<br>
<!-- Submit<br><input type ='submit' name = 'Submit' > -->
</form>
<?php
function alert($s){
echo "<script type = 'text/javascript'>alert(\"$s\");</script>";
}
// $i = 1
$con = mysqli_connect('localhost', 'root', 'ankith12','Employees');
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$query = "SELECT employee_id from Employ";
$qudey = mysqli_query($con,$query);
$rows= mysqli_fetch_assoc($qudey);
$dee = 1;
$easy = 0;
// $userfirst = $_POST['first'];
// $userlast = $_POST['second'];
// $usermeetings = $_POST['third'];
// $usersales = $_POST['fourth'];
// $usercomments = $_POST['fifth'];
foreach($rows as $i){
//alert($_POST["Submit_$dee"]);
if(isset($_POST["Submit_$dee"])) {
// alert("true");
$i = 1;
$userfirst = $_POST['first'];
$userlast = $_POST['second'];
$usermeetings = $_POST['third'];
$usersales = $_POST['fourth'];
$usercomments = $_POST['fifth'];
alert($userfirst);
if($userfirst !== ""){
$QueryA = "UPDATE Employ SET Firstname = $userfirst WHERE employee_id = $i";
mysqli_query($con,$QueryA);
alert($QueryA);
}
if($userlast !== "")
{
$QueryB = "UPDATE Employ SET Lastname = $userlast WHERE employee_id = $i";
mysqli_query($con,$QueryB);
}
if($usermeetings !== "")
{
$QueryC = "UPDATE Employ SET Meetings = $usermeetings WHERE employee_id = $i";
mysqli_query($con,$QueryC);
}
if($usersales !== "")
{
$QueryD = "UPDATE Employ SET Sales = $usersales WHERE employee_id = $i";
mysqli_query($con,$QueryD);
}
if($usersales !== "")
{
$QueryE = "UPDATE Employ SET Comments = $usercomments WHERE employee_id = $i";
mysqli_query($con,$QueryE);
}
//echo 'done';
}
// echo'done';
$easy++;
$dee = $dee + 1;
}
mysqli_close($con);
?>
</body>
</html>
答案 0 :(得分:2)
你有这样的更新声明:
UPDATE Employ SET Firstname = $userfirst WHERE employee_id = $i
大多数人的名字都是字母串。例如,考虑员工1是否有“Gordon”这个名字:
UPDATE Employ SET Firstname = Gordon WHERE employee_id = 1
你能看到这个查询有什么问题吗?提示:SQL不承认“戈登”是什么。您需要单引号来分隔值:
UPDATE Employ SET Firstname = '$userfirst' WHERE employee_id = $i
当您编写的代码可变替代并且您遇到问题时, 始终 的第一步应该是后打印出字符串 >变量替换。
答案 1 :(得分:2)
@ user3152011您是否有超过1名员工,如果是这样,您的输入将全部为空白,除非您尝试更新上一位员工的信息,因为您正在定义多个具有相同名称的输入。试试var_dump($_POST)
并查看。
例如,如果您有2名员工,那么您将有2个输入,其名称与<input type = 'textfield' name = 'first' >
中的名称相同,因此当您提交第一名员工时,$_POST['first']
将为空。
你可以将<form>
放在while循环中,这样每个都是一个单独的表单,或者使用像<input type = 'textfield' name = 'first[]' >
这样的东西,这样它们都会以数组的形式返回,所以你有{{1} }或$_POST['first'][0]
等等。
此外,如果您希望用户编辑字段名称(而不是打印出值,然后使用$_POST['first'][1]
输入空白),请使用echo "<td>". $row['Firstname']. "<input type = 'textfield' name = 'first' >"."</td>
将该值直接放入文本字段中,会更友好。并且由于值将使用数据库中的值填充,您不必检查它是否为空白,如果提交的话,您可以随时运行UPDATE,如果没有任何更改,则只需使用现有数据进行更新即可。没有变化。
我不确定你为什么第二次运行echo "<td><input type = 'textfield' name = 'first' value='". $row['Firstname']."'>"."</td>
。
现在,看起来您正在硬编码更新WHERE employee_id = $ i,在您的情况下为1。您可能希望使用类似$query = "SELECT employee_id from Employ";
之类的内容传递employee_id以及所有其他字段。这样,当您提交表单时,echo "<input type="hidden" name="employee_id" value = '".$row['employee_id']."'>";
中将有一个employee_id,只需更新该员工。
***并且不要忘记使用http://ca1.php.net/mysqli_real_escape_string
保护自己免受SQL注入攻击您可以尝试以下代码:
$_POST['employee_id']
答案 2 :(得分:0)
您可以使用以下代码,而不是为每个字段重复相同的查询
$query=mysql_query("UPDATE Employ SET Firstname = '$userfirst',Lastname = '$userlast',Meetings = '$usermeetings',Sales = '$usersales',Comments = '$usercomments'WHERE employee_id ='$i'") or die(mysql_error)
希望这对你有用
答案 3 :(得分:0)
如何帮助自己:
你的代码中有太多的东西需要进行简单的测试,或者坦率地让这里的任何人花时间来帮助你。
复制上面的代码并立即设置它。然后拿一把斧头给你的代码,取出绝对不需要的东西。把它归结为大约3行代码。
1) Just a connect and display any error message.
2) Create a simple query string with one field and one table.
3) And then run that one line and get the error message back.
BTW,您可以使用MySQL Query Browser编辑MySQL吗?如果不是先排除它。
你必须学会将问题分成两半,并在不工作时简化问题。你不能指望其他人为你做这项工作。作为程序员,你应该通过一次测试一些小东西来学习梳理细节。然后,当您将小事情发挥作用时,您可以将它们组合在一起以构建大型事物。我已经采用了1000行代码的程序,并将它们减少到10行,以便有时找出问题(不经常,谢天谢地,但有时候)。例如,多年前我遇到了一个错误,内存中的随机字节间歇性地发生了变化。这是一个相当大的项目,我起初并不知道在哪里寻找它。但是通过删除事物以简化系统的过程,我能够一点一点地理清它的来源。事实证明这是一个寄存器,它被一个计时器以一种随机的方式每秒踩到一次。
提示:我经常使用Notepad ++中的撤消/重做功能进行此切割,因为一旦我发现了问题,就可以轻松地将文本恢复到原来的状态。首先,我标记并复制修复程序。然后撤消。然后在最后粘贴修复程序。很容易将1000行切割成10行,然后在完成后将其恢复为1000行。有时我会前进或后退多达30或100次编辑。它比评论删除它们更容易,然后撤消删除。