允许用户在mysql中编辑

时间:2014-01-07 03:02:41

标签: php html mysql edit

我的代码出现问题。这段代码应该显示一个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>

4 个答案:

答案 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次编辑。它比评论删除它们更容易,然后撤消删除。