2017-06-16 10 views
0

私は別のページにデータを送信するフォームを持っています。ディレクトリにデータが存在するかどうかを確認してから、リダイレクトしたい場合はエラーを表示します。
PHPフォームアクションが送信される前にデータが存在するかどうかをチェック

<form class="form-inline" method="POST" action="<?php checkMyFile(); ?>"> 
    <select class="form-control" style="width:auto;" name="mydata"> 
     <option value="id1">1</option> 
     <option value="id2">2</option> 
    </select> 
    <button type="submit" class="btn btn-primary">Submit</button> 
</form> 

と私は上記のHTMLフォームの上部に次のPHPの関数があります。

<?php 
funtion checkFile(){ 

    if(!isset($_POST['mydata']) or !file_exists('../data/'.basename($_POST['mydata']).'.txt')){ 
     echo $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later</div>'; 

    } else { 

     return "my/destination/page.php" 
    } 

} 

?> 

をが、現在それはエラーなしで白ページを示しています。 なぜ機能していないのですか?解決策は何ですか?

+0

Errrr、それはそのようには機能しません。 'action'からPHP関数を実行することはできません。あなたは、スクリプトファイル(xxx.php)を実行する必要があり、新たにインスタンス化された 'xxx.php'スクリプトによって、あなたはPHPコードは関数を呼び出します – RiggsFolly

+0

@RiggsFollyしてください可能性が設定されている場合、テストされるポストされたデータにパラメータを渡しますこれに対する答えを示唆していますか?あなたの説明と一緒に。おかげで – passion

答えて

0

この試してみてください。この部分について

$url = sprintf(
    "%s://%s%s", 
    isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off' ? 'https' : 'http', 
    $_SERVER['SERVER_NAME'], 
    $_SERVER['REQUEST_URI'] 
); 

header('Location: '.$url.'/my/destination/page.php'); 

:へ

return "my/destination/page.php" 

header('Location: my/destination/page.php'); 

または

変更を

action="<?php checkMyFile(); ?>" 

あなたのコードが

例に配置されたPHPファイルに変更を:

action="checker.php" 

checker.php内部は次のとおりです。

if(!isset($_POST['mydata']) or !file_exists('../data/'.basename($_POST['mydata']).'.txt')){ 
     echo $result='<div class="alert alert-danger">Sorry there was an error sending your message. Please try again later</div>'; 

    } else { 

    header('Location: my/destination/page.php'); 
    } 
+0

まあはい、それは本当に主な問題は、今ではありません、それはまだ – RiggsFolly

+0

動作していないんカバーしていない、と私は完全に白ページを取得... – passion

+0

は@RiggsFolly右ああ、私はアクションに関する彼のコードの一部を逃しました。 – hungrykoala

2

[OK]を、これとさせて頂きますコードはすべてxxx.phpと呼ばれるファイルにあります。

まず、アクションで実行できるのは、フォーム入力を送信するスクリプトをブラウザに伝えることです。そのスクリプト内で特定の関数を指定することはできません。

<?php 
// while testing, always make sure error reporting is on 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

$errormsg = ''; 

// corrected spelling error of funtion 
function checkFile(){ 

    if(!isset($_POST['mydata']) or !file_exists('../data/'.basename($_POST['mydata']).'.txt')){ 
     return '<div class="alert alert-danger"> 
         Sorry there was an error sending your message. Please try again later 
        </div>'; 

    } else { 

     header("Location: my/destination/page.php"); 
     // exit a you are now sending a new page and this one is irrelevant 
     exit; 
    } 

} 

// was the form submitted, or is this just the page being initially loaded 
// NOTE: I gave the submit button a `name` attribute of `submit` 
if (isset($_POST['submit'])) { 
    $errormsg = checkFile(); 
}  
?> 
<-- Usual doctype/html/head/body tags ommitted for brevity --> 

<?php 
    // output the error message somewhere sensible on your page 
    // which may not actually be here 
    if ($errormsg != '') { 
     echo $errormsg; 
    } 
?> 
<form class="form-inline" method="POST" action="xxx.php" enctype="multipart/form-data"> 
    <select class="form-control" style="width:auto;" name="mydata"> 
     <option value="id1">1</option> 
     <option value="id2">2</option> 
    </select> 
    <button name="submit" type="submit" class="btn btn-primary">Submit</button> 
</form> 
+0

それは動作していません。データが存在していても、私はエラーメッセージ – passion

+0

を取得しますが、 '../データ/ 2ドットの必要性についてもよろしいです「' – RiggsFolly

+0

は 'この作品かもしれません!file_exists(」データ/「ベース名($ _ POST [」 mydata ']) ' – RiggsFolly

関連する問題