2014-03-03 37 views
1

我想从表单拉下两个文本字段到一个基本的MySQL数据库,它给我的麻烦。因此,这里有我的两个文件,HTML表单第一:PHP表单不能插入mySQL数据库

<!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> 

和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(); 

?> 

它不给连接错误,但没有数据被插入到我的数据库。有任何想法吗?

谢谢。

回答

6

其他人已经给你答案。要添加,您使用的列名应该是反引号或完全删除引号。

变化:

INSERT INTO orders ('name', 'tacoOrder') 
        ^^^  ^

INSERT INTO orders (`name`, `tacoOrder`) 

INSERT INTO orders (name, tacoOrder) 

或作为一个完整的答案:

$name = $_POST['name']; 
$tacoOrder = $_POST['tacoOrder']; 

$query = "INSERT INTO orders (`name`, `tacoOrder`) VALUES ('$name', '$tacoOrder')"; 

旁注:反引号不是必需的,但不能使用列名的单引号。这只是一种习惯性的力量,我自己对列名使用反引号。

另外,这$mysql_close();不应该在mysql_close前面$$link括号内:

更改为mysql_close($link);

然而由外国人先生指出,为mysql_close()的变量是可选的(感谢对于)

你也有一个失踪if(!mysql_query($query))应理解为if(!mysql_query($query))

是否考虑使用预处理语句或PDO切换到mysqli_*函数。 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(); 

?> 

您也可以使用此方法,则略有不同:

$query = mysql_query("INSERT INTO orders (name, tacoOrder) VALUES ('$name', '$tacoOrder')"); 
if (!$query) { 
    die('Invalid query: ' . mysql_error()); 
} 
else{ echo "Success"; } 

脚注:

由于您没有检查表单元素是否为空,您有可能会获取空数据条目。

你可以使用一个条件语句的效果:

if(!empty($_POST['name']) || !empty($_POST['tacoOrder'])) 
{ 
// continue with code processing 
} 

另外,使用什么Awlad提到了his answer在关于使用mysql_real_escape_string()

你也可以在这里SO 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); 

} 

?> 
+0

没有一个是sql保留的关键字,所以你不需要反引号,而且,变量对于'mysql_close()'是可选的'http://in1.php.net/mysql_close和aaaah我没有看到引用表名,会删除我的,并upvote你的,但你可以删除不必要的部分你的答案 –

+0

我说的是列名,而不是保留字。它们不能用引号包裹,但反引号。 @ Mr.Alien VALUES是,但不是列名。 –

+0

是的,但反引号不需要在这里,如果我们使用MySQL保留关键字作为列名,它们会被使用 –

2

没有必要的 '{}' 和$ _ POST( '名称')

$name =  $_POST['name']; 
$tacoOrder = $_POST['tacoOrder']; 
$query = "INSERT INTO orders ('name', 'tacoOrder') VALUES ('$name','$tacoOrder')"; 
+0

复制的答案是不好的习惯:) –

+0

我没有复制我答曰第一mr.Alien – user3064914

+0

你看我和榨渣回答,你就回答不使用大括号后,编辑你的答案,我的眼睛无处不在 –

4

基本PHP:$ _ POST是ARRAY。这不是一个功能:

$name = $_POST('name'); 
       ^------^--- should be [] 
0

所有$_POST('var_name')应该$_POST['var_name'];

更换

$name = $_POST('name'); 
$tacoOrder = $_POST('tacoOrder'); 

由:

$name =mysql_real_escape_string($_POST['name']); 
$tacoOrder = mysql_real_escape_string($_POST['tacoOrder']); 
1

喜@ user2839411即使我面临同样的问题,其中数值没有歌厅插入MySQL数据库,所以尝试了许多相关网站seaching但最后W3Schools的帮助我才达到的结果。 这是下面的代码,它将值插入到数据库中。

PHP代码:

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = "password"; 
$dbname = "dbitb"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

if(isset($_POST['btn-signup'])) 
{ 
$name = ($_POST['name']); 
$address = ($_POST['address']); 
$email = ($_POST['email']); 
$mobile = ($_POST['mobile']); 
$highest_degree = ($_POST['highest_degree']); 
$relavant_exp = ($_POST['relavant_exp']); 

$sql = "INSERT INTO dbitb.volunteer_reg (name,address,email,mobile,highest_degree,relavant_exp) 
VALUES ('$name','$address','$email','$mobile','$highest_degree','$relavant_exp')"; 

if ($conn->query($sql) === TRUE) 
{ 
    echo "New record created successfully"; 
} 
else 
{ 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 
$conn->close(); 
} 
?> 

HTML代码:

<form method="post" action ="register.php" id="contact-form"> 

<input type="text" name="name" placeholder="name" required /> 

<textarea id = "address" name="address" placeholder="address" required /></textarea> 


<input type="email" name="email" placeholder="email" required /> 


<input type="mobile" name="mobile" placeholder="mobile" required /> 


<input type="highest_degree" name="highest_degree" placeholder="highest degree" required /> 

<textarea id = "relavant_exp" name="relavant_exp" placeholder="relavant experience" required /></textarea> 

<div class="btn-group" role="group"> 
<input type="submit" class="btn btn-default" name="btn-signup" value="Enter the box" style="margin-top: 15px; margin-right: 15px; border-radius: 4px;"> 
<a href="index.html"><button type="button" class="btn btn-default" style="margin-top: 15px;">&laquo; Back</button></a> 
    </div> 

</form> 
0

我有同样的挑战。这是我在12个小时后解决它的方法。

<?php 
if(isset($_POST['button'])){ 
    // echo "hi"; 
    $username = $_POST['username']; 
    $password = $_POST['password']; 

    //TO ALERT SUBMISSION OF BLANK FIELDS(IT DOESN'T PREVENT SUBMISSION OF BLANK FIELD THOUGH) 
    if (!$username && !$password){ 
     echo "can't submit blank fields"; 
    } 

    //TO CONFIRM YOU ARE CONNECTED TO YOUR DATABASE (OPTIONAL) 
    $connection = mysqli_connect('localhost', 'root', '', 'berrybells'); 
    if ($connection){ 
     echo "we are connected";} 
    else{ 
     die("connection failed"); 
    } 

    //TO INSERT username and password from field to jossyusers database 
    $query = "INSERT INTO jossyusers(username,password) VALUES('$username','$password')"; 
    $result = mysqli_query($connection, $query); 
    if(!$result){ 
     die("OOPPS! query failed".mysqli_error($connection)); 
    } 
} 
?> 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Login Page</title> 

</head> 
<body> 
    <form action="login_create.php" method="post"> 
     <div class="myclass"> 
      <h1>Username</h1> 
      <input placeholder="Name" name="username" type="text"> 
      <input placeholder="Password" name="password" type="password"> 
      <input type="submit" name="button" value="submit"> 
      <?php 

      ?> 
     </div> 
    </form> 
</body> 
</html>