私はこの特定のコードで奇妙な結果を得ています。長いコードなので、私は自分の短所を説明しましょう。基本的に穴の事は次のように動作します。関数から呼び出されたときのステートメントを含む動作が異なりますか?
私のスクリプトの冒頭では、私は私のクラスfg_membersite
といくつかの定数を呼び出す:その後
require_once("registration/include/membersite_config.php");
コードはすぐに何かを間違って検出した場合、私は、いくつかのPOST変数を確認します関数the_error()
(同じスクリプトにあります)を呼び出します。エラーがなければ、関数への呼び出しはなく、実行は終了します。
チェックの例:
$fgmembersite->DBLogin();
mysql_query("INSERT INTO " . table_links . " (id, usr_code, visits, url, datetime, type, description, secu_type, password, phone, address, email, photo, id_number) VALUES (NULL, '".$_SESSION['user_code']."', '0', '".$fgmembersite->SanitizeForSQL($_POST['j_title'])."', NOW(), '0', '".$fgmembersite->SanitizeForSQL($_POST['j_desc'])."', '".$secutype."', '".$mod_pass."', '".$phone_check."', '".$address_check."', '".$email_check."', '".$photo_check."', '".$id_check."');");
echo '<!DOCTYPE html>
<html lang="en">
<head>';
include("parts/head.php");
echo '</head>
<body>
<div id="footerfix">';
include("parts/header.php");
echo '<div class="container">
<center><br><br><br><img src="css/img/ok.png"/></center>
<div class="hero-unit">
<center>
<h2>Your track URL <a href="'. siteurl . '/' . $_POST['j_title'].'">'.siteurl . '/' . $_POST['j_title'].'</a> have been created.</h2>';
if ($secutype==0){echo '<p>This url is public. Click <a href="profile.php">here</a> to return to your dashboard.</p>';}
if ($secutype==1){echo '<p>This is a password protected url. Click <a href="profile.php">here</a> to return to your dashboard.</p>';}
if ($secutype==2){echo '<p style="font-size:16px">The visitors of this URL will need an special QR code. We offer you two options:</p>
<p>1. Download the <a href="http://chart.googleapis.com/chart?chs=70x70&cht=qr&chf=bg,s,FFFFFF00&chl='.$mod_pass.'">QR code image</a> and add it to your personal design <br>2. Or Download a ready to print business card model</p><br><p>Click <a href="profile.php">here</a> to return to your dashboard.</p>';}
echo '</center>
</div>
</div>';
include("parts/footer.php");
echo '
</div>
</body>
</html>';
}
がでください:私は、データベースに保存し、結果メッセージを印刷するとき、POSTおよびSQLの一連の後
$result=mysql_query("SELECT id FROM ".table_links." WHERE url = '".$fgmembersite->SanitizeForSQL($_POST['j_title'])."';");
if (mysql_num_rows($result)>0) {
the_error('The url '. siteurl .'/'. $_POST['j_title'].' is currently in use, please use another one.');
}
は、最終的な部分がありますチェックhead.php
とheader.php
のようなインクルードされたすべてのファイルを含める前にfg_membersite
がロードされている必要があることを考慮してください。今までのコードは正常に動作しますが、関数the_error
が呼び出された場合は、head.php
とheader.php
がロードされたクラスを見つけられないというエラーが表示されます。これはthe_error
です:
function the_error($error) {
echo '<!DOCTYPE html>
<html lang="en">
<head>';
include("parts/head.php");
echo '</head>
<body>
<div id="footerfix">';
include("parts/header.php");
echo '<div class="container"><center><br><br><br><img src="css/img/notok.png"/></center><div class="hero-unit"><center><h2>Error</h2>';
echo '<p>'.$error.'</p>';
echo '</center></div></div>';
include("parts/footer.php");
echo '</div></body></html>';
exit;
}
あなたが見ることができるように、the_error()
は、私は結果を印刷するために使用し、ほぼ同じコードです。だから、私が関数の外でそれらを呼び出すと、インクルードがうまくいくのはなぜですか?関数の外でPHPスクリプトにインクルードを使用すると、外部ファイルから元のスクリプト(必要なもの)にコードがコピーされ、関数内でインクルードを使用すると、まずリモートスクリプトが実行され、次に結果を追加します(これは、クラスがインクルードを使用するスクリプトにロードされるため機能しません)。
私が正しいとコードフローを知っているなら、この問題を解決するにはどうすればよいですか?
FWIWでは、HTMLとPHPを分けてください。 –