【问题标题】:PHP: trouble with understanding POST and GET at the same timePHP:同时理解 POST 和 GET 的麻烦
【发布时间】:2014-05-20 12:01:18
【问题描述】:

我有一个网页询问用户的输入,当他单击添加按钮时,它应该将用户的输入插入数据库。我一直认为你不能同时使用 POST 和 GET 但根据this 和this 的答案应该是可能的。然而,我似乎无法让他们的解决方案发挥作用。

脚本在 db 中插入一些内容(生成一个 id),但 seriesName 字段保持为空。

PHP 脚本:

<?php
$con=mysqli_connect("localhost","user","passwd","database");

// Check connection

if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

$issueSeries = mysqli_real_escape_string($con, $_GET['addSeries']);

mysqli_query($con,"INSERT INTO series (seriesName) VALUES ('$issueSeries')");

mysqli_close($con);
?>

HTML:

<div id="issueAddInformationLayout">
    <div id="issueAddCredits">
        <form action="addIssue.php" method="post">
            <table>
                <tr id="lblAddCreator">
                    <td><p>NR</p></td>
                    <td><p>Series</p></td>
                    <td><p>Volume</p></td>
                    <td><p>Title</p></td>
                    <td><p>Publisher</p></td>
                </tr>
                <tr>
                    <td><input type="text" id="addNR" size="3%"/></td>
                    <td><input type="text" id="addSeries" size="25%" /></td>
                    <td><input type="text" id="addVolume" size="25%" /></td>
                    <td><input type="text" id="addTitle" size="30%" /></td>
                    <td><input type="text" id="addPublisher" size="30%" /></td>
                </tr>
            </table>
            <table>
                <tr id="lblAddCreator">
                    <td><p>Writer</p></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr id="txtAddCreator">
                    <td><input type="text" id="addWriter1" size="30%" /></td>
                    <td><input type="text" id="addWriter2" size="30%" /></td>
                    <td><input type="text" id="addWriter3" size="30%"/></td>
                    <td><input type="text" id="addWriter4" size="30%"/></td>
                </tr>
                <tr id="lblAddCreator">
                    <td><p>Editor</p></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr id="txtAddEditor">
                    <td><input type="text" id="addEditor1" size="30%" /></td>
                    <td><input type="text" id="addEditor2" size="30%"/></td>
                    <td><input type="text" id="addEditor3" size="30%"/></td>
                    <td><input type="text" id="addEditor4" size="30%"/></td>
                </tr>
                <tr id="lblAddCreator"> 
                    <td><p>Letterer</p></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr id="txtAddLetterer">
                    <td><input type="text" id="addLetterer1" size="30%"/></td>
                    <td><input type="text" id="addLetterer2" size="30%"/></td>
                    <td><input type="text" id="addLetterer3" size="30%"/></td>
                    <td><input type="text" id="addLetterer4" size="30%"/></td>
                </tr>
                <tr id="lblAddCreator">
                    <td><p>Colourist</p></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr id="txtAddColourist">
                    <td><input type="text" id="addColourist1" size="30%"/></td>
                    <td><input type="text" id="addColourist2" size="30%"/></td>
                    <td><input type="text" id="addColourist3" size="30%"/></td>
                    <td><input type="text" id="addColourist4" size="30%"/></td>
                </tr>
                <tr id="lblAddCreator">
                    <td><p>Cover Artist</p></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr id="txtAddCoverArtist">
                    <td><input type="text" id="addCoverArtist1" size="30%"/></td>
                    <td><input type="text" id="addCoverArtist2" size="30%"/></td>
                    <td><input type="text" id="addCoverArtist3" size="30%"/></td>
                    <td><input type="text" id="addCoverArtist4" size="30%"/></td>
                </tr>
                <tr id="lblAddCreator">
                    <td><p>Inker</p></td>
                    <td></td>
                    <td></td>
                </tr>
                <tr id="txtAddInker">
                    <td><input type="text" id="addInker1" size="30%"/></td>
                    <td><input type="text" id="addInker2" size="30%"/></td>
                    <td><input type="text" id="addInker3" size="30%"/></td>
                    <td><input type="text" id="addInker4" size="30%"/></td>
                </tr>
                <tr id="lblAddCreator">
                    <td><p>Penciler</p></td>
                    <td></td>
                    <td></td>
                    </tr>
                <tr id="txtAddPenciler">
                    <td><input type="text" id="addPenciler1" size="30%"/></td>
                    <td><input type="text" id="addPenciler2" size="30%"/></td>
                    <td><input type="text" id="addPenciler3" size="30%"/></td>
                    <td><input type="text" id="addPenciler4" size="30%"/></td>
                </tr>
                <tr id="lblAddCreator">
                    <td><p>Trade Paper Back</p></td>
                    <td><p id="lblAddCover">Cover</p></td>
                </tr>
            </table>
            <table>
                <tr id="txtAddTPB">
                    <td><input type="text" id="addTPB" size="30%"/></td>
                    <td>
                        <p id="btnAddCover" enctype="multipart/form-data" action="parse_file.php" method="post"> 
                            <input type="file" name="uploaded_file">
                        </p>
                    </td>
                    <td>
                        <id="btnAddIssue"><input type="submit" value="Add">
                    </td>
                </tr>
            </table>
        </form>
    </div>
