2012-02-22 3 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 . ""); 
     } 
    } 



} 
?> 

클릭 할 때 내가 확인란을 클릭하면 다른 확인란이 선택 취소됩니다.

enter image description here

+1

* 확인란을 클릭하면 다른 확인란이 선택 취소됩니다. * : 의미는 무엇입니까? 하나의 확인란 만있는 것 같습니다. –

+0

일부 ** 자바 스크립트 ** 코드가 누락 되었습니까? 이것은 단순한 체크 박스를 출력해야합니다. 여러분이 어떤 종류의 '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

체크 박스는 일반적으로 관계없이 설정 한 값 value 속성의 서버에 값 "on"을 보내 체크 박스 페이지를합니다. 가능한 경우 라디오 버튼을 대신 사용해보십시오. 적절한 버튼을 value으로 보내면됩니다. 옵션이 아닌 경우 확인란의 이름을 check1[".$info['id']."으로하고 array_keys($_POST['check1'])에 액세스하십시오.

2

나는이에 코드를 리팩토링 한 : 동일한 ID를 가진

  1. 여러 HTML input 요소 :

    <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>"; 
    
    ?> 
    

    원래 코드 몇 가지 문제가 있었다. 이것은 잘못된 것입니다. 동일한 name 특성을 가진 여러 요소를 가질 수 있지만 id 특성은 각 요소마다 고유해야합니다.

  2. 데이터베이스 UPDATE 코드는 양식을 표시 한 후 을 실행합니다. 이것은 잘못된 것입니다. 이 경우 데이터베이스 보다 먼저 업데이트하여 HTML 출력을 생성해야합니다.

  3. 중요 : 두 개의 다른 POST 배열 (check1 및 check2)이 필요하지 않습니다. 하나의 배열 만 있으면됩니다. 체크 박스은 브라우저에 의해 게시됩니다. 체크되지 않은 상자는 브라우저로게시되지 않습니다. id이 값이므로 in_array 함수를 사용하여 항목의 체크 박스가 선택되었는지 확인 할 수 있습니다.

  4. 을 이스케이프 데이터베이스에서 HTML로 출력하는 것이 좋습니다. 그렇지 않으면 응용 프로그램이 어떤 종류의 공격에 취약합니다. 함수 htmlspecialchars은 이러한 목적에 유용합니다.

관련 문제