【问题标题】:one player table - two team dropdowns - how to get no double players (mysql,php,ajax)一个球员表 - 两个球队下拉列表 - 如何获得没有双人球员(mysql,php,ajax)
【发布时间】:2016-03-18 21:43:24
【问题描述】:

我有一个存储所有玩家的玩家表。 什么时候我会选择主队和客队的球员。我在播放器表上有两个不同的 sql 查询。

 <? 
  $select_query = mysql_query("SELECT * FROM $player_table_2016 WHERE active = 1 ORDER by tname ASC"); 
   echo "<select data-placeholder='Spieler auswählen...' class='chosen-select' style='width:220px;' multiple tabindex='4' name='homespieler[]' required>";
      while ($row = mysql_fetch_array($select_query)) {
      echo "<option value='".$row['id']."'>" .$row['tname']."</option>";
     </option>";
    }
echo "</select>";      
?>

然后我用另一个查询选择客队:

$select_query = mysql_query("SELECT * FROM $player_table_2016 WHERE active = 1 ORDER by tname ASC"); 
   echo "<select data-placeholder='Spieler auswählen...' class='chosen-select' style='width:220px;' multiple tabindex='4' name='awayspieler[]' required>";
      while ($row = mysql_fetch_array($select_query)) {
      echo "<option value='".$row['id']."'>" .$row['tname']."</option>";
    </option>";
    }
echo "</select>"; 

问题是,如果一名球员已经被选为主队,我无法查看客队选择。最好只选择那些不在主队的球员加入客队。

这怎么可能?

【问题讨论】:

  • 您的查询完全一样。您需要向我们展示您的玩家表的列才能得到一个好的答案。
  • 你想在第二个下拉列表中排除第一个玩家的选择,对吧?
  • @blckbird:是的,我想在第二个下拉列表中排除第一个玩家的选择。

标签: php mysql dropdown


【解决方案1】:

一页的Javascript解决方案

选择您的主玩家后,您需要触发一个事件以将玩家从第二个下拉列表中排除。例如,您可以使用 JavaScript 来做到这一点。

在您的选择中添加这样的 ID:

<select id='homeTeamPlayer'>
<select id='awayTeamPlayer'>

在你的第一个 &lt;select&gt; 添加一个 JavaScript 方法 onchange 像这样:

<select onchange="excludePlayer()">

然后此方法将禁用第二个下拉菜单中的选项:

function excludePlayer() {
    var homeTeamPlayerId= document.getElementById("homeTeamPlayer").value
    // Get all options within <select id='homeTeamPlayer'>...</select>
    var op = document.getElementById("awayTeamPlayer").getElementsByTagName("option");
    for (var i = 0; i < op.length; i++) {
      // lowercase comparison for case-insensitivity
      (op[i].value == homeTeamPlayerId) 
        ? op[i].disabled = true 
        : op[i].disabled = false ;
    }
}

(从这里复制禁用代码:How can I disable an <option> in a <select> based on its value in JavaScript?

您还应该为第二个下拉菜单实现此功能。

<html>
<head>
	<script>
		function excludePlayer() {
			var homeTeamPlayerId= document.getElementById("homeTeamPlayer").value
			// Get all options within <select id='homeTeamPlayer'>...</select>
			var op = document.getElementById("awayTeamPlayer").getElementsByTagName("option");
			for (var i = 0; i < op.length; i++) {
			  // lowercase comparison for case-insensitivity
			  (op[i].value == homeTeamPlayerId) 
				? op[i].disabled = true
				: op[i].disabled = false ;
			}
		}
	</script>
</head>
<body>
	<select id='homeTeamPlayer' onchange="excludePlayer()">
		<option value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
		<option value="4">4</option>
	</select>
	<select id='awayTeamPlayer'>
		<option value="1">1</option>
		<option value="2">2</option>
		<option value="3">3</option>
		<option value="4">4</option>
	</select>
</html>

两页的 SQL 解决方案

在您的第一个下拉菜单中,您可以选择主队球员。 创建的 HTML 应如下所示:

<form method="post" action="page2.php">
    <select data-placeholder='Spieler auswählen...' class='chosen-select' style='width:220px;' multiple tabindex='4' name='homespieler' required>
        <option ...> ... </option>
        <option ...> ... </option>
    </select>
    <input type=submit />
</form>

在您的第二页上,您现在可以像这样获取所选主场球员的价值:$POST_['homespieler']

您可以像这样在查询中这样做:

SELECT * 
FROM $player_table_2016 
WHERE active = 1 
AND ID != $POST_['homespieler']
ORDER by name ASC

【讨论】:

  • 您的查询将返回 0 个结果
  • @blckbird:感谢您的支持和想法。但是如何在客队 sql 查询中实现/集成 JS 禁用部分?
  • 您不能在同一页面上执行此操作。因为在您触发 sql 时,您不知道用户将做出哪个选择。因此,我建议简单地禁用相应的&lt;option&gt;
  • @blckbird:再次感谢您的回答。我m trying to run the javascript one page version but it doesn't work. Ive 把js 函数放到body 里面,还把select 的ID 命名为粘贴在onChange 里面。仍然可以为客队选择已经为主队选择的球员。感谢您的支持。
  • 但是单页javascript版本仍然不适合我。 :( 控制台说:ReferenceError: homeTeamPlayerId 未定义 (op[i].value == homeTeamPlayerId)
【解决方案2】:

您可以将 ajax 用于此类场景。 一旦用户选择了主队的所有球员,请使用 jQuerys .blur 事件并将所有 id 传递给 php。 而且你可以使用查询 select * from table where id not in ($id) 其中 $id 是通过 POST 或 GET 方法接收到的值

【讨论】:

  • 您能否分享更详细的信息,该解决方案应如何实施?谢谢
  • 详细信息真的很有帮助,你说得对,Rene。我敢打赌,这就是为什么人们在你的问题上留下你的问题,要求 对问题本身更加清晰和信息丰富
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多