web-dev-qa-db-ja.com

シンプルPHP送信フォームが機能しない

単純な送信フォームを作成するだけでは、機能しないようです。

奇妙なエラーも報告されません。

Php.iniを確認したところ、すべて問題ないようです。

HTML:

<form id="submit-form" action="receiving.php" method="POST">
        <h3>Submit a Link</h3>
        <fieldset>
            <table>
                <tr>
                    <td><label for="name">You</label></td>
                    <td><input id="name" name="name" type="text" placeholder="Your Twitter or Blog ect." /></td>
                </tr>
                <tr>
                    <td><label for="submit-links">Link(s)</label></td>
                    <td><input id="sumbit-links" name="submit-links" type="text" placeholder="" required="" /></td>
                </tr>
                <tr>
                    <td><input name="submit" type="submit" value="SUBMIT" /></td>
                </tr>
            </table>
        </fieldset>
    </form>

receive.php:

<?php 
error_reporting(-1);
$name = $_POST['name']; 
$submit-links = $_POST['submit-links']; 
if(isset($_POST['submit'])){
 $from_add = "[email protected]"; 
 $to_add = "[email protected]"; 
 $subject = "Your Subject Name";

 $message = "Name:$name \n Sites: $submit-links";

 $headers = 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion()

 if(mail($to_add,$subject,$message,$headers)){
    $msg = "Mail sent";
 } 
}
print "<p>Thanks $name</p>";
?>

どんな助けでも大歓迎です:)

6
mildrenben

フォームにいくつか問題がありました。この回答を投稿する前に、私はテスト済みでした。

_Jeremy Miller_が彼の回答(_+1_ Jeremy btw)で指摘しているように、変数でハイフンを使用することは無効です。代わりにアンダースコアを使用してください。

また、'X-Mailer: PHP/' . phpversion()の後に終了セミコロンがありません。ちなみに、これは(セキュリティ目的で)使用すべきではありませんが...どうしても使用したい場合は、次のように追加してください。 'X-Mailer: PHP/' . phpversion();-以下を参照[〜#〜] edit [〜#〜](推奨される使用法)。

この_$msg = "Mail sent";_は、変数をテキストに割り当てるだけなので、送信が成功した後、メッセージ「_Mail sent_」を出力しません。以下に追加した_echo it_する必要があります。それはエラーではありませんが、使用しないのであればなぜそれを持っているのですか。 (ウィンク)。

HTMLフォーム

_<form id="submit-form" action="receiving.php" method="POST">
        <h3>Submit a Link</h3>
        <fieldset>
            <table>
                <tr>
                    <td><label for="name">You</label></td>
                    <td><input id="name" name="name" type="text" placeholder="Your Twitter or Blog ect." /></td>
                </tr>
                <tr>
                    <td><label for="submit_links">Link(s)</label></td>
                    <td><input id="sumbit_links" name="submit_links" type="text" placeholder="" required="" /></td>
                </tr>
                <tr>
                    <td><input name="submit" type="submit" value="SUBMIT" /></td>
                </tr>
            </table>
        </fieldset>
</form>
_

[〜#〜] php [〜#〜]

_<?php 
error_reporting(-1);

$name = $_POST['name']; 
$submit_links = $_POST['submit_links']; 

if(isset($_POST['submit']))
{
$from_add = "[email protected]"; 
$to_add = "[email protected]"; 
$subject = "Your Subject Name";
$message = "Name:$name \n Sites: $submit_links";

$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

if(mail($to_add,$subject,$message,$headers)) 
{
    $msg = "Mail sent";

echo $msg;

} 
}

print "<p>Thanks $name</p>" ;

?>
_

編集(推奨される使用法)

PHPファイルに直接アクセスすると、現在の条件文は次のエラーをスローするため、次のPHPを使用することをお勧めします。これが発生する可能性があります。

さらに、'X-Mailer: PHP/' . phpversion()を使用すると、使用しているPHPバージョン)がわかります。

私はそれを良い権限で持っています、これを使用することはセキュリティホールです。彼の名前は今私から逃れていますが、覚えたら追加します。

注意:未定義のインデックス:4行目の...の名前

注意:未定義のインデックス:5行目の...のsubmit_links

if(isset($_POST['submit']))条件文内に変数を設定しました。

_<?php 
error_reporting(-1);

if(isset($_POST['submit']))
{
$name = $_POST['name']; 
$submit_links = $_POST['submit_links']; 
$from_add = "[email protected]"; 
$to_add = "[email protected]"; 
$subject = "Your Subject Name";
$message = "Name:$name \n Sites: $submit_links";

$headers = 'From: [email protected]' . "\r\n" .

'Reply-To: [email protected]' . "\r\n";

if(mail($to_add,$subject,$message,$headers)) 
{
    $msg = "Mail sent";

 echo $msg;
} 

print "<p>Thanks $name</p>" ;
}

// else conditional statement for if(isset($_POST['submit']))
else {
echo "Sorry, you cannot do that from here. Please fill in the form first.";
}

?>
_
3

$submit-linksは有効な変数名ではありません。すべてのインスタンスを$submit_linksに切り替えます

6
Sylas Seabrook

アクションが間違っている可能性があります。たとえば、htaccesshttpではなくhttps.wwwにリダイレクトする場合、次の例では$_POSTは表示されません。

<?php  $formAction = 'http://somedomain.com/receiving.php'; ?>
<form  method="post"  action="<?php echo $formAction; ?>" >
//$_POST will be empty

しかし、あなたが使用すればそれは動作します

<?php  $formAction = 'https://www.somedomain.com/receiving.php'; ?>
<form  method="post"  action="<?php echo $formAction; ?>" >
//$_POST will contain variables
0
olga