2013-02-21 130 views
0

我的php代碼似乎並沒有工作。昨天正在運作,但我必須改變一些東西,現在不是。據我可以告訴它是導致問題的if($ word)。 else部分的功能,它與mysql數據庫連接,但一個if語句什麼都不做。php表單插入到mysql

這裏的PHP:

<?php 
    require('connect.php'); 
    $word=$_POST['word']; 
    $submit=$_POST['submit']; 

    if($submit){ 
     if($word){ 
     mysql_query("INSERT INTO words (word) VALUES ($word)"); 
     } 
     else{ 
     echo "Enter a word."; 
     } 
    } 
?> 

,這是HTML表單:

<form name="form" id="form" method="post" action="index.php"> 
    <p><label>Label</label></p> 
    <p><input type="text" name="word" id="word" maxlength="16"/></p> 
    <p><input type="submit" name="submit" id="submit" value="Save"/></p> 
</form> 
+2

[**在新的代碼,請不要使用'mysql_ *'功能**](http://bit.ly/phpmsql)。他們不再被維護[並且被正式棄用](http://j.mp/XqV7Lp)。看到[**紅框**](http://j.mp/Te9zIL)?學習[*準備的語句*](http://j.mp/T9hLWi),並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [這篇文章](http://j.mp/QEx8IB)將幫助你決定哪個。 – Kermit 2013-02-21 18:45:03

+0

'據我可以告訴它是導致問題的if($ word) - 你能提供一些理由,你爲什麼認爲導致了這個問題?它造成什麼問題? – Growler 2013-02-21 18:45:43

+0

您的查詢具有SQL注入,請參閱http://stackoverflow.com/a/60195/813069如何處理輸入 – Winston 2013-02-21 18:47:56

回答

4

您應立即停止使用此代碼。它容易受到SQL注入的影響。您需要了解如何綁定參數以防止出現這種情況,以及使用未棄用的API。我還建議您檢查REQUEST_METHOD,而不是如果$_POST['word']被設置爲可以爲空。

由於您沒有任何類型的錯誤捕獲函數,因此很難說出可能存在的問題。如果我猜的話,有可能是因爲你缺少單引號在你發佈的變量:

...INSERT INTO words (word) VALUES ('$word')... 

使用參數:

<?php 

if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST['submit'])) { 

    $link = mysqli_connect('localhost', 'my_user', 'my_password', 'world'); 

    /* check connection */ 
    if (!$link) { 
     printf("Connect failed: %s\n", mysqli_connect_error()); 
     exit(); 
    } 

    $stmt = mysqli_prepare($link, "INSERT INTO words (word) VALUES (?)"); 
    mysqli_stmt_bind_param($stmt, 's', $_POST['word']); 

    /* execute prepared statement */ 
    mysqli_stmt_execute($stmt); 

    printf("%d Row inserted.\n", mysqli_stmt_affected_rows($stmt)); 

    /* close statement and connection */ 
    mysqli_stmt_close($stmt); 

    /* close connection */ 
    mysqli_close($link); 
} 
?> 

documentation是一個良好的開端。

+0

儘管這可能是OP的最佳答案,但您應該將他指向OOP PHP,因爲他似乎對此很新穎。更好地從OOP開始,而不是僅僅學習程序,以便稍後再去撓頭。 – Amelia 2013-02-21 19:00:27

+0

@Hiroto我不明白爲什麼我應該把他指向OOP,也不知道爲什麼它更好。編程風格是由OP決定的。我在答案下的評論應該足夠了。 – Kermit 2013-02-21 19:02:29

1

你最有可能需要引用您$word值...

INSERT INTO words (word) VALUES ('$word') 

正如在評論中提到...

Why shouldn't I use mysql_* functions in PHP?

而且不要忘記輸入清理。

How can I prevent SQL injection in PHP?

xkcd.com

+0

'INSERT INTO words SET(word)VALUES($ word)'是無效的MySQL語法。 – 2013-02-21 18:49:02

+1

OP的查詢沒有任何理由不起作用。 – Kermit 2013-02-21 18:49:58

+1

++爲鮑比表。 – Amelia 2013-02-21 18:50:25