输入文本值时,数据库无法创建记录($ _POST)

时间:2014-02-25 16:16:52

标签: php mysql post

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

奇怪的是,如果我在“输入框”中输入一个数字,代码似乎只能正常工作。我在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>

干杯

2 个答案:

答案 0 :(得分:1)

尝试此查询,

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

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

示例标准转义:

在执行使用$comprating = mysqli_real_escape_string($comprating)

的查询之前

$comprating

答案 1 :(得分:0)

这里是面向对象的方法,也是安全的,因为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();
}
如果你有任何问题,请随时提出任何问题。