从Mysql填充下拉选择表单显示选择

时间:2012-10-04 19:42:14

标签: php mysql

在这里难以编程的新手。

几个月前我开始学习Php(带一点HTML)。

尝试创建一个从Mysql填充的下拉选择表单。正如您将从下面的代码中看到的那样,我认为我已经实现了这一点(如果您发现代码中有任何“错误”,请告诉我。)

我的问题是显示/回显所选的选项/值。无论我从下拉列表中选择和提交什么,只显示第一个项目(在这种情况下:Alabama - 使用stateid 1)。

我尝试过各种我在网上看过的东西,但似乎没什么用。

有很多建议可以调用javascript,但就像我说的那样,我对编程很新,所以 - 一次只能使用一种语言。在跳转到其他语言之前,我想先掌握好php。

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

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

我现在可以通过提交按钮获得一系列下拉菜单。我最终会学习javascript。

但试图弄清楚如何展示选定的国家让我疯狂。

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

“STATES”表

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

从DATABSE播放的SELECT / OPTION - “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当我选择并提交ARKANSAS时:

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

这是否意味着它正在检索正确的,已选择/已提交的stateid(在这种情况下:4 - 阿肯色州声明)但只是没有“回显”州名?

在show_state.php

上尝试以下操作
$query = "SELECT stateid,state_name FROM States WHERE state_name = $state_name";

PAGE SHOWS:空白

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

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

if(isset($makeid))

PAGE SHOWS:"Query was empty"

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

PAGE SHOWS:"Your Car is a "

2 个答案:

答案 0 :(得分: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. 清理用户输入
  3. 请勿使用php doc中建议的* mysql *系列函数。

答案 1 :(得分: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>";