【问题标题】:Issue with PHP in setting values for a Select menu from an arrayPHP 在为数组中的选择菜单设置值时出现问题
【发布时间】:2013-07-18 13:39:50
【问题描述】:

更具体地说,我收到了:

*注意:第 38 行 C:\xampp\htdocs\Project1_Tables\index.php 中的数组到字符串转换 注意:第 39 行 C:\xampp\htdocs\Project1_Tables\index.php 中的数组到字符串转换*

这是代码

<?php

    //SETUP FOR CONNECTION
    $host = "localhost";
    $user = "root";
    $password = "password";
    $database = "test";

    $con = mysqli_connect($host, $user, $password, $database);

    $tableName = "funding";
    $sql = "";

    //QUERIES NEEDED TO GATHER DATA FOR DROP-DOWN MENU'S (Research Theme and Institution)
    $column = "research_theme";
    $query = sprintf("SELECT DISTINCT %s FROM ", $column);
    $sql = $query.$tableName;
    $ddThemeList = mysqli_query($con, $sql);

    $column = "institution";
    $query = sprintf("SELECT DISTINCT %s FROM ", $column);
    $sql = $query.$tableName;
    $ddInstitutionList = mysqli_query($con, $sql);

    $list1 = mysqli_fetch_array($ddThemeList, MYSQLI_NUM);
    $list2 = mysqli_fetch_array($ddInstitutionList, MYSQLI_NUM);
    require_once("support.php");

    $body="";

    $scriptName = $_SERVER["PHP_SELF"];
    $topPart =  <<<EOBODY
            <form action="$scriptName" method="post">
                <p>
                    Theme
                    <select name="theme">
                        <?php if(mysqli_num_rows($list1) != 0) { ?>
                            <?php while ($list1) { ?>
                                <option value="<?php echo $list1[0]; ?>">
                                    <?php echo $list1[0]; ?>
                                </option>
                            <?php } ?>
                        <?php } ?>
                    </select>
                </p>

            </form>
EOBODY;

    $body = $topPart.$body;

    $page = generatePage($body);
    echo $page;

?>

【问题讨论】:

  • 尝试转储 $list 我相信还有更多?比如 $list1[0]['name']
  • @JonathanRomer 我刚刚在 '

标签: php html


【解决方案1】:

如果我没记错的话,您的 php 指令不会在 heredoc 语句中评估,但您的变量会。因此,您的代码块只是尝试回显“$list1”,而不使用被视为字符串的 while 或 if 语句。

在忽略 php 语句的情况下,heredoc 只是试图回显“$list1”,这是一个数组而不是字符串。

【讨论】:

  • 我能够根据这个答案修复它。我最终只是创建了一个循环,然后将“”分配给一个变量,并将该变量放在 heredoc 语句中。非常感谢您的帮助。
【解决方案2】:

这条线不会做任何事情:

<?php while ($list1) { ?>

这样的东西可能更像你需要的东西,虽然我已经有一段时间没有使用 mysql 或 mysqli_ 函数了:

  <?php

      //SETUP FOR CONNECTION
      $host = "localhost";
      $user = "root";
      $password = "password";
      $database = "test";

      $con = mysqli_connect($host, $user, $password, $database);

      $tableName = "funding";
      $sql = "";

      //QUERIES NEEDED TO GATHER DATA FOR DROP-DOWN MENU'S (Research Theme and Institution)
      $column = "research_theme";
      $query = sprintf("SELECT DISTINCT %s FROM ", $column);
      $sql = $query.$tableName;
      $ddThemeList = mysqli_query($con, $sql);

      $column = "institution";
      $query = sprintf("SELECT DISTINCT %s FROM ", $column);
      $sql = $query.$tableName;
      $ddInstitutionList = mysqli_query($con, $sql);

      $list1 = mysqli_fetch_array($ddThemeList, MYSQLI_NUM);
      $list2 = mysqli_fetch_array($ddInstitutionList, MYSQLI_NUM);
      require_once("support.php");

      $body="";

      $scriptName = $_SERVER["PHP_SELF"];
      $topPart =  <<<EOBODY
              <form action="$scriptName" method="post">
                  <p>
                      Theme
                      <select name="theme">
  EOBODY;


            foreach ($list1 as $item) {
              $topPart .= "<option value='{$item}'>{$item}</option>";
            }

        TopPart .= <<<EOBODY
                      </select>
                  </p>

              </form>
  EOBODY;

      $body = $topPart.$body;

      $page = generatePage($body);
      echo $page;

【讨论】:

    【解决方案3】:

    您的问题来自 ,您在mysqli_num_rows 中使用array (list1) 而不是mysqli_result

    在第 39 行,您使用array 作为while 中的条件语句,而不是字符串/int/bool。

    <?php
    
    /*
    ** SOME CODE
    **
    */
    
    $list1 = mysqli_fetch_array($ddThemeList, MYSQLI_NUM);
    
    /*
    ** MORE CODE
    **
    */
    
                        <select name="theme">
                            <?php if(mysqli_num_rows($ddThemeList) != 0) { ?>
                                <?php for($i = 0;$list1[$i]; $i++) { ?>
                                    <option value="<?php echo $list1[$i]; ?>">
                                        <?php echo $list1[$i]; ?>
                                    </option>
                                <?php } ?>
                            <?php } ?>
                        </select>
    
    /*
    ** MORE CODE
    */
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2016-07-25
      • 2015-02-13
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 2016-04-13
      • 1970-01-01
      • 2019-11-05
      • 1970-01-01
      相关资源
      最近更新 更多