【问题标题】:Putting values into a MySQL table using a PHP form使用 PHP 表单将值放入 M​​ySQL 表中
【发布时间】:2010-12-29 07:06:41
【问题描述】:

我正在使用 PHP 表单将值放入我拥有的表中。一切正常,除了问题是下拉列表中的文本,而不是下拉选择的值。

另外,当我尝试连接我的日期和时间时,它会以某种方式创建另一个 MySQL 行并将斜杠和冒号放在该行中。

有什么解决办法吗?

(我没有制作表格,我使用了表格制作器)

代码如下:

    <div id="form_container">                   
        <ul >

                <li id="li_4" >
    <label class="description" for="element_4">restaurant </label>
    <div>
    <select class="element select medium" id="element_4" name="element_4"> 
        <option value="" selected="selected"></option>
<option value="1" >Burger King</option>
<option value="2" >McDonald's</option>
<option value="3" >Wendy's</option>
<option value="4" >KFC</option>
<option value="5" >Taco Bell</option>
<option value="6" >Domino's Pizza</option>
<option value="7" >Pizza Hut</option>
<option value="8" >Quizno's</option>
<option value="9" >Chili's</option>
<option value="10" >TGI Friday's</option>
<option value="11" >Starbucks</option>
<option value="12" >Red Lobster</option> 
<option value="13" >Olive Garden</option>

    </select>
    </div> 
    </li>       <li id="li_1" >
    <label class="description" for="element_1">date </label>
    <span>
        <input id="element_1_1" name="element_1_1" class="element text" size="2" maxlength="2" value="" type="text"> /
        <label for="element_1_1">MM</label>
    </span>
    <span>
        <input id="element_1_2" name="element_1_2" class="element text" size="2" maxlength="2" value="" type="text"> /
        <label for="element_1_2">DD</label>
    </span>
    <span>
        <input id="element_1_3" name="element_1_3" class="element text" size="4" maxlength="4" value="" type="text">
        <label for="element_1_3">YYYY</label>
    </span>

    <span id="calendar_1">
        <img id="cal_img_1" class="datepicker" src="calendar.gif" alt="Pick a date.">   
    </span>
    <script type="text/javascript">
        Calendar.setup({
        inputField   : "element_1_3",
        baseField    : "element_1",
        displayArea  : "calendar_1",
        button       : "cal_img_1",
        ifFormat     : "%B %e, %Y",
        onSelect     : selectDate
        });
    </script>

    </li>       <li id="li_2" >
    <label class="description" for="element_2">time </label>
    <span>
        <input id="element_2_1" name="element_2_1" class="element text " size="2" type="text" maxlength="2" value=""/> : 
        <label>HH</label>
    </span>
    <span>
        <input id="element_2_2" name="element_2_2" class="element text " size="2" type="text" maxlength="2" value=""/> : 
        <label>MM</label>
    </span>
    <span>
        <input id="element_2_3" name="element_2_3" class="element text " size="2" type="text" maxlength="2" value=""/>
        <label>SS</label>
    </span>
    <span>
        <select class="element select" style="width:4em" id="element_2_4" name="element_2_4">
            <option value="AM" >AM</option>
            <option value="PM" >PM</option>
        </select>
        <label>AM/PM</label>
    </span> 
    </li>       <li id="li_3" >
    <label class="description" for="element_3">catering </label>
    <span>
        <input id="element_3_1" name="element_3" class="element radio" type="radio" value="1" />
  <label class="choice" for="element_3_1">Yes</label>
  <input id="element_3_2" name="element_3" class="element radio" type="radio" value="2" />
  <label class="choice" for="element_3_2">No</label>

    </span> 
    </li>       <li id="li_5" >
    <label class="description" for="element_5">driver </label>
    <div>
    <select class="element select medium" id="element_5" name="element_5"> 
        <option value="" selected="selected"></option>
<option value="1" >Derek</option>
<option value="2" >Joe</option>

    </select>
    </div> 
    </li>       <li id="li_6" >
    <label class="description" for="element_6">destination </label>
    <div>
    <select class="element select medium" id="element_6" name="element_6"> 
        <option value="" selected="selected"></option>
