php首先执行form action =“<?php echo $ _SERVER ['PHP_SELF'];?> [关闭]

php executes first with form action=" it doesn't wait 'form action=' from html... what's wrong?

<?php
if(isset($_POST['submit']))
{
    $name = $_POST['name'];
    echo "User Has submitted the form and entered this name : <b> $name </b>";
    echo "<br>You can use the following form again to enter a new name.";
}
?>

from my .htaccess. maybe it's braking the code

## Turn on and setup apache rewrite ##
RewriteEngine On
Options +Followsymlinks
RewriteBase /

## Dissable directory indexing ##
Options -Indexes

## Remove trailing slash from end of uri ##
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]

# Redirect to non.php extension
RewriteCond %{THE_REQUEST} ^GET\ /([^/]+/)*[^.]+\.php(\?[^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.php$  $1 [R=301,L]

## Rewrite Rules ##
RewriteRule ^([0-9-a-z-A-Z-_]+)/?$ goto.php?id=$1 [L]
RewriteRule ^account/(.*)$  $1.php [L]

http://php.net/manual/pt_BR/reserved.variables.server.php

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> and <form action="" method="post"> are equals because $_SERVER['PHP_SELF'] return the script name in execution and action="" submit to the page in execution too.

The proper method to check for a POST is to do

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
   ... a POST has occurred ...
}

checking for a particular field name is unreliable - you might change the field name and forget to update the if(), the field might get otherwise excluded, etc... The above code is 100% reliable as it doesn't depend on anything in the form itself, EXCEPT for the submission method.