2013-05-20 62 views
0

我无法获得此工作,它不会将数据发布到数据库,我对此完全陌生,任何帮助都很棒!向数据库发布新数据

<?php 
    $connection = mysql_connect('server', 'user', 'pass') or die(mysql_error()); 
    mysql_select_db('db') or die(mysql_error()); 

    $client = $_POST['client']; 
    $date = $_POST['date']; 
    $amount = $_POST['amount']; 

    $sql = "INSERT INTO $sales (client, date, amount) VALUES ('$client', '$date', '$amount')"; 

    $result = mysql_query($sql, $connection); 

    if ($result) { 
     echo "Successful"; 
     echo "<BR>"; 
     echo "<a href='insert.php'>Back to main page</a>"; 
    } else { 
     echo "ERROR"; 
    } 
?> 
+1

你应该清理你的post变量来防止sql注入。 –

+0

已弃用:使用mysqli_ *而不是mysql_ * – antoox

+0

mysql_select_db('db')应该定义$ connection:mysql_select_db('db',$ connection)。但是..使用mysqli来代替 –

回答

1

什么是$销售看起来它不应该是可变的,假设它作为表名,试试这个

$sql="INSERT INTO sales (client, date, amount) VALUES ('$client', '$date', '$amount')"; 

此外,日期是在MySQL中的保留字,但它被接受使用它没有反勾运营商,这将是很好的逃避它这样

$sql="INSERT INTO sales (client, `date`, amount) VALUES ('$client', '$date', '$amount')"; 
+0

不,日期不是[MYSQL中的保留字](https://dev.mysql.com/doc/refman/5.5/en/reserved-words.html)。从doc:_MySQL允许一些关键字被用作未加引号的标识符,因为许多人以前使用它们。实例是在以下列表: ACTION BIT DATE_ – antoox

+0

@antoox你应该正确读取我的回答“此外,日期是MySQL中的保留字,但它被接受对它使用,无反勾运营商” –

+0

太棒了!非常感谢你!! – Aurelius

1

看起来你已经确立了自己的表名作为变量,这是很好的,但是你有没有定义它。另外,我强烈建议您清理$_POST变量以防止SQL注入。

Please, don't use mysql_* functions in new code. 他们不再保持和deprecation process已经开始就可以了。请参阅 的red box? 了解prepared statements代替, 和使用PDOMySQLi - 这 article将 帮助您决定。

<?php 

$mysqli = new mysqli('host', 'user', 'password', 'database'); 

$client = $_POST['client']; 
$date = $_POST['date']; 
$amount = $_POST['amount']; 

$sql = "INSERT INTO sales (client, `date`, amount) VALUES ('$client', '$date', '$amount')"; 
$result = $mysqli -> query($sql); 
$num = $mysqli -> affected_rows; 

if($num == 1){ 
    echo 'Success'; 
}else{ 
    echo 'Error: '.$mysqli -> error; 
} 

此外,date是MySQL中的保留字,所以我会建议使用反勾运营商或可能更改列名。