2012-12-17 93 views
-1

我米試圖通過PHP變量PHP數據庫變量

<html> 
<head> 
<title>Welcome to PHP Products</title> 
</head> 
<body> 
<?php 
$txt1=$_POST["product_form_no"]; 
$txt2=$_POST["product_form_name"]; 
$txt3=$_POST["product_form_desc"]; 

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

mysql_select_db("sample", $con); 

mysql_query("INSERT INTO `sample`.`product` (`product_no`, `product_name`, `product_desc`, `created_DT`) VALUES 
(echo $txt1,echo $txt2,echo $txt3, CURRENT_TIMESTAMP);"); 

mysql_close($con); 


    ?> 



<h1>The Entered Product</h1> 

<p>Product No</p><?php echo $txt1 ?> 
<p>Product Name</p><?php echo $txt2 ?> 
<p>Product Desc</p><?php echo $txt3 ?> 

    </body> 
    </html> 

遺憾的是它不通過變量的mysql_query插入插入一條記錄。它沒有給出一些錯誤。

+3

您應該在嘗試製作一個處理產品和可能購物車的應用程序之前閱讀一本PHP書。你還有很多東西需要學習,我的意思是用最好的方式:)這就是說,你的問題是你沒有在你的mysql_query調用中放置合適的MySQL查詢。然而,比這個更麻煩的是,即使你的字符串格式正確,它也會容易受到SQL注入的攻擊,這對你來說可能會造成不好的結果。 –

+1

與問題無關,但是... 1)您不應該將密碼放在頁面的文件中。如果您意外地提供了文件代碼而不是解釋它,那麼您就會發出密碼。 2)您的代碼對於直接從用戶輸入中直接構建查詢的SQL注入漏洞開放。 3)請停止使用'mysql_ *'並至少使用'mysqli_ *',或者更好的是,使用PDO。 4)您有一個XSS漏洞,您可以將用戶輸入反饋回頁面。 – David

+0

您不需要回顯這些變量。將這些內容傳遞給幾個單引號('),並在日期時間內使用sql的now()函數。 – Dev

回答

3

用這種方式

//First escape your variable values before using into query 
$txt1=mysql_real_escape_string($_POST["product_form_no"]); 
$txt2=mysql_real_escape_string($_POST["product_form_name"]); 
$txt3=mysql_real_escape_string($_POST["product_form_desc"]); 


mysql_query("INSERT INTO `sample`.`product` (`product_no`, `product_name`, `product_desc`, `created_DT`) VALUES 
('$txt1','$txt2','$txt3', CURRENT_TIMESTAMP());"); 

建議:

1.Learn從MySQL注射預防:不建議用於編寫新的代碼Good Link

2.Mysql擴展。相反,應該使用mysqli或PDO_MySQL擴展。更多閱讀:PHP Manual

3. Variable parsing

+3

教一個人釣魚... –

3
  1. 您在查詢不echo變量。
  2. 請,請開始閱讀SQL注入。你的代碼是開放的。

查詢應成爲這樣的事:

mysql_query(" 
    INSERT INTO `sample`.`product` (`product_no`, `product_name`, `product_desc`, `created_DT`) 
    VALUES ('" . mysql_real_escape_string($txt1) . "', '" . mysql_real_escape_string($txt2) . "', '" . mysql_real_escape_string($txt3) . "', CURRENT_TIMESTAMP) 
"); 
0

一定要逃脫你的投入更安全的SQL,回聲不應該在那裏。我也認爲CURRENT_TIMESTAMP應該是一個函數並且有parens。

<html> 
<head> 
<title>Welcome to PHP Products</title> 
</head> 
<body> 
<?php 
$txt1=mysql_real_escape_string($_POST["product_form_no"]); 
$txt2=mysql_real_escape_string($_POST["product_form_name"]); 
$txt3=mysql_real_escape_string($_POST["product_form_desc"]); 

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

mysql_select_db("sample", $con); 

mysql_query("INSERT INTO `sample`.`product` (`product_no`, `product_name`, `product_desc`, `created_DT`) VALUES 
('$txt1','$txt2','$txt3', CURRENT_TIMESTAMP())"); 

mysql_close($con); 


    ?> 

<h1>The Entered Product</h1> 

<p>Product No</p><?php echo $txt1 ?> 
<p>Product Name</p><?php echo $txt2 ?> 
<p>Product Desc</p><?php echo $txt3 ?> 

    </body> 
    </html>