Иметь переключатели для каждой строки результата запроса

У меня проблемы с созданием переключателей для каждого результата запроса. Для каждой возвращаемой строки я хочу иметь дополнительный столбец, состоящий из 2 переключателей. пользователь должен иметь возможность выбрать только одну из этих 2 кнопок. Прямо сейчас у меня есть столбец переключателей, но пользователь может выбрать только 1 из каждого переключателя, а не 1 для каждого результата запроса. Я надеюсь, что в этом есть смысл.

Должен ли я даже использовать радио-кнопки? Или я должен использовать флажки?

<!DOCTYPE html>
<html>
<head>
<title>games</title>
</head>
<body>
<form method="POST" action="<?= $_SERVER['PHP_SELF'] ?>">
<select name="weekNo">
<option value="1">week 1</option>
<option value="2">week 2</option>
<option value="3">week 3</option>
<option value="4">week 4</option>
<option value="5">week 5</option>
<option value="6">week 6</option>
<option value="7">week 7</option>
<option value="8">week 8</option>
<option value="9">week 9</option>
<option value="10">week 10</option>
<option value="11">week 11</option>
<option value="12">week 12</option>
<option value="13">week 13</option>
<option value="14">week 14</option>
</select>
<input type="submit" name="submit" value="Get Games" />
</form>
<br>
<hr>
<?php

$conn =
or die('Could not connect: ' . pg_last_error());
if(isset($_POST['submit'])) //submit button pressed
{
$query=NULL; //prevent compile error

$weekNum = $_POST['weekNo'];

$query = "SELECT a.game_no AS game_number, a.home AS home_team,
homeTeam.wins AS home_wins, homeTeam.losses AS home_losses,
a.away AS away_team, awayTeam.wins AS away_wins,
awayTeam.losses AS away_losses, a.spread AS spread
FROM weekly_stats AS a
INNER JOIN team AS homeTeam ON a.home = homeTeam.name
INNER JOIN team AS awayTeam ON a.away = awayTeam.name
WHERE a.week_no = $weekNum";
$result = pg_query($query) or die ('Query failed: ' .pg_last_error());

$query2 = "SELECT week_no, game_no FROM weekly_stats";
$result2 = pg_query($query2) or die ('Query failed: ' . pg_last_error());

// Printing results in HTML
echo "<br>There are " . pg_num_rows($result) . " records found.\n<p></p>\n";
echo "<table border=1>\n\t<tr>\n";

for($i=0; $i<pg_num_fields($result); $i++)
{
echo "\t\t<th>" . pg_field_name($result, $i) . "</th>\n";
}
echo "\t\t<th>Picks</th>\n";

echo "\t</tr>\n";

while ($line = pg_fetch_array($result, null, PGSQL_ASSOC))
{

echo "\t<tr>\n";

foreach ($line as $col_value)
{
echo "\t\t<td>$col_value</td>\n";
}

echo "<td><input type=\"radio\" name=\"picks\" value=\"home\">Home
<input type=\"radio\" name=\"picks\" value=\"away\">Away</td>";echo "\t</tr>\n";
}

echo "</table>\n";
// Free resultset
pg_free_result($result);
}
// Closing connection
pg_close($conn);

?>
</body>
</html>

-1

Решение

Имя ввода одинаково на всех ваших переключателях, поэтому веб-браузер предполагает, что все они отвечают на один и тот же вопрос («Домой» или «Вне» для ВСЕХ записей), а не набором вопросов («Домой» или «В гостях» для КАЖДОЙ записи). Вам необходимо различать имена для каждой пары переключателей для каждой строки.

$row=0;
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC))
{
echo "\t<tr>\n";

foreach ($line as $col_value)
{
echo "\t\t<td>$col_value</td>\n";
}

echo "<td>"."<label>Home <input type='radio' name='picks[$row]' value='home'></label>"."<label>Away <input type='radio' name='picks[$row]' value='away'></label>"."</td>";

echo "\t</tr>\n";
$row++;
}

На стороне сервера он будет интерпретировать представление как массив. Переменная $ row выше может быть уникальным индексом или идентификатором для каждой строки, а не просто счетчиком, как я продемонстрировал.

0

Другие решения

Переключатели с одинаковыми именами не могут быть выбраны одновременно. Радиокнопки для каждого запроса должны иметь уникальные имена, но имена двух кнопок одного и того же запроса должны иметь одинаковые имена.

Код должен быть изменен на: —

echo "<td><input type=\"radio\" name=\"picks[$row_number]\" value=\"home\">Home
<input type=\"radio\" name=\"picks[$row_number]\" value=\"away\">Away</td>";

0

По вопросам рекламы [email protected]