【问题标题】:PHP/MYSQL - Select option value not being sent?PHP/MYSQL - 选择未发送的选项值?
【发布时间】:2016-11-23 05:09:33
【问题描述】:

我有以下代码应该返回某个区域内的所有团队。我有一个足球队数据库,其中包含球队和国家的表格。 team 表有一个外键引用 states 表, states 表有一个区域属性(north, south, east, west)。

我的主页上有以下 html/php 代码:

<div>
  <form method="post" action="regions_filter.php">
    <fieldset>
        <legend>Filter Teams By Region</legend>
        <select name="Region">
            <?php 
            if(!($stmt = $mysqli->prepare("SELECT DISTINCT region FROM states"))){
                echo "Prepare failed: "  . $stmt->errno . " " . $stmt->error;
                }

            if(!$stmt->execute()){
                echo "Execute failed: "  . $mysqli->connect_errno . " " . $mysqli->connect_error;
            }
            if(!$stmt->bind_result($region)){
                echo "Bind failed: "  . $mysqli->connect_errno . " " . $mysqli->connect_error;
            }
            while($stmt->fetch()){
                echo '<option value=" ' . $region . ' "> ' . $region . '</option>\n';
            }
            $stmt->close();
            ?>
        </select>
        <input type="submit" value="Run Filter"/>
    </fieldset>
  </form>
</div>

下面是regions_filter.php文件代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<body>
<div>
<table>
    <tr>
        <td>Teams By Region</td>
    </tr>
    <tr>
        <td>School Name</td>
        <td>State Name</td>
        <td>State Capital</td>
        <td>State Population</td>
        <td>Region</td>
    </tr>
<?php
if(!($stmt = $mysqli->prepare("SELECT teams.school_name, states.name,       states.capital, states.population, states.region FROM teams
                            INNER JOIN states ON states.id = teams.state_id
                            WHERE states.region = ?"))){
echo "Prepare failed: "  . $stmt->errno . " " . $stmt->error;
}

if(!($stmt->bind_param("s",$_POST['Region']))){
echo "Bind failed: "  . $stmt->errno . " " . $stmt->error;
}

if(!$stmt->execute()){
echo "Execute failed: "  . $mysqli->connect_errno . " " . $mysqli- >connect_error;
}
if(!$stmt->bind_result($school, $state, $capital, $population, $region)){
echo "Bind failed: "  . $mysqli->connect_errno . " " . $mysqli- >connect_error;
}
while($stmt->fetch()){
 echo "<tr>\n<td>" . $school . "\n</td>\n<td>" . $state . "\n</td>\n<td>" .   $capital . "\n</td>\n</td>"
    . $population . "\n</td>\n<td>" . $region . "\n</td>\n</tr>";
}
$stmt->close();
?>
</table>
</div>

</body>
</html>

当我在我的主页上运行过滤器时,我被带到了 region_filter.php 页面,但没有任何结果。唯一显示的是regions_filter.php 页面顶部的预编码html 表。 我相信错误出现在下面的代码 sn-p 中。我尝试了选项值的不同变体,但似乎无法破解它:

while($stmt->fetch()){
                echo '<option value=" ' . $region . ' "> ' . $region . '</option>\n';
            } 

任何指向正确方向的指针将不胜感激。

【问题讨论】:

  • @RuchishParikh 嗯,这似乎没有解决它,我会继续玩它
  • 您是否正确填写了主页中的表单?我们可以看看它的样本吗?
  • 就是这样,检查我的答案,您在 中的区域名称中有多余的空格

标签: php html mysql


【解决方案1】:

填充区域时出错,选择区域名称前后有一个额外的空格。应该是这样的:

while($stmt->fetch()){
   echo '<option value="' . $region . '">' . $region . '</option>\n';
}

【讨论】:

  • 是的!太感谢了!我不知道空白会导致这个问题
  • 当您运行查询搜索 region = " South " 时,它不会匹配任何内容,因为 " South " != "South" 它们不是同一个字符串。
  • 谢谢,有道理,我很久没有使用php了,所以我今天学到了一些新东西
【解决方案2】:

我相信 where 语句中的 states.id 不是区域 id。如果您将 $region 作为参数从标签过滤到 select 语句 state.id = ? (state.id = $region) 它不会给出任何结果。因为您正在通过状态进行过滤。 注意:这只是我对上面代码的初步理解

我认为您对此没有任何错误...只是您可能过滤了错误的属性^_^

【讨论】:

  • 你说得对,我不小心复制了旧代码...我已经更新了正确的代码片段,我的选择语句在 WHERE states.region = 上搜索?
  • 解决问题了吗?如果没有...让我们再试一次^_^
  • 很遗憾没有,继续玩它
  • 试试这个 $mysqli->prepare("SELECT teams.school_name, states.name, states.capital, states.population, states.region FROM teams INNER JOIN states ON states.id = teams.state_id WHERE states.region = '?' ")
  • 因为 region 是 varchar 我假设 where 语句正在寻找一个字符串,你需要像这样放置 ' ' 来表示它是一个字符串。如果 ?是 $region 的绑定器,就像变量一样,它可能正在渲染 states.region =east 但如果 region 是 varchar 或 char 数据类型,则更正它必须渲染 states.region = 'east'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
相关资源
最近更新 更多