1

検索しても検索しても何も見つかりませんでしたが、それはおそらく、このバグの原因がわからないためであり、修正方法は言うまでもありません.

まず、私は新参者です。PHP の基本は知っていますが、知らないことがたくさんあります。答えが簡単な場合 (または、私のコードがごちゃごちゃしていて読めない場合) はご容赦ください。

最初のアプリケーションの 1 つとして、ユーザーが名前、件名、メッセージ、および電子メール アドレスを入力する単純な電子メール スクリプトを作成することを考えました。

これは、フォーム ページの関連部分です: http://pastebin.com/UhQukUuB (申し訳ありませんが、コードの埋め込み方法がよくわかりません...)。

<form action="send.php" method="post">
    Name: <input type="text" name="name" size="20" /><br />
    Subject: <input type="text" name="subject" size="20" /><br />
    Message:<br /><textarea name="message" rows="12" cols="55"></textarea><br />
    Your email address: <input type="text" name="emailAddress" size="20" /><br />
    <input type="submit" value="Send" />
</form>

これは send.php にあります: http://pastebin.com/nky0L1dT

<?php
    $name=$_POST['name'];
    $subject=$_POST['subject'];
    $message=$_POST['message'];
    $emailAddress=$_POST['emailAddress'];
    //It's receiving the variables correctly, I've checked by printing the variables.
    $errors=array(); //Creates empty array with 0 indexes. This will now be filled with error messages (if there are any errors).
    if($name=="" || $subject=="" || $message=="" || $emailAddress=""){
        if($name==""){
            $errors[0]="You did not supply a name.";
        }
        if($subject==""){
            $errors[count($errors)]="You did not supply a subject."; //I'm using count($errors) so it will create a new index at the end of the array, regardless of how many indexes it currently has (if that makes sense, it's hard to explain)
        }
        if($message==""){
            $errors[count($errors)]="You did not supply a message.";
        }
        if($emailAddress==""){
            $errors[count($errors)]="You did not supply an email address.";
        }
    }
    //Were there any errors?
    if(!count($errors)==0){
        print "The following errors were found:<br />";
        for($i=0; $i<count($errors); $i++){
            print $errors[$i]."<br />";
        }
        die ();
    }
    //Rest of email script, which I'll write when the stupid bug is fixed. :(
?>

名前、件名、またはメッセージを見逃した場合、エラー検出器は正常に機能し、「名前/件名/メッセージを提供しませんでした」と表示します。メールアドレスを忘れると何も起こりません。名前/件名/メッセージと電子メールアドレスの両方を見逃した場合、「名前/件名/メッセージを提供しませんでした。電子メールを提供しませんでした.住所"。なぜこれを行っているのかを突き止めようとして、30分間画面を見つめていましたか?

ありがとう。

4

3 に答える 3

1

2 つの問題があり、そのうちの 1 つはここで否定されます。

if(!count($errors)==0){

単項はではなく!に適用されます。代わりに使用してください:count($errors)count($errors)==0!=

if(count($errors) != 0) {

2 番目のエラーは、ここで=の比較 ( ) ではなく代入 ( )の使用です。==

if($name=="" || $subject=="" || $message=="" || $emailAddress=""){

$errors[count($errors)]補足として、配列の最後に項目を追加するために を使用する必要はありません。$errors[]しましょう。foreach反復のために、現在行っていることよりもループを使用する方がはるかに優れています。

于 2012-07-12T19:50:01.857 に答える
0

変化する

if($name=="" || $subject=="" || $message=="" || $emailAddress=""){

if($name=="" || $subject=="" || $message=="" || $emailAddress==""){

ステートメントで誤って に設定$emailAddressしています""if

... || $emailAddress=""){
于 2012-07-12T19:48:40.057 に答える
0

ifステートメントでは、比較ではなく代入を使用しています

if($name=="" || $subject=="" || $message=="" || $emailAddress=""){

それ以外の

if($name=="" || $subject=="" || $message=="" || $emailAddress==""){
于 2012-07-12T19:49:09.527 に答える