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 放入单个二维数组中。假设 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

您的 Javascript 中有一个循环,而不是您的 PHP。所以 PHP 只会被执行一次。你需要重新考虑你的方法。在不知道脚本应该实际实现什么的情况下,很难提供工作代码,但您至少需要将循环放入 PHP 而不是 Javascript。

于 2013-05-03T04:08:52.387 回答
0

在我回答之前,您应该了解到底发生了什么:

PHP 在服务器上执行,然后将结果(HTML 和 Javascript)发送回客户端(浏览器)。

Javascript 正在客户端执行。所以这只有在 PHP 完全完成后才开始。因此,您不能混合使用 Javascript 和 PHP。

检查页面的来源,然后您将确切地看到服务器返回的内容(HTML/Javascript PHP 生成的内容),您将更好地了解发生了什么。

现在,如果你理解了这一点,你也许可以解决你自己的问题。我不完全知道你想做什么,但我可以建议你,如果你需要 Javascript 来检查数据库中的值,你应该使用 PHP 生成 Javascript,在 Javascript 中定义这些值,例如:

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

现在它们是在 Javascript 中定义的,您可以使用它们(并检查它们)。

当您有一个大型数据库时,这样做可能会变得低效,您可能想要研究一种称为 AJAX 的技术,它允许 Javascript 向服务器发出请求并从 PHP 脚本中取回数据。

如果涉及到您不想公开查看的数据,您也希望这样做(因为每个人都可以查看您页面的来源。

于 2013-05-03T05:05:49.493 回答