在PHP中编辑不使用mysql的表单,将数据处理为href,但不处理';t运行测试打印线


edit form not working with mysql in PHP, processes data to href but doesn't run test print line

在尝试调试这段代码数小时后,我发现我不明白为什么我的编辑表单在我的一生中都不会更新。我不确定是因为我没有正确使用GET或POST方法,还是错误地使用了mysql,或者两者的组合。我甚至不明白为什么一行字是"嗨";不会出现。如果我在点击编辑提交按钮时取出代码测试行,打印行就会出来,但我的数据库不会更新。所以我觉得我陷入了无法再进行打印行调试的境地,直到我弄清楚自己做错了什么。这是我的密码。。我在没有显示的"打印"嗨;"行旁边评论道。请记住,我确信我尝试了GET和POST的每一种组合,但仍然没有出现。。。

<html lang="en">
<head>  
    <title>Employee</title>
</head>
<body>
<a href="employ.php">Clean</a> <br>
<form method="post" action="employ.php">
<input type="text" name="fname">First Name<br>
<input type="text" name="lname">Last Name<br>
<input type="text" name="email">email<br>
<input type="text" name="zip">zip code<br>
<input type="submit" name="add" value="Add"> <!-- button itself -->
</form>
<br>

<?php                   //server    login name    password  database
$link = mysqli_connect("server", "login", "password", "database") or die(mysqli_error());


if(isset($_POST['add'])) //this processes after user submits data.
{
    $fname = $_POST['fname'];
    $lname = $_POST['lname'];
    $email = $_POST['email'];
    $zip = $_POST['zip'];
    $re = "/^[a-zA-Z]+((['''- ][a-zA-Z])?[a-zA-Z]*)*$/";
    $reEmail = "/^'w+(['.-]?'w+)*@'w+(['.-]?'w+)*('.'w{2,4})+$/";
    $reZip = "/^'d{5}$/";
    //if user passes re test
    if( preg_match($re, $fname) && preg_match($re, $lname) 
        && preg_match($reEmail, $email) && preg_match($reZip, $zip) )
    {   //display current table
        $querycheck = "select * from employees where fname='$fname' and email='$email'";
        $resultcheck = mysqli_query($link, $querycheck); //link query to database
        if(mysqli_num_rows($resultcheck) == 0)// test if query does "nothing"
        {//if not process the insert query
            $query = "insert into employees values('', '$fname', '$lname', '$email', '$zip')";
            mysqli_query($link, $query); //link query to database
            print "Employee Added"; // print confirmation
        }
        else
        {
            print "That record already exists!";
        }
    }
    else
    {
        print "You did not fill out the form correctly!";
    }
} ////////////////////////////////edit portion/////////////////////////////
if(isset($_GET['edit']))
{
    print "teseting edit<br><br>";
    ?>
    <form method="get" action="employ.php"> 
    <input type="text" name="fname" value = "<?php echo $_GET['fname']?>">First Name<br>
    <input type="text" name="lname" value = "<?php echo $_GET['lname']?>">Last Name<br>
    <input type="text" name="email" value = "<?php echo $_GET['email']?>">email<br>
    <input type="text" name="zip"   value = "<?php echo $_GET['zip']?>">zip code<br>
    <input type="hidden" name="employeeid" value = "<?php echo $_GET['employeeid']?>">
    <input type="submit" name="endedit" value="Edit"> <!-- button itself -->
    </form>
    <?php
    print "teseting end edit <br><br>";

    if(isset($_POST['endedit'])) //this processes after user submits edited data
    {                                //tried get and post
        print "hi";  // DOESNT APPEAR
        $fname = $_POST['fname'];
        $lname = $_POST['lname'];
        $email = $_POST['email'];
        $zip = $_POST['zip'];
        $employeeidtemp = $_POST['employeeid'];
        $re = "/^[a-zA-Z]+((['''- ][a-zA-Z])?[a-zA-Z]*)*$/";
        $reEmail = "/^'w+(['.-]?'w+)*@'w+(['.-]?'w+)*('.'w{2,4})+$/";
        $reZip = "/^'d{5}$/";
        //if user passes re test
        if( preg_match($re, $fname) && preg_match($re, $lname) 
        && preg_match($reEmail, $email) && preg_match($reZip, $zip) )
        {   //display current table
            //$querycheck = "select * from employees where employeeid='$employeeidtemp'";
            //$resultcheck = mysqli_query($link, $querycheck); //link query to database
        //  if(mysqli_num_rows($resultcheck) == 0)// test if query does "nothing"
        //  {
                $query = "UPDATE employees SET fname='$fname', lname='$lname', email='$email', zip='$zip' WHERE employeeid='$employeeidtemp'";
                mysqli_query($link, $query); //link query to database
                print "Employee Updated"; // print confirmation
        //  }
        //  else
        //      print "huh?";
        }
        else
        {
            print "You did not fill out the form correctly!";
        }
    }


}
if(isset($_GET['delete']))
{
    print "teseting delete<br><br>";
}

showemp();


function showemp()
{
    global $link;
    if(isset($_GET['choice']))
    {
        $choice = $_GET['choice'];
    }
    else
    {
        $choice = "lname";
    }
    $query = "select * from employees order by $choice";
    $result = mysqli_query($link, $query);

// print table (happens first before input)
    // first print row of links/headers that sort
    print "<table border='1'>
    <tr>
    <th>Edit</th>
    <th>Delete</th>
    <th><a href='employ.php?choice=fname'>FNAME</a></th> 
    <th><a href='employ.php?choice=lname'>LNAME</a></th>
    <th><a href='employ.php?choice=email'>EMAIL</a></th>
    <th><a href='employ.php?choice=zip'>ZIP</a></th>
    </tr>";
    //while the next row (set by query) exists?
    while($row = mysqli_fetch_row($result))
    {
        list($employeeid, $fname, $lname, $email, $zip) = $row;
        print "<tr>
        <td><a href='employ.php?edit=yes&employeeid=$employeeid&fname=$fname&lname=$lname&email=$email&zip=$zip'>Edit</a></td>
        <td><a href='employ.php?delete=yes&employeeid=$employeeid
                      onclick='return confirm('"Are you sure'")'>Delete</a></td>
        <td>$fname</td>
        <td>$lname</td>
        <td>$email</td>
        <td>$zip</td>
        </tr>";
    }
    print "</table>";
}


?>
</body>
</html>

您有几个错误:

  1. 您不检查查询结果,请至少使用编码mysqli_query($link,$query)或die(mysqli_error($link))

当我用检查错误来处理您的代码时,我发现添加查询不起作用——我的整数字段不接受employeeid的空字符串值。

  1. 不要在表单中使用GET。始终POST。如果您需要对GET url做出反应,请单独编写或使用$_REQUEST变量
  2. 在INSERT查询中,始终写入字段。当您决定更改mysql表中的字段列表时,您可以获得此代码的奇怪行为
  3. 您的主要错误是,打印为"hi"的条件在if(isset($_GET['edit'])条件内,当用户升华表单时,它不起作用