1

我创建了一个 HTML 页面来向 MySQL 数据库输入数据。我在同一个 HTML 页面中嵌入了 PHP 代码。这是代码,

<html>
<head>
</head>
<body>

<?php

/* Database connection operations */
require_once("db_handler.php");

$conn = iniCon();
$db = selectDB($conn);

?>

<b id="loc_caption_1">Enter a new location</b>
<div id="loca">
    <form name="locForm" action="<?php echo $PHP_SELF; ?>" method="post" >
        <table width="300" border="0">
          <tr>
            <td>Location ID</td>
            <td><input type="text" name="lid" readonly="readonly" value="<?php echo $new_id; ?>" style="text-align:right" /></td>
          </tr>
          <tr>
            <td>Code</td>
            <td><input type="text" name="code" style="text-align:right" /></td>
          </tr>
          <tr>
            <td>Location</td>
            <td><input type="text" name="loc" style="text-align:right" /></td>
          </tr>
        </table>
</div>
<br/>
<div id="buttons">
    <input type="reset" value="Clear" /> <input type="submit" value="Save" />
</div>
    </form>

<?php

/* Saving new record */
$id = $_POST["lid"];
$code = $_POST["code"];
$location = $_POST["loc"];

$query = "INSERT INTO locations(LID, Code, Location) VALUES('$id', '$code', '$location')";

if (!mysql_query($query, $conn))
{
    die("Error " . mysql_error());
}
else
{
    echo "<br/><br/>";
    echo "1 record added successfully!";
    echo "<meta http-equiv=\"refresh\" content=\"3;URL=locations.php\">";
}

mysql_close($conn);

?>

</body>
</html>

我遇到的问题是,为将数据插入数据库而编写的 PHP 代码块在页面加载后立即执行一次。我怎样才能阻止这种情况发生?我希望它等到我将数据输入表单并且当我按下提交按钮时,然后执行。

谢谢你。

4

9 回答 9

1

首先为发布按钮命名,例如

<input type="submit" value="Save" name="GoBtn" />

将要在提交后执行的代码放在下面的包装器中

if(isset($_POST['GoBtn'])
{
  //code here
}
于 2012-06-28T09:51:51.063 回答
1

将 php 代码放在 IF 中

if(isset($_POST["submit"])){ // if form is submitted
 // do insert things
}
于 2012-06-28T09:51:52.980 回答
1

您的 php 页面被解释为一个流程:这意味着首先显示表单,然后执行 php 代码部分,插入空值(我猜)。

在脚本部分中,您必须使用以下内容测试您是否处于表单显示上下文或表单提交上下文中:

if ($_POST) {
   // form submit context
}
于 2012-06-28T09:52:15.567 回答
1

将提交按钮标签更改为:

<input type="submit" name="submitForm" value="Save" />

在执行插入的 PHP 代码之前,检查 submitForm 为:

if(isset($_POST["submitForm"]){
//follow the insertion PHP code
}
于 2012-06-28T09:52:24.713 回答
1

您需要检查是否提交了任何数据,然后才能开始工作:

if (!empty($_POST)) {
    ...
}
于 2012-06-28T09:51:01.590 回答
1

您保存数据的代码应该是if (!empty($_POST))块状的。

于 2012-06-28T09:51:19.453 回答
1

您只需要检查是否提交。

<?php
if(isset($_POST['submit']))  // Check if form submitted or not
{
  --- //Code for insert to database.
}
?>
于 2012-06-28T09:51:34.250 回答
1
  1. 在插入数据库之前,您必须检查 $_POST 中是否有可用的变量。

    if(!empty($_POST["lid"])) {
    /* 保存新记录 */ $id = mysqli_real_escape_string($_POST["lid"]); $code = mysqli_real_escape_string($_POST["code"]); $location = mysqli_real_escape_string($_POST["loc"]);

    $query = "INSERT INTO locations(LID, Code, Location) VALUES('$id', '$code', '$location')";

    if (!mysql_query($query, $conn)) { die("Error " . mysql_error()); } 其他 { 回声“

    ”; echo "1条记录添加成功!"; 回声“”;}

    mysql_close($conn); }

  2. 使用 mysqli_* 函数,mysql_* 函数现在已被贬值。

  3. 在插入数据库之前使用 mysqli_real_escape_string() 以防止 sql 注入。
  4. 您应该将此数据库插入区域移动到页面顶部并使用“header('location:locations.php');” 用于重定向。
于 2012-06-28T09:55:42.527 回答
0

根据发布数据的存在执行 PHP 代码块。为了精炼,您甚至可以在语义上测试发布的值。

if ( (array_key_exists('lid', $_POST) 
AND  (array_key_exists('code', $_POST) 
AND  (array_key_exists('loc', $_POST) ) {
   then execute PHP code block
}
于 2012-06-28T10:03:08.603 回答