</div>

HTML 似乎有些混乱,所以我添加了完整的 HTML 代码。请记住:这纯粹是为了我自己,我并不真正关心那些表格已经过时的东西:)

【问题讨论】:

  • 您的输入超出了表单...
  • @DamienPirsy HTML 似乎有些混乱,所以我添加了完整的 HTML 代码

标签: php html mysql


【解决方案1】:

在 HTTP 中,您不能同时使用 GET 和 POST,但您可以发出包含查询字符串作为 URL 一部分的 POST 请求。

PHP 将使用请求正文填充$_POST,使用查询字符串填充$_GET,即使请求是 POST 请求。

由于表单是POST,来自输入的数据将被放入正文而不是查询字符串(因此将出现在$_POST而不是$_GET)。

如果addSeries 的值是固定的,那么您可以将它与$_GET 一起使用,如下所示:

 <form id="btnAddIssue" action="addIssue.php?addSeries=someValue" method="post">

...但是由于您正在接受用户输入,因此在将输入放入表单后使用$_POST 读取值。

【讨论】:

  • HTML 似乎有些混乱,所以我添加了完整的 HTML 代码。
  • @TimothyPerson — 您的编辑使 HTML 无效。不能有嵌套表单。
  • 不知道,但我改了。
【解决方案2】:

您的输入在您的表单之外,因此不会提交。

<form id="btnAddIssue" action="addIssue.php" method="post">
    <input type="text" id="addSeries" size="25%" />
   <input type="submit" value="Add">
</form>

然后您需要将 $_GET['addSeries'] 更改为 $_POST['addSeries'],因为您的表单设置为 POST(或更改您的表单以通过 GET 提交)。

【讨论】:

    【解决方案3】:

    您的输入在表单标签之外,用户提交表单时不会考虑。

    <form id="btnAddIssue" action="addIssue.php" method="post">
       <input type="text" id="addSeries" size="25%" />
       <input type="submit" value="Add">
    </form>
    

    而且由于您正在向 php 端发出 post 请求,因此 $_POST 会引用该输入的值

    另外,有时最好使用包含来自 GET 和 POST 的数据的 $_REQUEST,这样您每次都能从请求中获得正确的数据

    $issueSeries = mysqli_real_escape_string($con, $_REQUEST['addSeries']);
    

    【讨论】:

    • 警告:$_REQUEST 还包括来自 cookie 的数据。我通常会避免使用它,而是要确切地知道您的数据来自哪里。
    • 感谢@Quentin 的建议 :)
    【解决方案4】:

    您的文本字段位于表单之外,因此(该文本字段的)任何值都不会提交到操作页面。

    改成

    <form id="btnAddIssue" action="addIssue.php" method="post">
    <input type="text" id="addSeries" size="25%" />
    <input type="submit" value="Add">
    </form>
    

    也可以使用 $_POST,或者您甚至可以使用 $_REQUEST(您可以将 $_REQUEST 用于 get 和 post 变量)

    【讨论】:

    • HTML似乎有些混乱,我已经添加了整个HTML代码
    猜你喜欢
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    相关资源
    最近更新 更多