从多个表数据输入页面填充下拉菜单

时间:2012-11-26 19:09:17

标签: php mysql select

我需要在我的数据输入页面添加另一个下拉菜单并想出一种在两个表格中显示日期的方法,但是每个表格都会加倍,即艺术家下拉显示:

将N添加到X
将N添加到X
空气
空气
阿蒙托宾
阿蒙托宾

贡献者下拉显示:

Joe Blow
Joe Blow
迪克瓦德 迪克瓦德 等

这是我将表格数据加倍的地方:

SELECT artists.id, artists.artists_name, contributors.id, contributors.contributors_name FROM artists, contributors ORDER BY artists.artists_name, contributors.contributors_name";

这是在上下文中:

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO news (artistid, contributorid, title, blog_entry, rating) VALUES (%s, %s, %s, %s, %s)",
                   GetSQLValueString($_POST['artistid'], "text"),
                   GetSQLValueString($_POST['contributorid'], "text"),
                   GetSQLValueString($_POST['title'], "text"),
                   GetSQLValueString($_POST['blog_entry'], "text"),
                   GetSQLValueString($_POST['rating'], "text"));

mysql_select_db($database_em, $em);
$Result1 = mysql_query($insertSQL, $em) or die(mysql_error());

$insertGoTo = "add_post.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}

mysql_select_db($database_em, $em);
$query_listPosts = "SELECT artists.id, artists.artists_name, contributors.id, contributors.contributors_name FROM artists, contributors ORDER BY artists.artists_name, contributors.contributors_name"; 
$listPosts = mysql_query($query_listPosts, $em) or die(mysql_error());
$row_listPosts = mysql_fetch_assoc($listPosts);
$totalRows_listPosts = mysql_num_rows($listPosts);
?>

以下是我在页面中展示的方式:

<p>
<label for="artistid">Artist:</label>
</p>
<p><select name="artistid">
<option value="0">Not registered</option>
<?php
do {  
?>
<option value="<?php echo $row_listPosts['id']?>"><?php echo $row_listPosts['artists_name']?></option>
<?php
} while ($row_listPosts = mysql_fetch_assoc($listPosts));
$rows = mysql_num_rows($listPosts);
if($rows > 0) {
  mysql_data_seek($listPosts, 0);
  $row_listPosts = mysql_fetch_assoc($listPosts);
}
?>
</select></p>
<p>
<label for="contributorid">Contributor:</label>
</p>
<p><select name="contributorid">
<option value="0">Not registered</option>
<?php
do {  
?>
<option value="<?php echo $row_listPosts['id']?>"><?php echo $row_listPosts['contributors_name']?></option>
<?php
} while ($row_listPosts = mysql_fetch_assoc($listPosts));
$rows = mysql_num_rows($listPosts);
if($rows > 0) {
  mysql_data_seek($listPosts, 0);
  $row_listPosts = mysql_fetch_assoc($listPosts);
}
?>
</select></p>

虽然我现在可以解决这个问题,但是当我向数据输入页面添加更多下拉菜单时,这将成为一个问题,所以任何想法我都可以解决这个问题,以便每个下拉列表只有一个数据实例加倍的人会非常感激。

1 个答案:

答案 0 :(得分:1)

这是由您的查询引起的。您正在加入两个没有关系的表,因此它创建了多个行,匹配artistscontributors,而id正在合并。

我在http://sqlfiddle.com/#!2/d7962/2/0

创建了此问题

这是我的建议 -

将1个查询更改为2个查询,并简化代码,从do-while循环更改为while()循环

查询 -

$query_Artists = "SELECT id, artists_name FROM artists ORDER BY artists_name";
$query_Contributors = "SELECT id,contributors_name FROM contributors ORDER BY contributors_name"; 
$listArtists = mysql_query($query_Artists, $em) or die(mysql_error());
$listContributors = mysql_query($query_Contributors, $em) or die(mysql_error());

降价 -

<p>
<label for="artistid">Artist:</label>
</p>
<p><select name="artistid">
<option value="0">Not registered</option>
<?php
if(mysql_num_rows($listArtists) > 0) {
while ($artist_dropdown = mysql_fetch_assoc($listArtists)) {  
?>
<option value="<?php echo $artist_dropdown['id']?>"><?php echo $artist_dropdown['artists_name']?></option>
<?php
}
}
?>
</select></p>
<p>
<label for="contributorid">Contributor:</label>
</p>
<p><select name="contributorid">
<option value="0">Not registered</option>
<?php
if(mysql_num_rows($listContributors) > 0) {
while ($contributors_dropdown = mysql_fetch_assoc($listContributors)) {  
?>
<option value="<?php echo $contributors_dropdown['id']?>"><?php echo $contributors_dropdown['contributors_name']?></option>
<?php
}
}
?>
</select></p>