【问题标题】:How to write information from html form to MySQL Database如何将信息从 html 表单写入 MySQL 数据库
【发布时间】:2013-07-10 09:41:26
【问题描述】:

好的,所以我正在建立一个网站,上面有一个表单,我想将用户在表单中输入的所有信息保存到我的 MySQL 数据库中。表单编码如下:

<form method="post" action="claim.php" name="ClaimForm" id="ClaimForm" autocomplete="on">
    <fieldset>
        <legend>Contact Details</legend>
        <div>
            <label for="firstname" accesskey="U">Your First Name</label>
            <input name="firstname" type="text" id="firstname" placeholder="Enter your name" required />
        </div>
        <div>
            <label for="lastname" accesskey="U">Your Last Name</label>
            <input name="lastname" type="text" id="lastname" placeholder="Enter your name" required />
        </div>
        <div>
            <label for="email" accesskey="E">Email</label>
            <input name="email" type="email" id="email" placeholder="Enter your Email Address" pattern="^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$" required />
        </div>
        <div>
            <label for="streetaddress">Street Address</label>
            <input name="streetaddress" type="text" id="streetaddress" placeholder="123 Stanley dr." required />
        </div>
        <div>
            <label for="postalcode">Postal Code</label>
            <input name="postalcode" type="text" id="postalcode" placeholder="12345, A1B 2C3, etc." required />
        </div>
        <label for="city">City</label>
        <input name="city" type="text" id="city" placeholder="Schenectady" required />
        <div>
            <label for="state">State/Province</label>
            <input name="state" type="text" id="state" placeholder="New York" required />
        </div>
        <div>
            <label for="country">Country</label>
            <input name="country" type="text" id="country" placeholder="United States" required />
        </div>
    </fieldset>
    <fieldset>
        <legend>Extra</legend>
        <div>
            <label for="controllers" accesskey="S">Number of Controllers</label>
            <select name="controllers" id="controllers" required="required">
                <option value="0">0</option>
                <option value="1">1</option>
                <option value="2">2</option>
                <option value="3">3</option>
                <option value="4">4</option>
                <option value="5">5</option>
            </select>
        </div>
        <div>
            <label for="color" accesskey="C">Color</label>
            <select name="color" id="color" required="required">
                <option value="Black">Black</option>
                <option value="White">White</option>
                <option value="Red">Red</option>
                <option value="Blue">Blue</option>
                <option value="Gold">Gold</option>
                <option value="Purple">Purple</option>
            </select>
        </div>
    </fieldset>
    <fieldset>
        <legend>Captcha Verification</legend>
        <label for="verify" accesskey="V" class="verify"><img src="captcha.php" alt="Verification code" /></label>
        <input name="verify" type="text" id="verify" size="6" required style="width: 50px;" title="This confirms you are a human user and not a spam-bot." />
    </fieldset>
    <input type="submit" class="submit" id="submit" value="Submit" />
</form>

我尝试在Claim.php 中使用此代码来尝试将其保存到数据库中:

<?php
$mysql_host     = "localhost";
$mysql_username = "username";
$mysql_password = "password";
$mysql_database = "database";

mysql_select_db($mysql_database, mysql_connect($mysql_host, $mysql_username, $mysql_password));
//Sending form data to sql db.
mysqli_query("INSERT INTO Information (Firstname,Lastname,Email,StreetAddress,PostalCode,City,StateProvince,Country,Controllers,Color) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[email]','$_POST[streetaddress]','$_POST[postalcode]','$_POST[city]','$_POST[state]','$_POST[country]','$_POST[conrollers]','$_POST[color]'))");
?>

我的代码有什么问题吗?还是我的数据库结构错误?我刚开始学习如何编码,这让我很困惑。

我的数据库结构图:

【问题讨论】:

标签: php html mysql phpmyadmin


【解决方案1】:

请使用mysqli。我已更改您的代码以准备插入。

如果你不这样做,那将是一场巨大的 SQL 注入派对。

另外,要访问$_POST,您应该提供一个字符串索引,例如$_POST['firstname']。虽然它像$_POST[firstname] 一样工作,但 PHP 会发出警告。

<?php
$mysql_host     = "localhost";
$mysql_username = "username";
$mysql_password = "password";
$mysql_database = "database";

$mysqli  = new Mysqli($mysql_host, $mysql_username, $mysql_password, $mysql_database);
$prepare = $mysqli->prepare("INSERT INTO `Information`(`Firstname`,`Lastname`,`Email`,`StreetAddress`,`PostalCode`,`City`,`StateProvince`,`Country`,`Controllers`,`Color`) VALUES (?,?,?,?,?,?,?,?,?,?)");
$prepare->bind_param("ssssssssss", $_POST['firstname'], $_POST['lastname'], $_POST['email'], $_POST['streetaddress'], $_POST['postalcode'], $_POST['city'], $_POST['state'], $_POST['country'], $_POST['controllers'], $_POST['color']);
$prepare->execute();
$mysqli->close();
?>

【讨论】:

  • 好的,我试过了,但是数据库中仍然没有数据。另外,为什么“sssssssss”在那里?它有什么作用?
  • print_r($_POST),另外,请确保 MySQLi 凭据正确。
  • 这是我将print_r($POST) 添加到我的文件后得到的:Array ( [firstname] =&gt; Fname [lastname] =&gt; LName [email] =&gt; Emailaddress@email.com [streetaddress] =&gt; 123 Stanley dr. [postalcode] =&gt; 12345 [city] =&gt; Schenectady [state] =&gt; New York [country] =&gt; United States [controllers] =&gt; 0 [color] =&gt; Black [verify] =&gt; 52fe7 [conrollers] =&gt; )
  • 感谢您告诉我添加print_r($_POST)。我永远不会发现错字,它会将信息添加到我的数据库中。非常感谢。此外,您可能希望将您的答案中的拼写错误 conrollers 更正为 controllers。可能会帮助与我有相同问题的其他人。
  • 一长串 s'es 表示您要插入的数据类型。在这种情况下,它们都是字符串(来自您的数据库图像)。你有十个帖子,所以有十个 s'es。
【解决方案2】:

您可能需要考虑获取您的 php 信息以查看您正在运行的版本。

如果您正在运行支持 mysqli 对象的版本,您可能希望从那里开始并实例化 mysqli 对象。

Mysqli documentation: http://us.php.net/manual/en/book.mysqli.php

这使得您的方法不会被弃用。

另外请记住,当您发布到您的页面时,您不会在输出中看到任何错误。这会使调试复杂化。使用这两行php查看错误:

error_reporting(E_ALL);
ini_set('display_errors', '1');

确保设置所有变量也是一种很好的做法。您可以使用isset() 方法在插入数据之前检查它们是否已设置。

我敢打赌,当设置错误时,你会发现一些错误。

您似乎没有正确访问变量。

$_POST[varname] 不会访问数据并抛出错误消息。

$_POST['varname'] 可以工作。

【讨论】:

  • 是的,谢谢你没有注意到我的单引号放错了地方。
【解决方案3】:

我看到的第一件事是您在将值插入查询之前没有对其进行转义。 想象一下,我在您的电子邮件字段中写下这个:

');删除表信息--

你丢失了所有数据。

要转义值,您可以像这样使用 mysql_real_escape_string 函数():

"......".mysql_real_escape_string($_POST['email'])."...."

【讨论】:

    猜你喜欢
    • 2012-02-09
    • 1970-01-01
    • 2015-02-05
    • 2015-11-26
    • 2013-10-17
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多