2016-09-15 96 views
1

我在我的HTML表單的「action」字段中使用外部php文件,以便在點擊Submit按鈕時執行php文件中提到的操作。PHP isset('submit')總是返回FALSE

爲此,我在php文件中使用了isset()函數。

但是,我發現isset函數始終返回FALSE,導致執行else語句(如控制檯日誌中所示)。

如果我刪除了isset()函數(並因此刪除了if-else語句),那麼代碼運行非常好。

你能檢查我的代碼中的問題嗎?

此外,我已經看到了,我需要一起使用一些其他的說法與isset()其他職位,例如,

if(isset($_POST['submit']) && !empty($_POST["xyz"])) 

這是在所有需要的?

P.S .:我仍處於頁面開發的初始階段,因此我請您忽略我的代碼的安全性問題,我承認它存在。 :)

我的子代碼:

我的HTML表單:

<form id="info-form" method="POST" action="form-submit.php"> 
    <label for="Name">What is your Name? </label> 
    <input required type="text" name="name" placeholder="Enter your full name here." /> 

    <label for="Email">What is your email ID? </label> 
    <input required type="email" name="email" placeholder="[email protected]" /> 

    <label for="mobile">What is your 10-Digit Mobile Number? </label> 
    <input required type="text" name="mobile" maxlength="10" /> 

    <button name="submit-form" type="submit" class="btn btn-lg btn-success"><i class="fa fa-paper-plane" aria-hidden="true"></i> 
   Submit 
    </button> 
    <button type="reset" class="btn btn-lg btn-warning"><i class="fa fa-undo" aria-hidden="true"></i> 
     Reset 
    </button> 
</form> 

我的外形submit.php文件:

<?php 
    if(isset($_POST['submit-form'])) 
    { 
     require("database-connect.php"); 

     $name = $_POST['name']; 
     $email = $_POST['email']; 
     $mobile = $_POST['mobile']; 

     $sql = "INSERT INTO tbl_details ". 
       "(name,email_id,mobile_number) ". 
       "VALUES ". 
       "('$name','$email','$mobile')"; 

     mysql_select_db('db_info'); 
     $return = mysql_query($sql, $connect); 

     if(! $return) 
     { 
      die('Could not enter data: ' . mysql_error()); 
     } 

     echo "Entered data successfully\n"; 
     mysql_close($connect); 
    } 

    else 
    { 
     echo "Not Set\n"; 
    } 
?> 
+4

'submit'!='submit-form'(提交按鈕的名稱)。所以你想在你的語句中使用'isset($ _ POST ['submit'-form'])''。 – Qirel

+0

請參閱http://stackoverflow.com/q/4559925/476 – deceze

+0

另外,關於安全性和編程標準:'mysql_ *'函數的注意事項已被棄用,因爲PHP 5.5(和**在PHP 7中完全刪除** ),如果可以的話,你應該[停止使用它們](http://stackoverflow.com/q/12859942)。 你應該選擇另一個允許你使用準備好的語句的API(在處理用戶輸入時你應該*),比如'mysqli_ *'或者PDO - 參見[選擇API](http://php.net) /manual/en/mysqlinfo.api.choosing.php)。基本上,你是廣泛開放的SQL注入 - 閱讀[我怎樣才能防止SQL注入PHP?](http://stackoverflow.com/q/60174/) – Qirel

回答

4

你真的不應該檢查是否存在提交按鈕值開始。正如您所看到的,對前端進行一些輕微的外觀修改,比如使用什麼樣的按鈕來提交表單,不應該對後端產生影響。提交按鈕及其值與處理表單非常不相干。

你真的想檢查服務器上是什麼或者如果請求是一個POST請求,還是因爲你要使用的值設置,或兩者:

if ($_SERVER['REQUEST_METHOD'] == 'POST') … 
if (isset($_POST['name'], $_POST['email'], $_POST['mobile'])) … 

最合理的事情將是:

if ($_SERVER['REQUEST_METHOD'] != 'POST') { 
    header('HTTP/1.0 405 Method Not Allowed'); 
    exit; 
} 

或:

if ($_SERVER['REQUEST_METHOD'] != 'POST') { 
    header('Location: myform.html'); 
    exit; 
} 

你斷言之後,你是處理正確的HTTP方法,處理您的數據:

$data = filter_input_array(INPUT_POST, [ 
    'name' => FILTER_DEFAULT, 
    'email' => FILTER_VALIDATE_EMAIL, 
    'mobile' => FILTER_DEFAULT 
]); 

正如你看到的,你甚至不需要直接在所有$_POST互動。見http://php.net/filter_input_array

+0

謝謝@deceze。我不知道該怎麼感謝你才足夠。你不僅回答了我的問題,而且提供了一個更好的做事方式,這對於像我這樣的初學者來說是至關重要的。你教會了我一個重要的教訓 - 「對前端進行一些細微的改動......不應該對後端產生任何影響」。非常感謝。順便說一句,如果不清楚像我這樣的其他初學者,這個答覆提供的解決方案工作!乾杯。 – ABor

+1

提示:瞭解有關HTTP協議的更多信息,並瞭解服務器上處理HTTP請求的思路。通過使用curl(或其他您喜歡的工具)發出原始HTTP請求來測試服務器的習慣。讓您的服務器充當正確的HTTP端點。它會使你的應用程序比HTML按鈕和表單的思維更加健康。 – deceze

+0

謝謝你的提示。 :) – ABor

0

更改您的按鈕這樣的標籤。我希望它能幫助你!

<input name="submit-form" value="Submit" type="submit" class="btn btn-lg btn-success"> 

謝謝!

+1

他爲什麼要把'

+0

提交按鈕的唯一目的是將HTML表單的數據發送到表單的ACTION屬性中指定的服務器端腳本。 –

+1

是的......爲什麼它應該是''? '

0

您應該使用input -element而不是按鈕。

<button name="submit-form" type="submit" class="btn btn-lg btn-success"> 
<i class="fa fa-paper-plane" aria-hidden="true"></i>Submit 
</button> 

應該通過輸入來代替這樣的:

<input name="submit-form" value="ButtonText" type="submit" class="btn btn-lg btn-success" /> 

輸入的值是將其顯示給用戶的文本。

而且,在你的問題你提到isset('submit')isset($_POST['submit']),而另一些是正確的,這是不是一個現有的名稱在HTML代碼中,你的PHP代碼不包含正確的isset($_POST['submit-form'])。 它會導致有點慌亂了一些「快速」的讀者......


至於額外!empty($_POST["xyz"])),你的目的(如果檢查的形式是回發),將沒有必要。

+1

'

+0

@RocketHazmat我不知道那個......謝謝 – x13

+0

此外,'' *是*顯示的文本和提交的值。 '