我的页面使用下拉菜单显示某个运动队的球员姓名。教练可以登录选择他的球队并选择他的球队将要对抗的对手。 当用户选择了团队并且反对时,他点击提交并触发了isset功能。
现在我从下拉菜单中捕获值并将其上传到数据库中的正确表。一切都很直接,但是当我点击提交时,我得到了错误。任何帮助将不胜感激
if ( isset($_POST['submit']) ) {
$player_ids = array_map('intval', $_REQUEST['players']);
$opponents_id = $_REQUEST['players'];
var_dump($player_ids);
var_dump($opponents_id);
$query = 'SELECT `name`, `position`
FROM `player_info`
WHERE `player_id` IN (' . implode(',', $player_ids) . ')';
$return_names = mysql_query($query) or die(mysql_error());
while ( $row = mysql_fetch_assoc($return_names) )
{
$selected[] = $row['name'];
$position[] = $row['position'];
}
$query = ("SELECT `fixture_id`
FROM `fixtures`
WHERE `fixture_id` = $opponents_id")
or die (mysql_error());
$result = mysql_query($query) or die(mysql_error());
while ($row = mysql_fetch_array($query))
{
$fixture_id[] = $row['fixture_id'];
}
for ($i=0; sizeof($selected) > $i; $i++){
$sql = mysql_query("INSERT INTO `team` (`selection_id`, `fixture_id`, `player_position`,`player_name`)
VALUES ('$fixture_id[$i]','$position[$i]','$selected[$i]')")
or die(mysql_error());
echo $selected[$i];
echo $position[$i];
echo $fixture_id[$i];
echo'<br>';
}
答案 0 :(得分:3)
'where子句'中的未知列'Array'错误意味着字面意思 - 您试图将数组值放入where子句中。
在这一行:
$query = ("SELECT `fixture_id`
FROM `fixtures`
WHERE `fixture_id` = $opponents_id")
or die (mysql_error());
您正在使用$opponents_id
显示的var_dump
变量是包含五个值的数组。因此,您需要使用IN子句并将其列出(就像您对$player_ids
所做的那样):
$query = ("SELECT `fixture_id`
FROM `fixtures`
WHERE `fixture_id` IN (" . implode(",", $opponents_id) . ");")
or die (mysql_error());
注意:希望您了解mysql_*
系列函数的累人主题。这些都被弃用并且不安全。我曾经写过这篇文章:http://www.jorble.com/2012/06/you-are-vulnerable-for-sql-injection/
答案 1 :(得分:1)
bodi0是对的,你的 $ opponents_id 是一个数组,如果它必须是一个数组,那么做一些这样的事情
$opponents_id_text=implode(',',$opponents_id);
$query = ("SELECT `fixture_id`
FROM `fixtures`
WHERE `fixture_id` in ($opponents_id_text)")
or die (mysql_error());
答案 2 :(得分:0)
问题在于您的第二个SQL查询:
WHERE `fixture_id` = $opponents_id" -
此处$opponents_id
是数组(当您从$_REQUEST
为其分配值时,它会自动转换为数组,因为HTML组件select
将选项作为数组发送)。
只需implode()
,就像你对$player_ids
所做的那样。
答案 3 :(得分:-1)
你没有在sql查询中正确指定数组。
当我们使用数组时,我们必须在查询中指定数组编号