0

ここに私のコードがあります:

var co = 0;
var comp = '';
<?php $i = 0;?>
while (co < <?php echo $db->count_rows(); ?>)
{
    if ((parseInt(value) >= <?php echo $mfr[$i] ?>) && (parseInt(value) <= <?php echo $mto[$i] ?>))
    {
        comp = 'T';
        break;
    }
    co++;
    <?php $i++; ?>
}

私はまだこのphpとjavascriptの全体について学んでおり、この両方の言語に対する理解を深めるために、まだ取り組む必要のあることがたくさんあることを知っています. だからこそ、私はこれであなたの助けが本当に必要なのです

while イテレーションを機能させようとしているので、javascript の変数と、データベースから値を取得した php の変数を比較できます。ご覧のとおり、php 変数 ('$mfr' および '$mto') は配列です。今、私は両方のすべての要素を調べて、条件を満たしていれば、変数「comp」を更新し、反復中に全体を停止します

しかし問題は、'$i' 変数が反復処理を行わないことです。一度しか実行されないので、'$mfr' と '$mto' の値はどこにも行きません。javascript の値を php の '$mfr' および '$mto' の値と比較できるようにするには、どうすればこれを修正できますか?

あなたの助けは大歓迎です、ありがとう:)

編集

まあ、それは実際には jqgrid のカスタム検証の機能です。理論的にはphpがサーバー側でjavascriptがクライアント側の言語であることは知っていますが、実際にそうであるかはよくわかりません

私が実際にやろうとしているのは、ユーザーが値を入力して送信すると、システムは入力された値がデータベース内のテーブルの「fromid」列と「toid」列の値の間にあるかどうかをチェックすることです

ここに関数の完全なコードがあります

function checkid(value)
{
var co = 0;
var comp = '';
<?php $i = 0;?>
while (co < <?php echo $db->count_rows(); ?>)
{
    if ((parseInt(value) >= <?php echo $mfr[$i] ?>) && (parseInt(value) <= <?php echo $mto[$i] ?>))
    {
        comp = 'T';
        break;
    }
    co++;
    <?php echo $i++; ?>
}

if (comp != 'T')
{
    return [true, "", ""];
}
else
{
    return [false, "Value entered is already between a range. Please try again!", ""];
}
}

これが「$mfr」および「$mto」変数を取得する方法です

<?php
$db=new database($dbtype, $dbhost, $database, $dbuser, $dbpassword, $port, $dsn);
$db->query("select fromid, toid from CORE_ID");
$i = 0;
while($row = $db->get_row())
{
$mfr[$i] = $row[fromid];
$mto[$i] = $row[toid];
$i++;
}
?>

これを行うためのより良い方法がある場合は、教えてください

4

3 に答える 3

3

通常、PHP はサーバー側のロジック用であり、JS はクライアント側のロジック用です。JS から値を送信して PHP で処理する場合は、おそらくAJAXのようなものを使用する必要があります。これは、jQuery がjQuery.ajax()で非常に簡単にします。

処理するクライアントの値を取得するのは難しい部分です。それができれば、完全な PHP でコード ロジックを書き直すことは難しくありません。

編集:変数のがどこから来るのか誤解している場合は、そう言ってください!

編集 2: サーバー側のデータと比較してクライアント入力が必要なようです。JS は、特に送信されない限り、PHP 変数にアクセスできません。同様に、JS 値をサーバーに送信して PHP で検証することもできます。

あなたの場合、JSON を使用して JS に検証日を送信できます。日付が多すぎないと仮定すると、値をサーバーに送信して応答を待つよりもおそらく高速になります。

別の投稿で JSON を使用する良い例を見つけました。次のような配列を送信できます。

<?php
     $xdata = array(
          'foo'    => 'bar',
          'baz' => array('green','blue')
     );
?>
<script type="text/javascript">
    var xdata = <?php echo json_encode($xdata); ?>;

    alert(xdata['foo']);
    alert(xdata['baz'][0]);

    // Dot notation can be used if key/name is simple:
    alert(xdata.foo);
    alert(xdata.baz[0]);
</script>

コードでは、$mfr と $mto を 1 つの 2D 配列に入れることができます。xdata に $mfr と $mto が含まれていると仮定すると、新しい JS は次のようになります。

function checkid(value) {
  var co = 0, comp = '', i = 0, nrows = xdata.mfr.length; 
  while (co < nrows) {
    if ((parseInt(value) >= xdata.mfr[i]) && (parseInt(value) <= xdata.mto[i])) {
      comp = 'T';
      break;
    }
    co++;
    i++;
  }

  if (comp != 'T') {
    return [true, "", ""];
  } else {
    return [false, "Value entered is already between a range. Please try again!", ""];
  }
}
于 2013-05-03T04:13:30.807 に答える
0

PHP ではなく、Javascript にループがあります。したがって、PHP は 1 回だけ実行されます。アプローチを再考する必要があります。スクリプトが実際に何を達成するのかを知らなければ、動作するコードを提供することは困難ですが、少なくとも Javascript ではなく PHP にループを配置する必要があります。

于 2013-05-03T04:08:52.387 に答える
0

私が答える前に、何が起こっているのかを正確に理解する必要があります:

PHP はサーバー上で実行され、結果 (HTML および Javascript) をクライアント (ブラウザー) に送り返します。

Javascript はクライアント側で実行されています。したがって、これは PHP が完全に完了した後にのみ開始されます。このため、Javascript と PHP を混在させることはできません。

ページのソースを確認すると、サーバーが返すもの (HTML/Javascript PHP が生成するもの) が正確にわかり、何が起こっているのかをよりよく理解できます。

さて、これを理解すれば、あなた自身の問題を解決できるかもしれません。あなたが何をしたいのか正確にはわかりませんが、データベースから値をチェックするために Javascript が必要な場合は、Javascript でこれらの値を定義する PHP を使用して Javascript を生成する必要があることをアドバイスできます。たとえば、次のようにします。

var my_js_var = <?=$my_php_var?>
var another_var = <?=$another_one?>

現在、それらは Javascript で定義されており、それらを使用 (およびチェック) できます。

大規模なデータベースがある場合、このように行うと非効率になる可能性があるため、AJAX と呼ばれるテクノロジを検討することをお勧めします。これにより、Javascript がサーバーに要求を実行し、PHP スクリプトからデータを取得できるようになります。

一般に公開したくないデータが含まれている場合にも、これを行う必要があります (誰もがページのソースを調べることができるため)。

于 2013-05-03T05:05:49.493 に答える