2012-02-22 4 views
1

Я пытаюсь сделать галочки. Когда я нажимаю флажок это делает isPremium = 1, если я нажимаю клетчатый флажок, что делает isPremium = 0Php - флажок не работает

Однако: когда я нажимаю клетчатый флажок он не работает ..

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<?php 
require 'connectDB.php'; 
$mysql = new mysql(); 
$mysql->connect(); 

$dbResult = mysql_query("select * from profiles"); 






echo "<form action='#' method='post'>"; 

$dbResult = mysql_query("select * from profiles"); 


while ($info = mysql_fetch_array($dbResult)) { 

    if ($info['isPremium'] == 0) 
     echo "<input type=checkbox name='check2[]' id='check2' value=" . $info['id'] . ">"; 
    else 
     echo "<input type=checkbox name='check1[]' id='check1' value=" . $info['id'] . " checked>"; 

    echo $info['profileName'] . "<br />"; 
} 

echo "<p><input type='submit' name='btnPremium' /></p>"; 
echo "</form>"; 

if (isset($_POST['btnPremium'])) { 


    if (isset($_POST['check2'])) { 
     $arrPremium = $_POST['check2']; 
     foreach ($arrPremium as $result) { 
      mysql_query("UPDATE profiles set isPremium=1 where id=" . $result . ""); 
     } 
    } 
    else 
    { 
     $arrPremium = $_POST['check1']; 
     foreach ($arrPremium as $result2) { 
      mysql_query("UPDATE profiles set isPremium=0 where id=" . $result2 . ""); 
     } 
    } 



} 
?> 

, когда я установите флажок напротив флажка.

Это страница CheckBox

enter image description here

+1

* Когда я нажмете отмечен флажок, он делает еще один флажок unclick. *: Что это значит? Кажется, у вас есть только один флажок. –

+0

вам не хватает какого-то ** кода javascript **, может быть? Это должно просто вывести простой флажок, я предполагаю, что у вас есть другой код, который делает какое-то событие onclick. – Jakub

ответ

1

Если я правильно понимаю, чего вы пытаетесь достичь, ваш код излишне усложняется. Вы должны использовать isset, чтобы проверить, включено ли значение флажка в массив $_POST. Если да, то флажок был установлен.

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<?php 
require 'connectDB.php'; 
$mysql = new mysql(); 
$mysql->connect(); 

echo "<form action='#' method='post'>"; 

$dbResult = mysql_query("SELECT * FROM profiles"); 
$profileid = array(); 

while ($info = mysql_fetch_array($dbResult)) { 
    echo "<input type=\"checkbox\" name=\"" . $info['id'] . "\" " . ($info['isPremium'] != 0 ? "checked " : "") . "/>"; 
    echo $info['profileName'] . "<br />"; 
    $profileid[] = $info['id']; 
} 

echo "<p><input type='submit' name='btnPremium' /></p>"; 
echo "</form>"; 

if (isset($_POST['btnPremium'])) { 
    foreach ($profileid as $id) { 
     if (isset($_POST[$id])) { 
      mysql_query("UPDATE profiles SET isPremium=1 WHERE id=" . $id); 
     } else { 
      mysql_query("UPDATE profiles SET isPremium=0 WHERE id=" . $id); 
     } 
    } 
} 
?> 
-1

Флажки обычно посылает значение "on" на сервере, независимо от того, что value атрибут установлен. Если вы можете, попробуйте вместо этого использовать радиокнопки, так как они отправляют на сервер value. Если это не вариант, установите флажок check1[".$info['id']." и получите доступ к array_keys($_POST['check1']).

2

Я реструктурировать свой код в этом:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<?php 
require 'connectDB.php'; 
$mysql = new mysql(); 
$mysql->connect(); 

$update = (isset($_POST['check']) && is_array($_POST['check'])); 

$dbResult = mysql_query("select * from profiles"); 

echo "<form action='#' method='post'>"; 

while ($info = mysql_fetch_array($dbResult)) 
{ 
    if ($update) 
    { 
     $info['isPremium'] = (in_array($info['id'], $_POST['check']) ? 1 : 0); 
     mysql_query("UPDATE profiles SET isPremium = " . $info['isPremium'] . " WHERE id = " . $info['id']); 
    } 

    echo "<input type=checkbox name='check[]' value=" . $info['id'] . ($info['isPremium'] == 0 ? "" : "checked") . " />"; 
    echo htmlspecialchars($info['profileName']) . "<br />"; 
} 

echo "<p><input type='submit' name='btnPremium' /></p>"; 
echo "</form>"; 

?> 

Были некоторые проблемы с вашим оригинальным кодом:

  1. Несколько HTML input элементы с одинаковыми ID. Это не верно. Мы можем иметь несколько элементов с тем же атрибутом name, но атрибут id должен быть уникальным для каждого элемента.

  2. База данных UPDATE Код пробега после, отображающий форму. Это не верно. В этом случае мы должны обновить базу данных до для генерации вывода HTML.

  3. ВАЖНО: Нет необходимости в двух разных массивах POST (check1 и check2). Нам нужен только один массив. Отметить проверенные поля размещены брокер. не отмечены полями будут не будут опубликованы у браузера. Поскольку значение id - это значение, мы можем использовать функцию in_array, чтобы проверить, был ли установлен флажок для элемента.

  4. Это хорошая идея: побег вещи, которые вы будете выводить как HTML из базы данных. В противном случае приложение уязвимо для некоторых видов атак. Для этой цели полезна функция htmlspecialchars.

Смежные вопросы