2011-03-12 88 views
0

我有下面的代碼:MySQL的不插入

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

mysql_select_db("blahblah", $con); 

$sql="INSERT INTO links (link, notes, username) 
VALUES 
('$_POST[link]','$_POST[notes]','$_POST[username]')"; 

if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 
echo "1 link added"; 

mysql_close($con) 
?> 
</body></html> 

應該插入一個鏈接,註釋和用戶名到我的數據庫,但事實並非如此。我對於爲什麼會感到無能爲力,並希望得到一些幫助!它從下面的表格中獲取這些值:

<div id="stylized" class="myform"> 
<form id="form" name="form" method="post" action="user.php"> 
<label>Username 
<span class="small">Enter Your Username</span> 
</label> 
<input type="text" name="name" id="username" /> 

<label>Link 
<span class="small">Paste Your Link</span> 
</label> 
<input type="text" name="email" id="link" /> 

<label>Notes 
<span class="small">Add Some Notes</span> 
</label> 
<input type="text" name="password" id="notes" /> 

<button type="submit"></button> 
<div class="spacer"></div> 

</form> 
</div> 

謝謝!

+0

你有什麼錯誤? (順便說一句,用戶名輸入是「名稱」,而不是「用戶名」) – yoavmatchulsky 2011-03-12 15:19:15

+0

錯誤說什麼? – kjy112 2011-03-12 15:19:37

+0

沒有錯誤,只是不插入它... – 2011-03-12 15:20:55

回答

2

我看到至少有三個問題,與您的代碼:

首先,注射串到一個SQL查詢時,你必須逃脫它,使用mysql_real_escape_string()

$link = mysql_real_escape_string($_POST['link']); 
$notes = mysql_real_escape_string($_POST['notes']); 
$username = mysql_real_escape_string($_POST['username']); 

$sql="INSERT INTO links (link, notes, username) 
VALUES ('$link','$notes','$username')"; 


,在您的PHP代碼中,您必須使用輸入字段name屬性 - 而不是它們的id屬性。

考慮到你的HTML代碼如下所示:

  • $_POST['name'],而不是$_POST['username']
  • $_POST['email'],而不是$_POST['link']
  • $_POST['password'],而不是:

    <input type="text" name="name" id="username" /> 
    <input type="text" name="email" id="link" /> 
    <input type="text" name="password" id="notes" /> 
    

    你應該工作$_POST['notes']

注:使用nameid是不同導致的麻煩;-)



所以,總結一下,你的代碼看起來有點更像此:

$email = mysql_real_escape_string($_POST['email']); 
$password = mysql_real_escape_string($_POST['password']); 
$name = mysql_real_escape_string($_POST['name']); 

$sql="INSERT INTO links (link, notes, username) 
VALUES ('$email','$password','$name')"; 

注意:您應該對輸入字段和表中的字段使用相同的名稱 - 這會使您的代碼更易於理解。

+0

首先不是問題。合理使用 – 2011-03-12 15:27:33

0

POST變量的索引必須與表單項的名稱匹配。

因此,要麼寫:

<input type="text" name="link" id="link" />或使用$_POST[email]

適應的其他變量。

0

id屬性在提交表單時沒有意義。您可能想要更換nameid屬性。

目前,$_POST['name']$_POST['email']$_POST['password']正在提交,而不是$_POST['username']$_POST['link']$_POST['notes']

您的代碼也容易受到SQL injection的影響。

1

替換:

$sql="INSERT INTO links (link, notes, username) 
VALUES 
('$_POST[link]','$_POST[notes]','$_POST[username]')"; 

有:

$sql="INSERT INTO links (link, notes, username) 
VALUES 
('". mysql_escape_string($_POST['name']) ."','". 
    mysql_escape_string($_POST['email']) ."','". 
    mysql_escape_string($_POST['password']) ."')"; 

注意,你想在你的查詢中使用POST變量是從這些表格上完全不同

0

的項目在$ _POST中按名稱屬性進行索引,而不是由id進行索引。