【问题标题】:How to select values where another value is an array?如何选择另一个值是数组的值?
【发布时间】:2015-06-30 23:16:14
【问题描述】:

我正在尝试选择另一个 POST 值是数组的值,我不知道我的查询出了什么问题给我这个错误。我想知道刚刚添加到表中的课程。我在表单中有五个输入。

Notice: Trying to get property of non-object in C:\Apache\htdocs\xxx\addcourse.php on line 262

这是我的代码

  <?php 
    if(isset($_POST['Submit'])) {

      $code= isset($_POST['code']) ? $_POST['code'] : '';
      $coursecode = isset($_POST['coursecode']) ? $_POST['coursecode'] : '';
      $both=$code[$x] .' '. $coursecode[$x];

      $sqlcourses = "SELECT * FROM courses where course_code='$both' ORDER BY course_id DESC LIMIT 5 ";
      $resultcourses = $mysqli->query($sqlcourses);


        if ($resultcourses->num_rows > 0) {


            while($row = $resultcourses->fetch_assoc()) {

                ?>
                </p>
                <p>&nbsp;</p>
                <p>&nbsp;  </p>
                <table width="415" border="0">
                <tr>
                <?php
                $courses=$row["course_code"];
                echo $courses;
                ?>
                    </div>
                </tr>
                  </table>
              <?php 
            }
        }
    }
?>

【问题讨论】:

  • 哪一行代码是262?
  • 我刚刚注意到我需要在查询中将 $both 编辑为 '$both'。不知道错误,但没有给我任何结果?
  • 您的查询失败。乍一看,$both 包含一个空格——$both=$code[$x] .' '. $coursecode[$x];,所以需要用引号括起来——...where course_code='$both'...
  • 你的 for 循环没有意义,$code 被评估在顶部,但在循环内定义
  • 您的循环会创建多个查询,最后一个会覆盖所有其他查询。

标签: php mysql


【解决方案1】:

首先,您构建一个要检索的课程代码数组;为简单起见,我将省略边界检查:

$codes = [];
foreach ($_POST['code'] as $k => $code) {
    $codes[] = $code . ' ' . $_POST['coursecode'][$k];
}

然后,您准备将要使用的语句:

$stmt = $mysqli->prepare("SELECT * 
  FROM courses 
  WHERE course_code = ?
  ORDER BY course_id DESC 
  LIMIT 5");

接着是主循环:

foreach ($codes as $code) {
    $stmt->bind_param('s', $code);
    assert($stmt->execute());

    $res = $stmt->get_result();
    while ($row = $res->fetch_assoc()) {
      // ...
    }
}

【讨论】:

    【解决方案2】:

    你可以用小的修改代码尝试这种方式

    首先您必须将字符串转换为数组以获取数组中的索引 (x)

    $code = explode(" ", $code);
    $course = explode(" ", $coursecode);
    foreach ($code as $cd => $x) {
        $both = $code[$x].' '.$coursecode[$x];
        $sqlcourses = "SELECT * FROM courses where course_code='$both' ORDER BY course_id DESC LIMIT 5 ";
        $resultcourses = $mysqli->query($sqlcourses);
    }
    

    其次,您可以根据自己的情况选择变量 $code 或 $course 作为循环长度

    foreach ($course as $crs => $x) {
        your condition...
    }
    

    【讨论】:

      猜你喜欢
      • 2020-02-13
      • 1970-01-01
      • 2020-10-10
      • 2017-11-13
      • 2018-09-19
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多