通过单击ID USING MYSQLI的链接/按钮,从数据库中插入和删除数据

时间:2016-03-30 09:56:00

标签: php mysql mysqli sql-insert sql-delete

我尝试INSERT并同时从数据库中DELETE数据。每当我通过URL中的ID查看成员的信息时,将会有一个包含其信息的联动/链接以接受该成员。如果管理员单击“接受”按钮/链接,该成员将不再位于requests表中(以及应该执行DELETE的那个),同时他的详细信息或数据将会插入另一个名为" members"的表中。但是当我单击“接受”时,它只会回显javascript以进行确认,当我点击"是"时,没有任何事情发生,它只是让我回到pendingRequests.php。我将在这里分享我的代码。

这是链接,点击查看 来自 pendingRequests.php 的成员的详细信息

<a href="/test/admin/view_request.php?view_id=<?php echo $row['id']; ?>" >VIEW</a> 

这是成员数据显示的位置: view_requests.php

<?php
    include ('dbcontroller.php');
    if(isset($_GET['view_id']))
    {
        $id=$_GET['view_id'];
        $sql = mysqli_query($conn, "SELECT * from requests where id='$id'");
        $row = mysqli_fetch_array($sql);
    ?>  

    ID:     <?php echo  $row['id']; ?>

    <div class=" col-md-9 col-lg-9 "> 
        <table class="table table-user-information">
            <tbody>
                <tr>
                    <td><h4><b>Profile Info</b></h4></td>

                </tr>
                <tr>
                    <td>Name:</td>
                    <td><?php echo $row['firstname']; ?> <?php echo $row['MI']; ?> <?php echo $row['lastname']; ?></td>

                </tr>
                <tr>
                    <td>Email-address:</td>
                    <td><?php echo $row['email']; ?></td>

                </tr>
<tr>
                <td>Gender:</td>
                <td><?php echo $row['gender']; ?></td>

            </tr>
             <tr>
                <td>Status:</td>
                <td><?php echo $row['status']; ?></td>

            </tr>   
            <tr>
                <td>Date of Birth:</td>
                <td><?php echo $row['bday']; ?></td>

            </tr>
             <tr>
                <td>Contact Number:</td>
                <td><?php echo $row['contactno']; ?></td>

            </tr>   

            <tr>
                <td><a href="javascript:view_id(<?php echo $row['id']; ?>) ">ACCEPT</a></td>
                <td>DECLINE</td>
            </tr>
<?php 
}
$conn->close();
?>
</tbody>
    </table>        

</div>
<script type="text/javascript">
    function view_id(id)
    {
      if(confirm('Are you sure you want to accept this member request? '))
      {
        window.location='acceptRequest.php?view_id=='+view_id;

      }
    }
</script>

这是链接/按钮代码,管理员点击了 ACCEPT &#34;以及那些拥有该ID的成员的数据来自&#34;请求&#34;表将删除,成员的信息将被插入&#34;成员&#34;表

<a href="javascript:view_id(<?php echo $row['id']; ?>) ">ACCEPT</a>

这是我的 acceptRequest.php 代码

<?php
include('dbcontroller.php');
if(isset($_GET['view_id']))
{
    $sql = "SELECT * FROM requests WHERE id=".$_GET['view_id'];

    $firstname = $row['firstname'];
    $MI = $row['MI'];       
    $lastname = $row['lastname'];  
    $gender = $row['gender'];
    $status = $row['status'];
    $maiden = $row['maiden'];
    $bday = $row['bday'];
    $contactno = $row['contactno'];
    $email = $row['email'];

    mysqli_query($conn, "INSERT INTO members(id,'$firstname','$MI','$lastname','$gender','$status','$bday','$contactno','$email')");

    mysqli_query($conn, "DELETE FROM requests WHERE id=".$_GET['view_id']);
    header("Location: pendingrequests.php");
}
?>

2 个答案:

答案 0 :(得分:0)

这是您的javascript代码:

<script type="text/javascript">
    function view_id(id)
    {
      if(confirm('Are you sure you want to accept this member request? '))
      {
        window.location='acceptRequest.php?view_id=='+view_id;

      }
    }
</script>

您将参数传递给此函数并将其称为id,但在此脚本的正文中,您使用名为view_id的非存在变量

更改

window.location='acceptRequest.php?view_id=='+view_id;

window.location='acceptRequest.php?view_id='+id;

另请注意,我已将==更改为该行中的=

此声明也是错误的

mysqli_query($conn, "INSERT INTO members 
                    (id,'$firstname','$MI','$lastname','$gender',
                    '$status','$bday','$contactno','$email')");

我建议将id保留为auto increment列,它将自动创建,您无需传递值。

mysqli_query($conn, "INSERT INTO members VALUES
                    ('$firstname','$MI','$lastname','$gender',
                    '$status','$bday','$contactno','$email')");

或者,如果它不是auto increment列,则需要创建名为$id的变量,并将查询语法更改为使用$id而不是id

好的,如果它仍然不起作用,你需要从mysqli这样得到一条错误消息。实际上,您应该始终检查所有mysqli api。

的所有呼叫的状态
$result = mysqli_query($conn, "INSERT INTO members VALUES
                    ('$firstname','$MI','$lastname','$gender',
                    '$status','$bday','$contactno','$email')");

if ( $result === FALSE ) {
    echo 'Insert ERROR: ' . mysqli_error($conn);
    exit;
}

这应该向页面报告查询中的错误。

我注意到您捕获了$maiden = $row['maiden'];,但您在查询中没有使用它!是否可以将该列设置为需要值,这就是查询失败的原因?或者完全错过该列,意味着maiden后面的列被加载到与他们现在收到的数据不兼容的列中。

在我看来,最好使用这个更长但更精确的语法

$result = mysqli_query($conn, "INSERT INTO members                  
                               (colname,colname,colname,colname,
                                colname,colname,colname,colname,)
                               VALUES
                             ('$firstname','$MI','$lastname','$gender',
                              '$status','$bday','$contactno','$email')");

然后至少你总是会将正确的数据加载到正确的列名中。

答案 1 :(得分:0)

您需要传递Scaling and Mapping参数而不是函数id。此外,您的网址view_id中存在拼写错误。您的代码应如下所示:

==

您似乎在function view_id(id) { if(confirm('Are you sure you want to accept this member request? ')) { window.location='acceptRequest.php?view_id='+id; } } 附近的SQL中输入了拼写错误。最好还提一下SQL中所需的列。你可以离开id槽,让MySQL自己做增量。此外,您应该将PHP代码放在if语句中以保持安全:

members(id,