PHP无法通过表单创建mySQL记录

时间:2014-01-26 23:12:39

标签: php mysql forms

我一直使用来自不同站点(包括此站点)的信息设置我的第一个表单/ PHP / mySQL组合,并在我的本地服务器上使用MAMP运行它。虽然网页总是成功连接到目标数据库,但它还没有输入我在MySQL表中输入的数据(我正在用phpMyAdmin检查)。

你可能会看到insert.php评论过的一些东西,这是我之前尝试过但没有用的东西。

表单index.php

<form action="insert.php" method="post">
        Diet Name: <input type="text" name="name"><br/>
        Your Rating: <select type="int" name="rating">
            <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>
            <option value="6">6</option>
            <option value="7">7</option>
            <option value="8">8</option>
            <option value="9">9</option>
            <option value="10">10</option>
        </select><br/>
        Type: BodyBuilding<input type="radio" name="type" value="BodyBuilding"> Weight Loss<input type="radio" name="type" value="Weight Loss"><br/>
        Description: <input type="text" name="descr"><br/>
    <input type="submit">

insert.php该网页将表单数据发送到

<?php

    define('DB_NAME', 'diet');
    define('DB_USER', 'root');
    define('DB_PASSWORD', 'root');
    define('DB_HOST', 'localhost');

        $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }
        $db_selected = mysql_select_db(DB_NAME, $link);

    if (!$db_selected) {
        die('Could not use ' . DB_NAME . ': ' . mysql_error());
    }
        /*$sql="INSERT INTO diet (name, rating, type, descr)
        VALUES('$_POST[name]','$_POST[rating]','$_POST[type],'$_POST[descr]')";*/

        $sql = "INSERT INTO diet ('name', 'rating', 'type', 'descr') VALUES ('$name','$rating','$type','$descr', NOW())";

    if (!$link) 
    {
        die('Could not connect: ' . mysql_error());
    }
    echo 'Connected successfully';
?>

5 个答案:

答案 0 :(得分:1)

你应该使用mysqli而不是mysql。如果将它与参数化查询一起使用会更好。 这将自动防止sql注入。

define('DB_NAME', 'diet');
define('DB_USER', 'root');
define('DB_PASSWORD', 'root');
define('DB_HOST', 'localhost');

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); // open connection

if ($mysqli->connect_error) { // check if connection opened correctly
    die('Connect Error (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
}

// get $_POST vars
$name = $_POST[name];
$rating = $_POST[rating];
$type = $_POST[type];
$desc = $_POST[descr];

$sql="INSERT INTO diet (name, rating, type, descr) VALUES(?,?,?,?)"; // create sql query string

$stmt = $mysqli->stmt_init(); // initialize sqli statement
if ($stmt->prepare($sql)) { // prepare sqli statement
    $stmt->bind_params("ssss", $name, $rating, $type, $desc); // bind values to the 4 '?', also stating that each is a string ("ssss")
    $stmt->execute(); // execute statement
    $stmt->close(); // close statement
}
$mysqli->close(); // close connection

答案 1 :(得分:1)

这是一个PDO示例。我不知道Now()代表什么(可能是插入日期),但我认为你可以弄清楚如何添加它。

$dbhost = 'YOUR_SERVER';
$dbuser = 'YOUR_USERNAME';
$dbpass = 'YOUR_PASSWORD';
$dbname = 'YOUR_DATABASE_NAME';

try {
  $conn = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
}
catch(PDOException $e) {
    echo $e->getMessage();
}

$name = $_POST[name];
$rating = $_POST[rating];
$type = $_POST[type];
$desc = $_POST[descr];

if ($conn)
    {
        $query = "INSERT INTO diet (name, rating, type, descr) VALUES(:name, :rating, :type, :desc)";
        $insert = $conn->prepare($query);
        $insert->bindValue(":name",$name); 
        $insert->bindValue(":rating",$rating); 
        $insert->bindValue(":type",$type); 
        $insert->bindValue(":desc",$desc); 

        $insert->execute();         
    }
    /* Free connection resources. */
    $conn = null;

文档:http://us2.php.net/pdo.prepared-statements

Why you Should be using PHP’s PDO for Database Access

答案 2 :(得分:0)

您需要使用$sql或使用mysql_query来运行实际mysqli_query

你应该使用这样的东西

 $sql="INSERT INTO diet (name, rating, type, descr)
    VALUES('$_POST[name]','$_POST[rating]','$_POST[type],'$_POST[descr]')";
 mysql_query($sql, $link)

答案 3 :(得分:0)

试试这个:

$name=htmlentities($_POST['name'], ENT_QUOTES);
$rating=htmlentities($_POST['rating'], ENT_QUOTES);
$type=htmlentities($_POST['type'], ENT_QUOTES);
$descr=htmlentities($_POST['descr'], ENT_QUOTES);
sql=mysql_query("INSERT INTO diet ('name', 'rating', 'type', 'descr') VALUES ('".$name."','".$rating."','".$type."','".$descr."'");

答案 4 :(得分:0)

首先,$sql 中存在错误。更好的是(太多的论点或类似的东西):

$sql = "INSERT INTO diet ('name', 'rating', 'type', 'descr') VALUES ('$name','$rating','$type','$descr')";

其次,您需要将数据放入表中。您只将SQL命令放在本地属性中。以这种方式尝试(使用 mysql_query ):

mysql_query($sql)

如果遇到麻烦,可以提出mysql错误:

echo mysql_error();

您也可以登录phpMyAdmin并尝试将sql手册放入其中(以查找sql​​语法中的错误)。