1

在这里难倒编程新手。

几个月前我开始学习 PHP(用一点 HTML)。

一直在尝试创建一个从 Mysql 填充的下拉选择表单。正如您将在下面的代码中看到的那样,我想我已经做到了(如果您注意到代码中的任何“错误”,请告诉我)。

我的问题是显示/回显选定的选项/值。无论我从下拉列表中选择并提交什么,都只会显示第一项(在本例中:阿拉巴马州——stateid 为 1)。

我尝试了各种我在网上看到的东西,但似乎没有任何效果。

有很多调用 javascript 的建议,但就像我说的,我对编程完全陌生,所以 - 一次只使用一种语言。在跳到其他语言之前,我想很好地掌握 php。

当然这可以用 php 解决,对吗?

顺便说一句,最终目标是创建多个(大约 3 或 4 个)渐进式下拉表单(州、县、市)。所以,如果你愿意放纵我,我也想学习如何将选定的值(例如状态)传递给下一个查询/下拉列表。

我现在可以接受一堆带有提交按钮的下拉菜单。我最终会学习javascript。

但是试图弄清楚如何显示选定的状态让我发疯了。

非常感谢您的帮助/信息。

“状态”表

CREATE TABLE States (
stateid int NOT NULL AUTO_INCREMENT PRIMARY KEY,
state_name varchar(25) NOT NULL
)
ENGINE=INNODB,
DEFAULT CHARACTER SET utf8;

从 DATABSE 填充的选择/选项——“pick_state.php”:

$con = mysql_connect("localhost", "testx", "testx") or die('Could not connect to server');
mysql_select_db("US", $con) or die('Could not connect to database');

$stateid = $_GET['stateid'];
$state_name = $GET['state_name'];

$query = "SELECT stateid,state_name FROM States";

$result = mysql_query($query) or die(mysql_error());


$row = mysql_fetch_array($result, MYSQL_ASSOC) or die(mysql_error());


$stateid = $row['stateid'];
$state_name = $row['state_name'];

echo "Chosen state is: $state_name"; 

处理文件——“show_state.php”:

<?php

$con = mysql_connect("localhost", "test", "test") or die('Could not connect to server');
mysql_select_db("US", $con) or die('Could not connect to database');

echo "<form action=\"show_state.php\" method=\"get\">\n";

echo "<select name=\"state_name\">\n";

$query="SELECT stateid,state_name FROM States";

// ALSO : $query = "SELECT * FROM States "; --Does not work either//

$result=mysql_query($query);

      while($row=mysql_fetch_array($result,MYSQL_ASSOC))

      {
          $stateid = $row['stateid'];
          $state_name= $row['state_name'];
          echo "<option value=\"$stateid\">$state_name</option>";
      }

      echo "</select>\n";
      echo "<input name=\"submit\" type=\"submit\" id=\"stateid\" value=\"submit\" />\n";
      echo "</form> \n";

 ?>

无论我选择并提交什么,以下页面始终只显示桌子上的第一项:阿拉巴马州

页面显示:“选择的州是:阿拉巴马州”

URL 当我选择并提交阿肯色州时:

/show_state.php?state_name=4&submit=submit

这是否意味着它正在检索正确的、选择/提交的 stateid(在这种情况下:4 --Arkansas' 声明)但只是不“呼应”州名?

在 show_state.php 上尝试了以下操作

$query = "SELECT stateid,state_name FROM States WHERE state_name = $state_name";

页面显示:空白

$query = "SELECT stateid,state_name FROM States WHERE stateid= $stateid";

页面显示:“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的 '' 附近使用”

if(isset($makeid))

页面显示:"Query was empty"

if(isset ($_GET['makeid']))

页面显示:"Your Car is a "

4

2 回答 2

0

这行代码将始终打印数据库返回的第一个状态:

$state_name = $row['state_name'];

您需要像这样更改您的查询:

$query = "SELECT stateid,state_name FROM States where stateid=$state_name";

这为您显示了一个空白页,因为您已经写了这个:

$state_name = $GET['state_name'];

$_GET不是$GET。所以将此行更改为:

$state_name = $_GET['state_name'];

现在它应该运行良好:)

笔记:

  1. 始终使用mysqli_real_escape_string清理用户输入
  2. 不要使用php 文档中建议的 * mysql *family 函数。
于 2012-10-04T19:59:48.590 回答
0

$_GET['state_name']将不起作用,因为您没有该名称的表单字段。采用:

if (isset($_GET['stateid'])) {
  query = "SELECT state_name FROM States WHERE stateid= " . sprintf("%d", $_GET['stateid']);
  $result=mysql_query($query) or die "Query error:".mysql_error();
  if (mysql_num_rows($result)) {
    $row=mysql_fetch_array($result,MYSQL_ASSOC);
    $state_name = $row['state_name'];
} else {
  $state_name = 'unselected';
}

要使选定状态默认显示在菜单中,请更改:

echo "<option value=\"$stateid\">$state_name</option>";

到:

echo "<option value=\"$stateid\" . ($stateid == $_GET['stateid']) ? "SELECTED" : "") . ">$state_name</option>";
于 2012-10-04T20:04:55.950 回答