【问题标题】:Dynamic Dropdown List giving PHP error Undefined Variable动态下拉列表给出 PHP 错误未定义变量
【发布时间】:2019-08-24 07:52:19
【问题描述】:

我正在尝试为车辆品牌和车辆型号创建动态下拉列表。我希望用户能够在第一个下拉列表中选择车辆品牌,然后让第二个下拉列表填充所选车辆品牌的相关模型。我有一个包含所有车辆品牌和型号的 CSV - 文件中有 900 多个型号。我只使用 Javascript 就成功地完成了这项工作,但是有太多的车辆模型无法使用这种方式进行编码。

我尝试使用 PHP 读取 CSV 文件并构建一个数组,然后在 PHP foreach 循环中回显 Javascript 代码。如果我只在 PHP 中运行 foreach 循环,我可以成功地将这部分 Javascript 代码回显到 HTML 页面。但是,一旦我将 PHP 代码放在函数中并在页面中调用该函数,就会出现错误。我的故障排除使我相信我需要使用 Ajax 之类的东西,但我对 Ajax 不熟悉,并希望我接近原样的解决方案,只需要一些关于如何继续的见解。另外,我没有在这里编写 Javascript 代码,我是通过 Google 搜索找到的。虽然我确实了解基础知识,但我对 Javascript 不是很精通。任何帮助将不胜感激。谢谢。

Javascript:按原样工作,但我不想像这样输入 900 个项目:


    <script language="javascript" type="text/javascript">
    function dynamicdropdown(listindex)
    {
        switch (listindex)
        {
        case "Acura" :
            document.getElementById("status").options[0]=new Option("Select","");
            document.getElementById("status").options[1]=new Option("CL","CL");
            document.getElementById("status").options[2]=new Option("Integra","Integra");
            document.getElementById("status").options[3]=new Option("Legend","Legend");

            break;
        case "Audi" :
            document.getElementById("status").options[0]=new Option("Select","");
            document.getElementById("status").options[1]=new Option("80","80");
            document.getElementById("status").options[2]=new Option("90","90");
            document.getElementById("status").options[3]=new Option("100","100");
            break;
        }
        return true;
    }
    </script>

    <div class="category_div" id="category_div">Make:
        <select id="source" name="source" onchange="javascript:dynamicdropdown(this.options[this.selectedIndex].value);">
        <option value="">Select Make</option>
        <option value="Acura">Acura</option>
        </select>
    </div>
    <div class="sub_category_div" id="sub_category_div">Model:
        <script type="text/javascript" language="JavaScript">
        document.write('<select name="status" id="status"><option value="">Select status</option></select>')
        </script>

PHP:如果我删除该函数并在页面上回显结果,它会正确构建 Javascript:

<?php

$filename = 'list.csv';

// The nested array to hold all the arrays
$vehicle_array = []; 

// Open the file for reading
if (($h = fopen("{$filename}", "r")) !== FALSE){
  // Each line in the file is converted into an individual array called $data
  // The items of the array are comma separated
  while (($data = fgetcsv($h, 1000, ",")) !== FALSE){
    // Each individual array is being pushed into the nested array
    $vehicle_array[] = $data;       
  }
  // Close the file
  fclose($h);
}

// Display the code in a format I can read
foreach ($vehicle_array as $row) {
    if ($row[2] == -1) {
        unset($vehicle_array[$row[2]]);
        echo 'break;';
    } elseif ($row[2] == 0) {
        echo 'case "';
        echo $row[0];
        echo '"  :';
        echo 'document.getElementById("status").options[';
        echo $row[2];
        echo ']=new Option("';
        echo $row[1];
        echo '","';
        echo "";
        echo '");'; 
    } else {
        echo 'document.getElementById("status").options[';
        echo $row[2];
        echo ']=new Option("';
        echo $row[1];
        echo '","';
        echo $row[1];
        echo '");';
    }
}
?>

这是中断的地方:我将 foreach 循环放在一个函数中,稍后在页面上调用该函数以构建 Javascript 的那部分。

    <script language="javascript" type="text/javascript">
    function dynamicdropdown(listindex)
    {
        switch (listindex)
        {

        <?php buildForm(); ?>

        }
        return true;
    }
    </script>

我收到以下错误:

  1. 未定义变量:vehicle_array
  2. 为 foreach() 提供的参数无效

以下是直接来自 Google Chrome 的错误消息:

function dynamicdropdown(listindex){switch (listindex){
注意:未定义变量:C:\xampp\htdocs\test\drop.php中的vehicle_array在第 25

警告:为 C:\xampp\htdocs\test\drop.php 中的 foreach() 提供的参数无效 b> 25

请查看图片以获取完整的错误消息。同样,这里的任何帮助将不胜感激。再次感谢!

Error messages in Google Chrome

CSV file example

【问题讨论】:

  • 哪一行是断线?
  • buildForm() 函数在哪里?您不能从 javascript 或其他方式调用 php 函数。
  • @Nawed Khan - 谢谢你的信息。我确实试图在

标签: javascript php arrays foreach


【解决方案1】:

问题是您尝试在buildForm 中使用$vehicle_array 作为全局变量,但您没有使用global 关键字。有两种可能的解决方案:

智能解决方案

尽可能避免使用全局变量,因此,在我们的例子中,您需要更改两行:

  • 函数头:function buildForm($vehicle_array){
  • 函数的调用:buildForm($vehicle_array);

选择这个。请。

不是那么聪明的解决方案

在您在function 中使用$vehicle_array 之前,请确保将其用作global 变量与此行:

global $vehicle_array;

这可能看起来很奇怪,但这就是语法的工作方式。在这里阅读更多:https://phppot.com/php/variable-scope-in-php/

【讨论】:

  • 解决了这个问题。我感谢您的帮助。谢谢!
猜你喜欢
  • 2014-08-15
  • 2011-12-06
  • 2011-08-13
  • 1970-01-01
  • 2013-04-30
  • 2013-07-27
  • 2018-03-30
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多