<option value="1" >NYC</option>
<option value="2" >LA</option>
<option value="3" >Chicago</option>
<option value="4" >Boston</option>
<option value="5" >Miami</option>
<option value="6" >San Francisco</option>
<option value="7" >Seattle</option>
<option value="8" >Other</option>

    </select>
    </div> 
    </li>

                <li class="buttons">
            <input type="hidden" name="form_id" value="76657" />

            <input id="saveForm" class="button_text" type="submit" name="submit" value="Submit" />
    </li>
        </ul>
    </form> 
</div>
<img id="bottom" src="bottom.png" alt="">
</body>
</html>

PHP 代码

<?php
$restaurant = $_POST['element_4'];
$dateM = $_POST['element_1_1'];
$dateD = $_POST['element_1_2'];
$dateY = $_POST['element_1_3'];
$timeH = $_POST['element_2_1'];
$timeM = $_POST['element_2_2'];
$timeS = $_POST['element_2_3'];
$amPM = $_POST['element_2_4'];
$catering = $_POST['element_3'];
$driver = $_POST['element_5'];
$destination = $_POST['element_6'];

$date = $dateM . "/" . $dateD . "/" . $dateY;
$time = $timeH . ":" . $timeM . ":" . $timeS . " " . $amPM;



$con = mysql_connect("localhost","asdf","asdf");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

mysql_select_db("tableName", $con);

mysql_query("INSERT INTO stats (restaurant, date, time, catering, driver, destination)
  VALUES ('$restaurant', '$date', '$time', '$catering', '$driver', '$destination')");

mysql_close($con);
?>

【问题讨论】:

  • 而且没有人提到sql注入!我只有一个解释——不断地修复这样一个蹩脚的代码,每个人都烦死了

标签: php mysql html forms


【解决方案1】:

只需设置与文本匹配的值即可,示例:

<option value="Burger King">Burger King</option>
<option value="McDonald's">McDonald's</option>

【讨论】:

  • 当然它存储的是值而不是文本。它始终是值,当对应于选择框时,它存储在 $_POST/$_GET-Array 中。还有一件事要提。您可以忽略value-attribute。那将是相同的效果,因为文本将被视为值:)
  • 修复了它。但是,我将如何解决代码在时间和日期字段中分别创建只有“::”和“//”的另一行的问题?这是我要连接的文本,但它不应该那样显示。
  • @Andrei Korchagin,客户端似乎没有填写日期和时间字段。
  • 抱歉,忘了说创建了一个额外的行(当我只需要一个时,总共创建了两行),其中只有 :: 和 //,没有填充其他字段。
  • @Andrei 您确定每次提交表单时都会创建 2 个 new 行吗?第一行的date 和time 字段是什么样的?
【解决方案2】:

如果您遗漏了这些值,表单将提交选项标签之间的文本,例如...

 <option>Burger King</option>
 <option>McDonald's</option>

但是,出于标准化目的,我会选择使用数值并为我的餐厅提供一个单独的数据库表。这样餐厅的名称只在数据库中的一个位置,并由餐厅主键在其他地方引用。稍后您仍然可以使用连接查询访问餐厅名称。

您还可以使用访问餐厅数据库表的查询动态生成下拉选项。

【讨论】:

    【解决方案3】:

    首先,值得一提的是,没有用于检查 SQL 注入的用户输入处理,这在任何面向公众的网站中都是非常危险的。因此,使用 mysql_strip_slashes() 或类似方法来解决这个问题。如果您想要下拉选择中实际文本的值,则必须将 value 参数更改为标记。这是唯一的方法。

    【讨论】:

      【解决方案4】:

      一切正常,除了 问题是,而不是文本 下拉列表中,它放置了 下拉选择。

      是的,这就是应该发生的事情。根据其他答案,您需要将文本放在“值”属性中,而不是 1、2、3 等。

      关于日期的其他问题,您可以尝试将生成的 SQL 查询打印到屏幕上,以便准确检查发生了什么。

      【讨论】:

        【解决方案5】:

        我在您的 html 中没有看到任何表单打开标记...除非有表单标记,否则您的表单无法提交。也在 PHP 脚本上做一个 var_dump($_POST);

        【讨论】:

          猜你喜欢
          • 2021-02-13
          • 2013-02-10
          • 1970-01-01
          • 1970-01-01
          • 2013-07-26
          • 2016-03-11
          • 1970-01-01
          • 1970-01-01
          • 2012-09-04
          相关资源
          最近更新 更多