iT邦幫忙

0

PHP 設定input action若要在同個檔案做邏輯判斷,為何不設定action為自己的file?

  • 分享至 

  • xImage

這是info.php,這裡的form設定action為info.php,說為了做上面php區塊的邏輯判斷。

<?php 
    if(isset($_POST["delete"])){
        $del = mysqli_real_escape_string($conn,$_POST["id_to_del"]);
        $sql ="DELETE FROM pizzas where id = $del";

        if(mysqli_query($conn,$sql)){
            header("Location: index.php");
        }else{
            echo "query error" . mysqli_error($conn);
        }
    }    
?>

<!DOCTYPE html>
<html lang="en">
        <div class="container center">
                <form method="POST" action="info.php">
                    <input type="hidden" name="id_to_del" value="<?php echo $pizza["id"]?>">
                    <input type="submit" name="delete" value="DELETE" class="btn brand z-depth-0">    
                </form>
        </div>
</html>

以下是index.php,form中的action未設定任何值,但內部的$email仍是靠上面的php做邏輯判斷不是嗎??為何不用設定action為index.php將資料傳給自己呢?

<?php
    $email = $title = "";
    $error = array("email"=> "", "title"=> "");
    if(isset($_POST["submit"])){
        if(empty($_POST["email"])){
            $error["email"] = "email is required<br>";
        }else{
            $email = $_POST["email"];
            if(!filter_var($email,FILTER_VALIDATE_EMAIL)){
                $error["email"] = "email must be a valid email address.";
            }
        }
     }?>
     
<form action="" method ="POST" class="white">
            <label for="">Your email:</label>
            <input type="text" name="email" value="<?php echo $email?>">
            <div class=""><?php echo $error["email"]?></div>

            <label for="">Pizza title:</label>
            <input type="text" name="title" value="<?php echo $title?>">
            <div class=""><?php echo $error["title"]?></div>

            <div class="center">
                <input type="submit" name="submit" value="submit" class="btn brand z-depth-0">
            </div>
        </form>
混水摸魚 iT邦研究生 2 級 ‧ 2021-12-29 10:54:37 檢舉
為何不用設定action為index.php將資料傳給自己呢?<=預設值就是自已
為什麼都要傳到另一頁處理資料 <=這個MVC有關,資料輸入頁面獨立,處理資料也獨立,當程式有錯誤時比較容易除錯,也不會造成無窮迴圈的問題以前會把瀏覽器搞掛現在是有防呆。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
Felix
iT邦研究生 2 級 ‧ 2021-12-28 19:15:56
最佳解答

If action is the empty string, let action be the URL of the form document.
如果表單的 action 屬性為空,瀏覽器會視當前網頁為目標網頁。
From HTML Standard §4.10.21.3 Form submission algorithm

但是,由於每個瀏覽器的實作不同,也是有可能會出現非預期的結果。
例如,HTML4 規定 action 屬性是必要的,否則瀏覽器可能會視空字串為目標網頁。

簡而言之,請設定表單的 action 屬性,如此一來就都不必擔心了。

2

這需要說明一下,其實各種HTML的元素。對應的瀏覽器都有其屬性的預設值存在。
當你未設定給它屬性的情況下。就得看瀏覽器的預設屬性是什麼。

就你說的 form 的 action 預設屬性值。就目前的瀏覽器來說,大多數都是指向當前運行的頁面。
以前有一個瀏覽器的預設值是指向空頁。

所以指定屬性值其實算是很重要的事。畢竟有機會在未指定的情況下。
可能會發生在不同瀏覽器會有不同的解釋問題。
基本來講最好還是指定一下。

我要發表回答

立即登入回答