PHP 多种形式,第二种使用来自第一种的数据

Posted

技术标签:

【中文标题】PHP 多种形式,第二种使用来自第一种的数据【英文标题】:PHP multiple forms, second uses data from the First 【发布时间】:2018-08-15 03:08:56 【问题描述】:

我首先尝试获取一个 ID 来查询数据库并将结果打印到表中(这部分有效)。然后我想获取用户提供的 id 并使用它来使用 php 更新数据库中的信息。我想使用第二种形式的输入作为更新数据库的值。 要更改的表是 customers,它具有字段 ID、NAME、ADDRESS。我不希望用户能够更改 ID。

表格1:

<form method="post" action="">
    <p style="margin-top: 70px;">Please type the ID of the person you wish to add to change their data</p>
    <p style="margin-bottom: 0px;">ID</p>
    <input style="color:black" type="text" name="id" placeholder="10001">
    <input style="color:lightblue;background-color: rgb(80,80,80);margin-top: 7px; " type="submit" value="Submit">
</form>

表格2:

<form method="post" action="">
    <p>New Information for Customer with ID entered above</p>
    <input style='color:black;' type='text' name='newName' placeholder='Name Change'>
    <input style="color:black;" type="text" name="newAddress" placeholder="New Address">
    <input style="color:lightblue;background-color: rgb(80,80,80);margin-top: 7px; " type="submit" name="submitForm2" value="Submit">
</form>

这是我当前请求的 php,但它不起作用,检查值是否设置的 $_POST 返回 false。

<?php 
            session_start();
            if (isset($_POST["id"]))
                $servername = 'localhost';
                $user = 'root';
                $pass = '';
                $db = 'the_sports_store';
                $conn = new mysqli($servername,$user, $pass, $db);

                // Check connection
                if ($conn->connect_error) 
                    echo '<script language="javascript">';
                    echo 'alert("DB Connection Failed:")';
                    echo '</script>';
                    die("" . $conn->connect_error);
                 

                $sessionID = $_SESSION["ID"];
                $newName = $_SESSION["newName"];
                $newAddress = $_SESSION["newAddress"];
                var_dump($newName);

                $sql = "SELECT * FROM `customers` WHERE ID='$sessionID';";


                //display the current record, allow user input to alter it, then display new data
                if ($conn->query($sql) == TRUE) 
                    echo"<div class='col-10'>";
                    echo"<table>";
                    echo"<tr>
                            <td align='justify'><b>ID</b></td>
                            <td align='justify'><b>NAME</b></td>
                            <td align='justify'><b>ADDRESS</b></td>
                         </tr>";
                    $result = mysqli_query($conn, $sql);
                    $row = mysqli_fetch_assoc($result);
                    echo "<tr><td style='padding: 10px;'>$row['ID']</td><td>$row['NAME']</td><td>$row['ADDRESS']</td></tr>";
                    echo "</table>";
                    echo "</div>";





                    if(!empty($_POST["newName"]) && !empty($_POST["newAddress"]))
                        echo '<script language="javascript">';
                        echo 'alert(',$sessionID,');';
                        echo '</script>';
                        $newName = $_POST["newName"];
                        $newAddress = $_POST["newAddress"];
                        $sqlChange = "UPDATE `customers` 
                                        SET `NAME` = '$newName', `ADDRESS` = '$newAddress' 
                                        WHERE `ID` = '$sessionID';";

                        if ($conn->query($sqlChange) === TRUE) 
                            echo '<script language="javascript">';
                            echo 'alert("Update Successful.")';
                            echo '</script>';
                         else 
                            echo '<script language="javascript">';
                            echo 'alert("Error. Update Unsucessful.")';
                            echo '</script>';
                        

                    else if(!empty($_POST["newName"]))
                        $newName = $_POST["newName"];
                        $sqlChange = "UPDATE `customers` SET `NAME` = '$newName' WHERE `ID` =  '$sessionID'";
                        echo '<script language="javascript">';
                        echo 'alert(',$newName,');';
                        echo '</script>';

                        if ($conn->query($sqlChange) === TRUE) 
                            echo '<script language="javascript">';
                            echo 'alert("Update Successful.")';
                            echo '</script>';
                         else 
                            echo '<script language="javascript">';
                            echo 'alert("Error. Update Unsucessful.")';
                            echo '</script>';
                        
                    else if(!empty($_POST["newAddress"]))
                        $newName = $_POST["newAddress"];
                        $sqlChange = "UPDATE `customers` SET `ADDRESS` = '$newAddress' WHERE `ID` =  '$sessionID'";

                        echo '<script language="javascript">';
                        echo 'alert(',$sessionID,');';
                        echo '</script>';

                        if ($conn->query($sqlChange) === TRUE) 
                            echo '<script language="javascript">';
                            echo 'alert("Update Successful.")';
                            echo '</script>';
                         else 
                            echo '<script language="javascript">';
                            echo 'alert("Error. Update Unsucessful.")';
                            echo '</script>';
                        
                     else
                        echo '<script language="javascript">';
                        echo 'alert(',$sessionID,');';
                        echo '</script>';
                    
                
                $conn->close();
            

        ?>

【问题讨论】:

如果可以的话添加相关代码! 对表单和提交按钮使用不同的名称。 您在第二个表单中缺少一个“动作” 第二个表单位于操作发送到的页面上。从那以后,我将它们压缩到一个页面上。 他们在哪里发帖?只是一页,两个表单都发布给自己吗? 【参考方案1】:

您的问题是您的 PHP 代码只有在设置了 id 时才会执行。因此,当您发布第二个表单时,代码将永远不会执行。

将这个 if (!empty($_POST["newName"]) &amp;&amp; !empty($_POST["newAddress"])) 和下面的所有 elseif/else 移到初始 if 之外。

另外,我有义务告知您有关 SQL 注入以及如何避免它的信息:How can I prevent SQL injection in PHP?

【讨论】:

它们已经在第一个 if 中了。我可以在那里使用会话变量而不是只检查是否设置了 ID? 我说把它们移到第一个 if 的 外面。我不知道你是如何使用会话变量的,你实际上是在其他地方设置它们吗? 我使用会话变量来保存在第一个表单中输入的 ID,因此当页面刷新提交时我保留该值 你是怎么做到的?在哪里?我在任何地方都看不到像$_SESSION["ID"] = $_POST["id"] 这样的东西。如何设置会话变量:w3schools.com/php/php_sessions.asp 我知道这是一个安全问题,但只是连接到数据库就有所帮助!现在我有一个提示问题,提示更新成功,但没有更新。

以上是关于PHP 多种形式,第二种使用来自第一种的数据的主要内容,如果未能解决你的问题,请参考以下文章

事件绑定的第二种形式

HTTP API接口测试利器PostMan介绍

php函数

第二种形式的数据是如何发送到表中的?

php函数

Logistic回归的两种形式y=0/1,y=+1/-1