2011-07-20 14 views
1

私はここでいくつかのPHP(超初心者)を練習しようとしているので、短い話を 私はフォームの要素を1ページに入れ、それをプロセスphpに渡しました。 Imは、これまでに覚えていたアイブを見ようとしています。私は何のエラーもありません、なぜそれdoesntの仕事を理解していない。PHPレッスン/練習。

<?php 

$yourname = htmlspecialchars($_POST['name']); 
$compname = htmlspecialchars($_POST['compName']); 

$response = array("please enter correct information","hmm" . "$yourname"); 

function nametest() { 
if (!isset($yourname)){ 
    $yourname = $response[0];} 
    else { 
    $yourname = $response[1];; 
    } 
} 
?> 


<?php nametest(); ?> 

これは、名前が設定されていない場合、変数を応答内の値と同じにすることです。

+1

あなたはこれを読んでください:http://php.net/manual/en/language.variables.scope.php –

答えて

0

機能は、印刷される値を返す必要

function nametest() { 
    if (!isset($yourname)){ 
     $yourname = $response[0]; 
    } else { 
     $yourname = $response[1]; 
    } 
    return $yourname; 
} 
print nametest(); 

を試してみてください。私はあなたに2つがあることに気付いた;あなたはこれらがPOSTに設定されているかどうかを確認するため、それらを後で確認する必要があることはできません

$yourname = htmlspecialchars($_POST['name']); 
$compname = htmlspecialchars($_POST['compName']); 

UPDATE:あなたが最初の2行で$yourname$compnameを割り当てているのでライン5

+0

そしてはい、以下の答えは正しいです.. $ responseはnametest()によって知られていません、あなたnametest($ response)で渡すか、グローバルとして宣言する必要があります。 –

0

に背後にあります:

$yourname = isset($_POST['name']) ? htmlspecialchars($_POST['name']) : "oops, no value"; 
$compname = isset($_POST['compName']) ? htmlspecialchars($_POST['compName']) : "oops, no value"; 

NULLまたは空であっても常に設定されます。したがって、後でisset()への呼び出しは常にtrueになります。 彼らはempty()機能を持つ空の場合は代わりに、あなたがチェックすることがあります。

UPDATEは必要ありませんコメントで修正に応じました。 isset()が動作するはずです。

// Check with empty() 
// but still won't work properly. keep reading below... 
function nametest() { 
if (!empty($yourname)){ 
    $yourname = $response[0];} 
    else { 
    $yourname = $response[1];; 
    } 
} 

ただし、可変範囲の別の問題があります。

// $yourname is passed as a function argument. 
function nametest($yourname, $response) { 
    if (!empty($yourname)){ 
     $yourname = $response[0];} 
    else { 
     $yourname = $response[1];; 
    } 
} 

が行き方今すぐあなたの関数が$yournameを割り当てますが、それは任意の値を返すか、または印刷されません...:あなたがそれらをパラメータとして渡すか、globalキーワードを使用するかしない限り、変数は、関数内で使用できません。 。 return文を追加し、あなたは結果をエコーすることができます

function nametest($yourname, $response) { 
    if (!empty($yourname)){ 
     $yourname = $response[0];} 
    else { 
     $yourname = $response[1];; 
    } 

    // Add a return statement 
    return $yourname; 
} 

// Now call the function, echo'ing its return value 
echo nametest($yourname, $response); 
+1

[PHP.net docs 'isset()'は 'NULL'をチェックする必要があります。](http://us3.php.net/manual/en/function.isset.php) – cspray

+0

最後の行でパラメータを失った。 – zerkms

+0

私は、前のページのフォームから渡されるデータと同じになるように$ yournameを設定しましたが、それは空であるかどうかを確認していたものです。 $ _GETメソッドと同じに設定されている$ yournameについて、あなたが言っていることを理解していますが、$ _GET自体をチェックする必要がありますか?それが設定されている場合は、その値を別のものに設定しますか? – somdow

0

変数のスコープはここに最大の過ちで、あなたの関数は、あなたがそれ以外で作成した変数を「見る」ことができない、次の操作を行います。

<?php 
    . 
    . 
    . 
function nametest($yourname, $response) { // This creates two new variables that 
              // are visible only by this function 
    if (!isset($yourname)){ 
     $yourname = $response[0]; 
    } else { 
     $yourname = $response[1]; // Get rid of the extra semicolon 
    } 

    return $yourname; // This $yourname is only visible by this function so you 
          // need to send it's value back to the calling code 
} 
?> 


<?php nametest($yourname, $response); ?> // This sends the values of the 
              // variables that you created at the 
              // top of this script 
+0

こんにちは、ありがとう。どのバージョンのコードでも同じ結果が得られます。 $ response = array( "正しい情報を入力してください。"、 "。$ yourname); この行では、どのコードブロックを試しても、フォームの送信ボタンを押したときに、名前フィールドに何も入力せずにこのコードを入力すると、応答[0]正しい情報 "しかし、私は、代わりに私は"歓迎 "を取得しないでください。 私はページをリロードして "somdow"という名前を入力すると "welcome somdow"を得ます is not that wrong?もう一度試してみても同じ結果が得られます。 – somdow

+0

!isset($ yourname)を$ yourname == ''に変更しようとすると、変数が渡されているときにnullに設定されている可能性が高くなります。空でも($ yourname) –