В настоящее время я работаю над приложением php и MySQL. В моем приложении я загружаю таблицу из MySQL, и я показываю ее на своем веб-сайте. Таблица состоит из столбцов (ID, Name, SurName). Когда я загружаю таблицу, я также создаю другой столбец, который состоит из разных флажков. Мой исходный код для создания таблицы следующий:
function user_clients_table() {
$con = mysql_connect("localhost","root",'');
if(!$con){
die("Cannot Connect" . mysql_error());
}
mysql_select_db("client_app",$con);
$get_user_clients = "SELECT 'ID','Name','SurName' FROM 'clients' ";
$clients = mysql_query($get_user_clients,$con);
echo "<table border=2>
<tr>
<th>Client</th>
<th>Name</th>
<th>SurName</th>
<th>Receive Message</th>
</tr>";
while($record = mysql_fetch_array($clients)){
echo "<form action=pushnotification.php method=post>";
echo "<tr>";
echo "<td>".$record['ID']." </td>";
echo "<td>".$record['Name']." </td>";
echo "<td>".$record['SurName']." </td>";
echo "<td>"."<input type=checkbox name= checkbox[".$record['ID']."] "."</td>";
echo "</tr>";
echo "</form>";
}
echo "</table>";
mysql_close();
}
В таблице выглядит Lke, что на Сайте:
То, что я хочу сделать, это эхо-идентификатор клиента из первого столбца таблицы, если флажок clienct isset после нажатия кнопки отправки на веб-сайте. Например, если верхний флажок isset, я хочу эхо "1", если установлен флажок в третьей строке, я хочу эхо "3".
Я сделал это до сих пор:
if (isset($_POST['checkbox']))
{
foreach ($_POST['checkbox'] as $key => $value)
{
$receivemsg = $key;
}
echo '<span style="color:#AFA;text-align:center;">'.$receivemsg.'</span>';
}
Но он работает только для первого флажка, другие не работают. Может кто-нибудь, пожалуйста, помогите мне сделать это? Спасибо С уважением
(В HTML вы помещаете атрибуты в "", например, type = "checkbox". Используйте '' для своих тегов, чтобы вы могли использовать атрибуты "" для атрибутов. Также вам не хватает "/>" в конце вашего входной тег.)
С isset вы фактически проверяете только первый. Удалите его с помощью foreach, он вам не понадобится, поскольку он проходит через отмеченные флажки (если вы отправляете их из HTML в виде массива). Если ни один из этих флажков не выбран, цикл будет выполняться в 0 раз.
foreach ($_POST['checkbox'] as $key => $value)
{
$receivemsg = $key;
}
Если вы напишете его таким образом, он сохранит только последний установленный флажок. Может быть, вы хотите
foreach ($_POST['checkbox'] as $key => $value)
{
$receivemsg[] = $key;
}
И, конечно, инъекции, mysqli и другие, о чем упоминалось в комментариях.
(Лично мне кажется странным, что если флажки отправляются как массив, isset больше не работает с ними, или, если быть более точным, он работает на них как на элементы массива.)
Как сказал @Johannes, вы также объявляете форму для каждого флажка.
mysql_
устарели и были удалены с php 7.0. Ходят слухи, что какmysql_
расширениеmysql_
будетmysql_
, есть шанс 1 к 5, что вы вызовете Вельзебосса. Защитите окружающих, переключившись на pdo или myqsli$receivemsg = $key;
а затем после цикла вы$receivemsg
последний элемент$key
(который теперь является$receivemsg
) внутри некоторых тегов<span>
. Это то, что вы хотите несколько? Если это так, вам нужно переместить этотecho
вызов в пределах вашегоforeach