pri*_*int 2 html php mysql database forms
我试图将一个表单中的两个文本字段拉到一个基本的mySQL DB中,这给我带来了麻烦.所以这是我的两个文件,首先是HTML表单:
<!DOCTYPE html>
<html>
<body>
<title>Home Page</title>
<h3>Please Place your Order Below:</h3>
<form action="tacoOrder.php" method="POST" />
<p>Name: <input type="text" name="name" /></p>
<p>Taco Order: <input type="text" name="tacoOrder" /></p>
<input type="submit" value="Submit" />
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
和PHP:
<?php
define('DB_NAME', 'tacoPractice');
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('DB_HOST', 'localhost');
$link = mysql_connect(DB_HOST, DB_USER, DB_PASS);
if(!$link)
{
die('Could not connect to database: ' . mysql_error());
}
$db_select = mysql_select_db(DB_NAME);
if(!$db_select)
{
die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
}
echo "HOLY EFF";
$name = $_POST('name');
$tacoOrder = $_POST('tacoOrder');
$query = "INSERT INTO orders ('name', 'tacoOrder') VALUES ('{$name}', '{$tacoOrder}')";
if(!mysql_query($query)
{
die("DAMMIT");
}
$mysql_close();
?>
Run Code Online (Sandbox Code Playgroud)
它没有给出连接错误,但没有数据插入到我的数据库中.有任何想法吗?
谢谢.
其他人已经给你答案了.要添加,您在列名称周围使用引号,这些引号应该是反引号或完全删除引号.
更改:
INSERT INTO orders ('name', 'tacoOrder')
^ ^ ^ ^
Run Code Online (Sandbox Code Playgroud)
至
INSERT INTO orders (`name`, `tacoOrder`)
Run Code Online (Sandbox Code Playgroud)
要么
INSERT INTO orders (name, tacoOrder)
Run Code Online (Sandbox Code Playgroud)
或作为一个完整的答案:
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];
$query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')";
Run Code Online (Sandbox Code Playgroud)
旁注:不需要反引号,但不能使用列名的单引号.这只是习惯的一种力量,我自己在列名称周围使用反引号.
另外,这$mysql_close();不应该有一个$在前面mysql_close,但$link括号内:
改成 mysql_close($link);
然而正如Alien先生所指出的那样,变量mysql_close()是可选的(谢谢你)
你也有失踪)的if(!mysql_query($query),应为已读if(!mysql_query($query))
请考虑mysqli_*使用预准备语句或PDO 切换到函数.这些mysql_*函数已弃用,将在以后的版本中删除.
完全重写:( 在我的服务器上测试和工作)
<?php
define('DB_NAME', 'tacoPractice');
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('DB_HOST', 'localhost');
$link = mysql_connect(DB_HOST, DB_USER, DB_PASS);
if(!$link)
{
die('Could not connect to database: ' . mysql_error());
}
$db_select = mysql_select_db(DB_NAME);
if(!$db_select)
{
die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
}
echo "HOLY EFF";
$name = $_POST['name'];
$tacoOrder = $_POST['tacoOrder'];
$query = "INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')";
if(!mysql_query($query))
{
die("DAMMIT");
}
else{ echo "Success"; }
mysql_close();
?>
Run Code Online (Sandbox Code Playgroud)
您也可以使用稍有不同的方法:
$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')");
if (!$query) {
die('Invalid query: ' . mysql_error());
}
else{ echo "Success"; }
Run Code Online (Sandbox Code Playgroud)
脚注:
您可能会获得空数据条目,因为您没有检查表单元素是否为空.
您可以使用条件语句来实现:
if(!empty($_POST['name']) || !empty($_POST['tacoOrder']))
{
// continue with code processing
}
Run Code Online (Sandbox Code Playgroud)
另外,使用Awlad在his answer使用方面提到的内容mysql_real_escape_string()
你也可以在这里阅读一篇好文章 How can I prevent SQL injection in PHP?
这是一个mysqli_*基于(基本)的方法,带有mysqli_real_escape_string()函数和条件语句来检查是否有任何字段为空.
如果其中一个字段为空,则查询将不会执行.
<?php
define('DB_NAME', 'tacoPractice');
define('DB_USER', 'root');
define('DB_PASS', 'root');
define('DB_HOST', 'localhost');
$link = mysqli_connect(DB_HOST, DB_USER, DB_PASS);
if(!$link)
{
die('Could not connect to database: ' . mysqli_error());
}
$db_select = mysqli_select_db($link,DB_NAME);
if(!$db_select)
{
die('Can\'t use ' . DB_NAME . ': ' . mysqli_error());
}
echo "HOLY EFF";
$name = mysqli_real_escape_string($link,$_POST['name']);
$tacoOrder = mysqli_real_escape_string($link,$_POST['tacoOrder']);
if(!empty($_POST['name']) || !empty($_POST['tacoOrder'])){
$query = "INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')";
if(!mysqli_query($link,$query))
{
die("DAMMIT");
}
else{ echo "Success"; }
mysqli_close($link);
}
?>
Run Code Online (Sandbox Code Playgroud)
基本 PHP: $_POST 是一个ARRAY。这不是一个函数:
$name = $_POST('name');
^------^--- should be []
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
40341 次 |
| 最近记录: |