2016-12-17 12 views
0

以下のコードをご覧ください。他のPHP Webページが呼び出されたWebページにコントロールを返すにはどうすればいいですか

index.phpのコントロールを終了フォームタグの後の実行可能ステートメントに戻すと、processData.phpの末尾に表示されるコードではなく、index.phpページのクエリ結果が表示されます。

私はこのフォーラムをGoogleで検索しましたが、解決策は見当たりませんでしたか? Fortran、Visual Basicに精通している人は、呼び出しルーチンに戻るために使用できるreturnステートメントに感謝します。 returnと似た声明が、PHPの呼び出し側Webページにコントロールを渡すことはありますか?

index.phpのためのコード:processData.phpため

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Sales Report Summary</title> 
</head> 
<body> 
<h1>Online Sales Report Demo 
<br> 
<br> 
<form method="post" action="processData.php"> 
Enter Your Full Name:<input type="text" name= "author_name" /> 
<br> 
Enter Your eMail Address:<input type="text" name= "author_email" /> 
<br> 
<input type="submit" value="Submit"> 
</form> 
**//Question - How to return the control to a statement after </form> tag to print values instead of processData.php** 
</body> 
</html> 

コード:

<?php 
// define variables and set to empty values 
$author = $email = ""; 

function test_input($data) { 
$data = trim($data); 
$data = stripslashes($data); 
$data = htmlspecialchars($data); 
return $data; 
} 

//Next extract the data for further processing 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 

$author = test_input($_POST['author_name']); 
$email = test_input($_POST['author_email']); 

//Next echo the Values Stored 
echo "<br>"; 


echo "<br>Your Name:".$author; 

echo "<br>Your Email Address:".$email; 

} 
?> 

<?php 
$dbhost = 'localhost'; 
$dbuser = 'root'; 
$dbpass = ''; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass); 
if(! $conn) 
{ 
    die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db('mydatabase'); 


$sql = "SELECT Sales_Author, Sales_Date, Sales_Channel, Sales_Title, Sales_Unit, Sales_Royalty, Sales_Currency  
FROM Sales_tbl 
WHERE Sales_Email= '" . $email . "' ORDER BY Sales_Date ASC"; 

$result = mysql_query($sql, $conn); 

if(!$result) 
{ 
die('Could not fetch: ' . mysql_error()); 
} 


?> 
<table border="2" style="background-color: #84ed86; color: #761a9b; margin: 0 auto;"> 
<thead> <tr> <th>Date</th><th>Channel</th><th>Title</th><th>Units</th><th>Royalty</th><th>Currency</th></tr></thead><tbody> 

<?php 


while($row = mysql_fetch_assoc($result)){ 

echo "<tr> 
    <td>{$row['Sales_Date']}</td> 
    <td>{$row['Sales_Channel']}</td> 
    <td>{$row['Sales_Title']}</td> 
    <td>{$row['Sales_Unit']}</td> 
    <td>{$row['Sales_Royalty']}</td> 
    <td>{$row['Sales_Currency']}</td> 
    </tr>\n"; } 
    ?> 

    </tbody></table> 
    <?php 
    mysql_close($conn); 
    echo "Fetched data successfully\n"; 
    ?> 
    </body> 
    </html> 
+1

"コントロールを返す"ことはできません。 "index.php"にリダイレクトするだけで、index.phpで使用できるパラメータを追加することができます。 – Jeff

+0

もちろん、あるスクリプトを別のスクリプトに 'include 'することもできます。 – Jeff

+0

ありがとうございますJeff.あなたが提案したように、別の振る舞いをするために、index.phpにリダイレクトバックとパラメータインクルードの例/コード/リファレンスを教えてください。 – av104

答えて

0

私はliteralyあなたの質問を取る場合、これは1つの可能性である:processData.php

はあなたが欲しい、これまでそのリンクを置きますそれは:

<a href="index.php?state=fromProcess">back to index.php</a> 

、あなたはindex.phpの中でそのパラメータに反応することができます。

.... 
<input type="submit" value="Submit"> 
</form> 
//Question - How to return the control to a statement after </form> tag to print values instead of processData.php** 

<?php 
    if(isset($_GET['state'])) { 
     switch($_GET['state']) { 
      case "fromProcess": 
       echo "I come from process!"; 
       // do whatever you want to do 
       break; 
      default: 
       echo "ERROR: undefined state submitted"; 
     } 
    } 
?> 
</body> 
</html> 

header("location: index.php?state=fromProcess"); 
// NOTE: This has to be before ANY output, and no output after that will be seen. 

しかしを経由してリンクをクリックせずにリダイレクトする可能性ももちろんあります、私が感じています実際には、processDataから生成されたデータをindex.htmlに表示したいと考えています。

次に、あなたは、少なくとも2つの可能性だ:

index.phpprocessData.phpを含めると同じ

<?php 
if(isset($_POST['author_name'])) { 
     include('processData.php'); 
     // process the data and make output 
} 
?> 

でラップが他の方法でラウンド可能である(しかし、それはあなたがやりたいことのためにちょっとトリッキーだが)。

あなたが覚えておかなければならない一般的なことの1つ:
phpスクリプトは、基本的にすべて自分で実行します。 実行が終了するとメモリが不足しているので、別のスクリプトの関数を呼び出すことはできません(自動ロードはしませんが、望むものではありません)。

関連する問題