2011-09-08 131 views
-2

我有一個以下代碼用於在數據庫中輸入數據..我明確地回顯值,以查看他們是否有正確的值或他們有正確的值,但我得到的值數據庫完全不同。無法更新數據庫使用php

這裏是我的代碼

<?php 
    $con = mysql_connect("localhost","root",""); 
    if (!$con) 
     { 
     die('Could not connect: ' . mysql_error()); 
     } 

    mysql_select_db("sm_sample"); 
    $source=$_POST['source']; 
    $username=$_POST['username']; 
    $location=$_POST['location']; 
    $category=$_POST['category']; 
    $complaint=$_POST['complaint']; 
    $status=$_POST['status']; 
    $date=$_POST['date']; 
    echo $source.$username.$location.$category.$complaint.$status.$date; 

    $sql="INSERT INTO sample VALUES(ID=NULL,source='$source',username= 
      '$username', location='$location', category='$category',complaint= 
      '$complaint',date='$date',status='$status')"; 
    if (!mysql_query($sql,$con)) 
     { 
     die('Error: ' . mysql_error()); 
     } 
    echo "1 record added"; 
    echo "<BR>"; 
    echo "<a href='usercom1.php'>View result</a>"; 
    mysql_close($con) 
    ?> 

i的值在這樣的數據庫 - [R獲得:從MySQL

Source Username Location Category Complaint  Date  Status  Update 
0  Singapore    0 0000-00-00 Pending  Edit 
+0

給我們'$ _POST'的'var_dump'或'print_r'和相應的MySQL行 –

+2

請閱讀[this](http://en.wikipedia.org/wiki/SQL_injection)和[this]( http://php.net/manual/en/security.database.sql-injection.php)。 – Albireo

+0

你的代碼對sql注入攻擊是開放的! – markus

回答

-1

列表數據,您應該提供沒有列名的數據只值:

$sql="INSERT INTO sample VALUES(ID, '$source', '$username', '$location', '$category', '$complaint', '$date', '$status')"; 

此外,如果你只有一個數據庫連接,你不能定義$ con mysql_query()中的變量。像這樣:mysql_query($sql)

+0

@vedant您應該查看關於[INSERT](http://dev.mysql.com/doc/refman/5.1/de/insert.html)的文檔,因爲webbandit是正確的。 – str

+0

@webbandit我沒有得到你說的$ con部分......我做了什麼? – vedant

+0

對列的順序進行假設是有風險的。如果您不希望兩個列表之間不匹配,請使用INSERT INTO ... SET col = value,col = value'語法。 – Emyr

1

正確的語法:

$sql="INSERT INTO `sample`(`ID`,`source`,`username`, `location`,`category`,`complaint`,`date`,`status`) 
     VALUES (0, '$source','$username','$location','$category','$complaint','$date','$status')"; 

後來編輯...你正在使用錯誤的mysql_query和連接語法

$con = mysql_connect("localhost","root","") or die('database connection?'); 
mysql_select_db("sm_sample", $con) or die('wrong database?'); 
// and for $_POST you sould use mysql_real_escape_string 
$source = mysql_real_escape_string($_POST['source']); 
// ........................................ 
$sql="INSERT INTO `sample`(`ID`,`source`,`username`, `location`,`category`,`complaint`,`date`,`status`) 
     VALUES (0, '$source','$username','$location','$category','$complaint','$date','$status')"; 
mysql_query($sql) or die('Error: '.mysql_error().': '.mysql_errno()); 
// ........................................ 
mysql_close($con); 
+0

爲什麼downvote?只是爲了好玩或者你不想做什麼? –

+0

是否需要?因爲我以前的代碼用於工作,即使沒有 – vedant

+0

您應該始終使用正確的語法-ES,因爲您將永遠不會知道何時棄用/錯誤的語法將消失/不再工作... –

-1

問題是與以下行:

<?php 
$sql="INSERT INTO sample VALUES(ID=NULL,source='$source',username='$username', location='$location', category='$category',complaint= 
'$complaint',date='$date',status='$status')"; 
?> 

如果你檢查數據庫中的結果,你會發現值的順序是錯誤的,使用t他改爲:

<?php 
$sql="INSERT INTO sample(ID, source, username, location, category, complaint, date, status) VALUES(NULL, '$source', '$username', '$location', '$category', '$complaint','$date','$status')"; 
?> 

請閱讀什麼Albireo張貼在他的評論。你的代碼非常脆弱。

0
<?php 
    $con = mysql_connect("localhost","root",""); 
    if (!$con) 
     { 
     echo ('Could not connect: ' . mysql_error()); 
     } 

    mysql_select_db("sm_sample",$con); 
    $source=$_POST['source']; 
    $username=$_POST['username']; 
    $location=$_POST['location']; 
    $category=$_POST['category']; 
    $complaint=$_POST['complaint']; 
    $status=$_POST['status']; 
    $date=$_POST['date']; 
    echo $source.$username.$location.$category.$complaint.$status.$date; 

    $sql="INSERT INTO sample ('source','username','location','category','complaint','status') VALUES('$source','$username','location','category','complaint','status')"; 
    if (!mysql_query($sql)) 
     { 
     echo ('Error: ' . mysql_error()); 
     } 
    echo "1 record added"; 
    echo "<BR>"; 
    echo "<a href='usercom1.php'>View result</a>"; 
    mysql_close($con); 
    ?> 

你不必首先要添加ID,如果它是自動增量和日期,如果它使用當前的時間戳,並且從不使用die();,使用echo,而不是一兩件事。