【问题标题】:Database cannot create a record when a text value is entered ($_POST)输入文本值时数据库无法创建记录 ($_POST)
【发布时间】:2014-02-26 00:49:43
【问题描述】:

也许我犯了一些明显的初学者错误,但我似乎无法弄清楚为什么会发生这种情况。

奇怪的是,代码似乎只有在我在“输入框”中输入数字时才能正常工作。我在 myphpadmin 面板中检查了这一点,它显示已创建了一条新记录。但是,如果我尝试按照我的目的输入一个字符串(例如:“hello”),数据库中不会出现新记录...

简而言之,数据库只有在我将数字输入“输入框”时才会更新,而不是在我输入字符串时更新。

任何想法为什么会发生这种情况?这让我疯狂。如果有帮助,“公司”字段的数据类型为 VARCHAR,排序规则设置为 latin1_swedish_ci

PHP代码如下:

<?php


//Retrieve data from 'inputbox' textbox

if (isset($_POST['submitbutton']))
    {
    $comprating = $_POST['inputbox'];

    //Create connection

        $con = mysqli_connect("localhost","root","","test_db");

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

    //Insert data into 'Ratings' table

    mysqli_query($con,"INSERT INTO Ratings (Company,Score)
    VALUES ($comprating,1)");

    mysqli_close($con);



    }


?>

HTML代码是:

<form method="post">

    <input type="text" name="inputbox">
    <input type="submit" name="submitbutton">

</form>

干杯

【问题讨论】:

  • 注意 SQL/XSS 注入并更好地使用准备好的语句

标签: php mysql post


【解决方案1】:

试试这个查询,

mysqli_query($con,"INSERT INTO Ratings (Company,Score)
VALUES ('$comprating',1)");`
        ^           ^

注意保留字符串值的单引号,不要忘记在将输入插入数据库之前对其进行清理。

示例标准转义:

$comprating = mysqli_real_escape_string($comprating) 在执行使用$comprating 的查询之前

【讨论】:

  • 应该可以,但$comprating = $_POST['inputbox']; 真的,真的需要先消毒:xkcd.com/327
  • @CD001:谢谢,我在扩展答案中添加了这个:)
  • 感谢您的帮助。像魅力一样工作!我希望我早点问这个:D
【解决方案2】:

您好,这里是面向对象的方法,并且由于在 mysqli 中使用了数据绑定,所以它也是安全的。我建议使用它。

if (isset($_POST['submitbutton'])) {

$comprating = $_POST['inputbox'];
$mysqli = new mysqli("localhost", "root", "", "test_db");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$stmt = $mysqli->prepare("INSERT INTO Ratings (Company,Score) VALUES (?, ?)");
$stmt->bind_param($comprating, 1);

/* execute prepared statement */
$stmt->execute();

printf("%d Row inserted.\n", $stmt->affected_rows);

/* close statement and connection */
$mysqli->close();
}

如果您有任何问题,请随时提出..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多