2014-01-26 39 views
1

我一直使用来自不同站点(包括这个站点)的信息设置我的第一个form/PHP/mySQL组合,并使用MAMP在本地服务器上运行它。尽管网页总是成功连接到目标数据库,但它并没有将我输入的数据输入MySQL表格(我正在使用phpMyAdmin进行检查)。PHP无法通过表格创建mySQL记录

您可能会看到一些注释掉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'; 
?> 
+3

似乎您试图在4行插入5个值。 – samayo

+0

你的POST数据在哪里? – Marciano

+0

我看不到'mysql_query' –

回答

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

+1

尝试了所有其他解决方案,并且这是唯一一个添加了一行的解决方案!我已经安装了PDO并将从现在开始坚持使用它。 :) – user3190635

0

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

你应该使用这样的

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

不幸的是,你有一些sql注入漏洞。 –

+0

我建议准备好的陈述,但这是作者可以让他的代码工作。 – evanvee

+1

是的,但我们不应该在这里教坏习惯。 –

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."'"); 
+1

'mysql_real_escape_string'也可以使用 –

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语法中找到错误)。

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 
+0

OP有PDO可用。 –