0

この設定で Smarty を使用しています。

$smarty = new Smarty;
$smarty -> caching =3600;
$smarty -> compile_check =true;
$smarty -> compile_dir = 'theme/compile/';
$smarty -> config_dir = 'theme/libs/';
$smarty -> cache_dir = 'theme/cache/';
$smarty -> plugins_dir = 'theme/libs/plugins/';
$smarty->left_delimiter = '{';
$smarty->right_delimiter = '}';
$smarty -> clear_compiled_tpl();

この関数で簡単な訪問者カウンターをプログラムしたい:

function counter() {
    $ip = $_SERVER['REMOTE_ADDR'];
    $now = time();
    $y1 = jgmdate("Y ", $now);
    $y1 = (int) $y1;
    $m1 = jgmdate("m", $now);
    $m1 = (int) $m1;
    $d1 = jgmdate("d", $now);
    $d1 = (int) $d1;

    $result3 = mysql_query("SELECT `times`,`id` FROM `stat_ip` where `IP`='$ip' AND   `year`='$y1' AND `month`='$m1' AND `day`='$d1' ;");
    unset($n3);
    $n3 = (int) mysql_num_rows($result3);
    echo $n3;
    if ($n3 == 0) {
        mysql_query("INSERT INTO `stat_ip` (`id` ,`IP` ,`year` ,`month` ,`day`) VALUES (NULL , '$ip', '$y1', '$m1', '$d1') ;");
    } else if ($n3 == 1) {
        $row3 = mysql_fetch_array($result3);
        $s = (int) $row3['times'] + 1;
        mysql_query("UPDATE `stat_ip` SET `times` = '$s' WHERE `id` = '".$row3['id']."' ;");

    } else {
        echo("error");
    }
}

すべて問題ありませんが、私のクエリはこの行で複数回実行されます(おそらくすべてのクエリ):

mysql_query("UPDATE `stat_ip` SET `times` = '$s' WHERE `id` = '".$row3['id']."' ;") ;

smarty は私の問題と関係があると思います!

このコードを書くとき:

$q=$smarty -> fetch('index.tpl');

ただし、コードを次のように変更すると、クエリは1回実行されます。

$q=$smarty -> fetch('index.tpl');
echo $q;

また

$smarty -> display('index.tpl');

私のクエリは複数回実行されます!:(

詳細については:

http://www.smarty.net/forums/viewtopic.php?p=81161

4

4 に答える 4

2

よくある間違いは、HTML 出力に空の img-tag または script-tag を含めることです。これにより、ブラウザーは現在のページを再要求します。

于 2012-07-17T08:23:08.653 に答える
1

私の問題は解決しました:

Javaスクリプトコードに次の行があるスライドショーを使用していました:

jquery.nivo.slider.js で src="#" を src="" に変更しました

そして、今は問題なく動作しますが、ブラウザがおかしい理由は本当にわかりません!!!

ありがとうございました

于 2012-07-17T12:44:55.143 に答える
1

Smarty は単なるテンプレート エンジンであり、データベースに問題を引き起こすことはありません。あなたの問題は、テンプレート エンジン以外のどこかにある可能性があります。

于 2014-07-17T03:19:26.147 に答える
1

なぜ $smarty->clear_compiled_tpl(); を呼び出しているのですか? コンパイルされたすべてのテンプレートを削除し、ページが呼び出されるたびに再コンパイルを引き起こします。この行を削除します。

関数カウンターをどこでどのように呼び出しましたか?

于 2012-07-16T18:30:34.343 に答える