我一直使用来自不同站点(包括此站点)的信息设置我的第一个表单/ 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';
?>
答案 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;
答案 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语法中的错误)。