2015-09-29 82 views
-2

我正在寫一個PHP腳本來獲取變量的內容並將其插入到我的MYSQL數據庫中,它在我定義值時運行良好,但使用變量只會給出錯誤,任何人都可以告訴我保存的正確方法形成一個變量的輸入。 (表格是在同一文件中不包括登錄SQL腳本,因此使用$_POST不工作)將表單輸入保存到php變量中?

mysqli_query($connect,"INSERT INTO news (news) 
VALUES ('$email')"); 
if(mysqli_affected_rows($connect) > 0){ 
echo $good; 
else 
echo $bad 
} 

形式:

<div class="row"> 
    <form class="col s12"> 
    <div class="row"> 
    <div class="input-field col s6"> 
     <input placeholder="Placeholder" id="email" type="text"  
     <label for="news">news</label> 
    </div> 
+0

顯示完整的代碼 –

+0

請分享您與我們試過的代碼 - 它有點難以幫助你這樣做。 –

+0

即使您在同一頁面上使用'$ _POST ['']'數組,也應該可以工作。除非當然你不是首先發送你的表格。你能告訴我們你的代碼嗎?這將讓我們明白爲什麼陣列不能工作,你需要做些什麼來解決它。 – icecub

回答

0

您正在詢問該腳本的許多問題。讓我們通過所有的人都走:

1)設置表格屬性
告訴瀏覽器如何將表單數據發送到你的服務器是很重要的。否則,你將最終不得不依靠超全球性的$_REQUEST。從PHP官方網站援引:

在$ _REQUEST的變量通過GET, POST和COOKIE機制提交至腳本,因此可以修改通過 遠程用戶和不能被信任

因此,您應該將method屬性添加到您的表單中。您可能要添加字符編碼爲好,只是要確定你的腳本就不會感到困惑,當有人使用非UTF-8字符:

<form method="POST" action="" accept-charset="utf-8"> 

2)的方式來訪問你的POST數據
爲了能夠實際做POST數據,你需要一種方法來訪問它。這就是name屬性發揮作用:

<input placeholder="Placeholder" id="email" type="text" name="email" /> 

超全局$_POST現在將能夠使用name屬性值作爲密鑰來訪問輸入字段的值:$_POST['email']。這隻會在表單發送後才起作用。

3)提交表單
你不能指望magicly你的服務器都通過你的網站訪問者填寫表單數據。首先,您需要提交:

<input type="submit" value="Register email" /> 

這將成爲與文本你已經安裝在value屬性按鈕。當訪問者點擊它時,你的表單數據將被提交給你的服務器。

所以,你的整個造型看起來應該是這樣:

<form method="POST" action="" accept-charset="utf-8"> 
    <input placeholder="Placeholder" id="email" type="text" name="email" /> 
    <input type="submit" value="Register email" /> 
</form> 

4)建立PHP
在我們開始與POST數據的工作,我們需要確保用戶給我們的數據:

if(isset($_POST['email']) && !empty($_POST['email'])){ 
    //... 
} 

這將驗證$_POST['email']是否存在並確保它不爲空。

5)安全地處理用戶數據:預處理語句
一個你學到作爲一名開發人員是永遠信任用戶數據的第一件事情。在未經驗證的情況下將數據輸入到用戶提交的數據庫中,會造成很多麻煩。特別是SQL Injection

使用MySQLi Prepared Statements,你可以保護自己免受這樣的:

//$link will be the connection to your database 
//For example: $link = mysqli_connect("localhost", "db_user", "db_pass", "db_name"); 
if ($stmt = mysqli_prepare($link, "INSERT INTO news (news) VALUES (?)")) { 
    /* bind parameters for markers */ 
    mysqli_stmt_bind_param($stmt, "s", $_POST['email']); 

    /* execute query */ 
    mysqli_stmt_execute($stmt); 

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

    /* print success message */ 
    echo "Email successfull registered!"; 
} else { 
    /* print errors */ 
    printf("MySQL Error: %s\n", mysqli_error($link)); 
} 

結束語一起:

<?php 

if(isset($_POST['email']) && !empty($_POST['email'])){ 
    //$link will be the connection to your database 
    //For example: $link = mysqli_connect("localhost", "db_user", "db_pass", "db_name"); 
    if ($stmt = mysqli_prepare($link, "INSERT INTO news (news) VALUES (?)")) { 
     /* bind parameters for markers */ 
     mysqli_stmt_bind_param($stmt, "s", $_POST['email']); 

     /* execute query */ 
     mysqli_stmt_execute($stmt); 

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

     /* print success message */ 
     echo "Email successfull registered!"; 
    } else { 
     /* print errors */ 
     printf("MySQL Error: %s\n", mysqli_error($link)); 
    } 
} 

?> 

<!-- Your HTML here --> 
<div class="row"> 
    <form class="col s12" method="POST" action="" accept-charset="utf-8"> 
     <div class="row"> 
      <div class="input-field col s6"> 
       <input placeholder="Placeholder" id="email" type="text" name="email" /> 
       <input type="submit" value="Register email" /> 
      </div> 
     </div> 
    </form> 
</div> 
<!-- Your HTML here --> 
0

給您輸入一個名稱

<input placeholder="Placeholder" id="email" name="email" type="text"> 

並用php獲取值

$email = $_REQUEST['email']; //to get both GET and POST methods. 

然後在您的查詢中使用$ email

+0

nope,它仍然進入我的錯誤頁面。 – ozzie

+0

@ozzie我正在尋找一個更好的答案,因爲依靠'$ _REQUEST'是一個壞主意。 – icecub

+0

你可以發佈你所有的代碼,HTML和PHP ...我將能夠幫助你調試。 – Diamond