Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Нужно сделать Yes / no переключатели


Автор: Enya 9.11.2006, 15:19
Вот. Есть например статья в БД. ID, TITLE, HEDER, TEXT, AUTOR, DATE, SNOW_ORDER
Ну, и если SNOW_ORDER значение в поле 1 то статья публикуется на сайте, если 0 то статья есть в БД но на сайте не публикуется.
Зайдя в админку, можно поставить переключатель на то чтобы статья показывалась.

Думаю, что лучше всего было бы реализовать это с помощью radio - кнопок.

Я вчера пробывала. Но не получается, сделать в админке, что бы после выборки из БД, radio-кнопки были установлены так как в БД записи.
 smile 
control.php?type=2 редактирование записей
Код

if (isset($_POST['Submit'])) {
                $count = sizeof($_POST['id']);
                for ($i = 0; $i < $count; $i++) {
                    $sql = 'UPDATE 
                                `objects` 
                            SET 
                                `obj01` = \''.$_POST['obj01'][$i].'\', 
                                `obj02` = \''.$_POST['obj02'][$i].'\', 
                                `obj03` = \''.$_POST['obj03'][$i].'\', 
                                `snow_order` = \''.$_POST['snow_order'][$i].'\' 
                            WHERE 
                                `id` = '.$_POST['id'][$i];
                    mysql_query($sql);
                }
                
                    header('location: control.php');
   
                }else{
                    $sql    = 'SELECT * FROM `objects` ORDER BY `id` DESC';
                    $result = mysql_query($sql) or die("SQL Select Error");
                    $count  = mysql_num_rows($result);
                    
                ?>
                <table width="600" border="0" cellspacing="1" cellpadding="0" align="center">
                <form name="form1" method="post" action="control.php?type=2">
                <tr><td>
                    <table width="600" border="0" cellspacing="1" cellpadding="0">
                        <tr><td align="center"><strong>Id</strong></td>
                            <td align="center"><strong>Object Name</strong></td>
                            <td align="center"><strong>Object type</strong></td>
                            <td align="center"><strong>Object</strong></td>
                        </tr>
            
                        <?php
                        
                            while ($obj = mysql_fetch_object($result)) {
                                echo '<tr>';
                                    
                                    ?>
                                        <td align="center"><input type="hidden" name="id[]" value="<?=$obj->id?>"><?=$obj->id?></td>
                                        <td align="center"><input name="obj01[]" type="text" id="obj01" value="<?=$obj->obj01?>"></td>
                                        <td align="center"><input name="obj02[]" type="text" id="obj02" value="<?=$obj->obj02?>"></td>
                                        <td align="center"><input name="obj03[]" type="text" id="obj03" value="<?=$obj->obj03?>"></td>
                                        <td align="center">
                                    <?php
                                            if($obj->snow_order!=0){
                                                
                                                echo'<font color="green">Snow</font><input type="radio" name="snow_order[]" value="1" checked>';
                                                echo'<font color="red">Hide</font><input type="radio" name="snow_order[]" value="0">';    
                                                
                                            }else{
                                                
                                                echo '<font color="green">Snow</font><input type="radio" name="snow_order[]" value="1">';
                                                echo '<font color="red">Hide</font><input type="radio" name="snow_order[]" value="0" checked></td>';
                                                
                                            }
                                echo '</tr>';    
                            }
                            
                        
                        
                        }
                        
                        ?>
                        <tr><td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
                        </tr>
                    </table>
                </td></tr>
                </form>
                </table>
                
                <?php
                
            

Код


CREATE TABLE `objects` (
  `id` int(11) NOT NULL auto_increment,
  `obj01` varchar(100) NOT NULL default '',
  `obj02` varchar(100) NOT NULL default '',
  `obj03` varchar(100) NOT NULL default '',
  `snow_order` int(11) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

Автор: Drache 9.11.2006, 15:51
по сути:
1. проверь что у тебя вообще хранится в БД для этой записи. 
2. если в 1 пункте все правильно, то проверь, что находится в $obj (print_r($obj)).

не по сути:
1. после header() всегда делай die(). Иначе можешь когда-то напороться на неприятности, скрипт ведь будет дальше выполняться.
2. вот эту конструкцию
Код

if($obj->snow_order!=0){
    
                                                
    
                                                echo'<font color="green">Snow</font><input type="radio" name="snow_order[]" value="1" checked>';
    
                                                echo'<font color="red">Hide</font><input type="radio" name="snow_order[]" value="0">';    
    
                                                
    
                                            }else{
    
                                                
    
                                                echo '<font color="green">Snow</font><input type="radio" name="snow_order[]" value="1">';
    
                                                echo '<font color="red">Hide</font><input type="radio" name="snow_order[]" value="0" checked></td>';
    
                                                
    
                                            }

я бы заменила такой:
Код

?>
<font color="green">Snow</font><input type="radio" name="snow_order[]" value="1"<?php if ($obj->show_order != 0) { echo ' checked'; } ?>>
<font color="red">Hide</font><input type="radio" name="snow_order[]" value="0"<?php if ($obj->show_order == 0) { echo ' checked'; } ?>>
<?php

хотя это уже может дело вкуса.
и не забудь закрывающий тег </td>

Автор: -=Ustas=- 9.11.2006, 16:24
И еще, на мой взгляд глупо вешать на поле с всего лишь двуми возможными значениями INT(11). Здесь нужно
Код

`snow_order` ENUM('1','0') NOT NULL default '0',


Добавлено @ 16:26 
Ну а остальное, как написала Drache  smile 

Автор: Enya 9.11.2006, 16:56
Drache, я что-то не думала, что можно вот так напрямую, просто вывести параметр тега.
Но в целом, я ведь верно мыслила. smile 

я вот в MS Acces есть тип поля для Yes/No
Код

`snow_order` ENUM('1','0') NOT NULL default '0',
это кусочек кода, для запроса-создания таблицы? а если хочу сменить тип поля?
Код

AFTER



Автор: -=Ustas=- 9.11.2006, 17:42
Цитата(Enya @  9.11.2006,  16:56 Найти цитируемый пост)
а если хочу сменить тип поля?

Код

ALTER TABLE `objects` MODIFY `snow_order` ENUM('1','0') NOT NULL default '0';

Автор: Enya 9.11.2006, 17:44
Вот такое дело. С Radio-кнопками, получается, что я могу только для 1-ной позиции выбрать покахать или нет.
А вот с галочками, типа для многих.
Вот как получилось http://www.nasha.lv/123/control.php?type=2

Автор: -=Ustas=- 9.11.2006, 17:44
Цитата(Enya @  9.11.2006,  16:56 Найти цитируемый пост)
я вот в MS Acces есть тип поля для Yes/No

Тоже самое что и ENUM, типа логических типов smile

Добавлено @ 17:47 
А зачем там checkbox-ы, ведь там должно выбираться только одно из двух значений, т.е. либо показывать, либо не показывать smile

Автор: Black_leopard 9.11.2006, 19:06
-=Ustas=- правильно говорит, 
сначала задай поле <input type="hidden" name="Visible" value="0">
а потом <input type="checkbox" name="Visible" value="1">
первое поле нужно для того чтобы определить переменую Visible и занулить ее (означает не показывать)

Автор: -=Ustas=- 9.11.2006, 20:45
Цитата(Black_leopard @  9.11.2006,  19:06 Найти цитируемый пост)
сначала задай поле <input type="hidden" name="Visible" value="0">
а потом <input type="checkbox" name="Visible" value="1">
первое поле нужно для того чтобы определить переменую Visible и занулить ее (означает не показывать) 

Это еще что?!  smile 
Достаточно одного поля
Код

<input type="checkbox" name="visible[]"> Show

В скрипте проверять, если галочка поставлена, значит показывать, т.е.:
Код

....
....
if (isset($_POST['visible'][$i])) {
    // Если данная переменная установлена, значит галочка данного элемента была отмечена
}

Автор: G0rinich 10.11.2006, 10:48
А еще будет куча подводных камней!!!

Если у вас оба radio будут не checked, то ни один из них к вам не придет и у вас в итоге скроются не те статьи (судя по вашему скрипту)

В случае с <input type="hidden" name="Visible" value="0">, а потом <input type="checkbox" name="Visible" value="1"> будет то же самое: sizeof($_POST['Visible']) >= sizeof($_POST['id'])!!!
Можете проверить ;)

Автор: -=Ustas=- 10.11.2006, 10:54
Цитата(G0rinich @  10.11.2006,  10:48 Найти цитируемый пост)
А еще будет куча подводных камней!!!

Ничего не будет.

Автор: Enya 10.11.2006, 15:06
Что-то вы тут понаписали.
Но вот куда и что вставлять не понимаю.
Код

if (isset($_POST['Submit'])) {
                $count = sizeof($_POST['id']);
                for ($i = 0; $i < $count; $i++) {
                    $sql = 'UPDATE 
                                `objects` 
                            SET 
                                `obj01` = \''.$_POST['obj01'][$i].'\', 
                                `obj02` = \''.$_POST['obj02'][$i].'\', 
                                `obj03` = \''.$_POST['obj03'][$i].'\', 
                                `snow_order` = \''.$_POST['snow_order'][$i].'\' 
                            WHERE 
                                `id` = '.$_POST['id'][$i];
                    mysql_query($sql);
                }
                ?><pre><? print_r($_POST); ?></pre><?
                    //header('location: control.php');
   
                }else{
                    $sql    = 'SELECT * FROM `objects` ORDER BY `id` ASC';
                    $result = mysql_query($sql) or die("SQL Select Error");
                    $count  = mysql_num_rows($result);
                    
                ?>
                <table width="600" border="0" cellspacing="1" cellpadding="0" align="center">
                <form name="form1" method="post" action="control.php?type=2">
                <tr><td>
                    <table width="600" border="0" cellspacing="1" cellpadding="0">
                        <tr><td align="center"><strong>Id</strong></td>
                            <td align="center"><strong>Object Name</strong></td>
                            <td align="center"><strong>Object type</strong></td>
                            <td align="center"><strong>Object</strong></td>
                        </tr>
            
                        <?php
                        
                            while ($obj = mysql_fetch_object($result)) {
                                echo '<tr>';
                                    
                                    ?>
                                        <td align="center"><input type="hidden" name="id[]" value="<?=$obj->id?>"><?=$obj->id?></td>
                                        <td align="center"><input name="obj01[]" type="text" id="obj01" value="<?=$obj->obj01?>"></td>
                                        <td align="center"><input name="obj02[]" type="text" id="obj02" value="<?=$obj->obj02?>"></td>
                                        <td align="center"><input name="obj03[]" type="text" id="obj03" value="<?=$obj->obj03?>"></td>
                                        <td align="center">
                                    
                                        <font color="green">Snow</font>
                                                <input type="checkbox" name="snow_order[]" value="1"<?php if ($obj->snow_order != 0) { echo ' checked'; } ?>>
                                            <font color="red">Hide</font>
                                                <input type="checkbox" name="snow_order[]" value="0"<?php if ($obj->snow_order == 0) { echo ' checked'; } ?>>
                                    <?php
                                echo '</tr>';    
                            }
                            
                        
                        
                        }
                        
                        ?>
                        <tr><td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
                        </tr>
                    </table>
                </td></tr>
                </form>
                </table>
                
                <?php

Автор: -=Ustas=- 10.11.2006, 15:40
Типа такого:
Код

<?php

        if (isset($_POST['Submit'])) {
                $count = sizeof($_POST['id']);
                for ($i = 0; $i < $count; $i++) {
                    $show = (isset($_POST['snow_order'][$i])) ? 1 : 0;
                    $sql = 'UPDATE 
                                `objects` 
                            SET 
                                `obj01` = \''.$_POST['obj01'][$i].'\', 
                                `obj02` = \''.$_POST['obj02'][$i].'\', 
                                `obj03` = \''.$_POST['obj03'][$i].'\', 
                                `snow_order` = \''.$show.'\' 
                            WHERE 
                                `id` = '.$_POST['id'][$i];
                    mysql_query($sql);
                }
                ?><pre><? print_r($_POST); ?></pre><?
                    //header('location: control.php');
   
                }else{
                    $sql    = 'SELECT * FROM `objects` ORDER BY `id` ASC';
                    $result = mysql_query($sql) or die("SQL Select Error");
                    $count  = mysql_num_rows($result);
                    
                ?>
                <table width="600" border="0" cellspacing="1" cellpadding="0" align="center">
                <form name="form1" method="post" action="control.php?type=2">
                <tr><td>
                    <table width="600" border="0" cellspacing="1" cellpadding="0">
                        <tr><td align="center"><strong>Id</strong></td>
                            <td align="center"><strong>Object Name</strong></td>
                            <td align="center"><strong>Object type</strong></td>
                            <td align="center"><strong>Object</strong></td>
                        </tr>
            
                        <?php
                        
                            while ($obj = mysql_fetch_object($result)) {
                                echo '<tr>';
                                    
                                    ?>
                                        <td align="center"><input type="hidden" name="id[]" value="<?=$obj->id?>"><?=$obj->id?></td>
                                        <td align="center"><input name="obj01[]" type="text" id="obj01" value="<?=$obj->obj01?>"></td>
                                        <td align="center"><input name="obj02[]" type="text" id="obj02" value="<?=$obj->obj02?>"></td>
                                        <td align="center"><input name="obj03[]" type="text" id="obj03" value="<?=$obj->obj03?>"></td>
                                        <td align="center">
                                    
                                        <font color="green">Snow</font>
                                        <input type="checkbox" name="snow_order[]" value="1" <?php if ($obj->snow_order != 0) { echo ' checked'; } ?>>
                                        
                                    <?php
                                echo '</tr>';    
                            }
                            
                        
                        
                        }
                        
                        ?>
                        <tr><td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
                        </tr>
                    </table>
                </td></tr>
                </form>
                </table>
                
                <?php


Добавлено @ 15:42 
Т.е. у тебя будет только один checkbox Show и если он отмечен, то новость будет показываться, если нет, то не будет

Автор: Enya 10.11.2006, 15:47
-=Ustas=-, не получается, так.
Ну вот сам попробуй, ссылка есть.
Там галочки снимаются, а "0" в БД не отправляются.

Автор: -=Ustas=- 10.11.2006, 17:24
А если так
Код

<?php
        if (isset($_POST['Submit'])) {
                $count = sizeof($_POST['id']);
                for ($i = 0; $i < $count; $i++) {
                    $_POST['id'][$i] = intval($_POST['id'][$i]);
                    $show = (isset($_POST['snow_order'][$_POST['id'][$i]])) ? 1 : 0;
                    $sql = 'UPDATE 
                                `objects` 
                            SET 
                                `obj01` = \''.mysql_escape_string($_POST['obj01'][$i]).'\', 
                                `obj02` = \''.mysql_escape_string($_POST['obj02'][$i]).'\', 
                                `obj03` = \''.mysql_escape_string($_POST['obj03'][$i]).'\', 
                                `snow_order` = \''.$show.'\' 
                            WHERE 
                                `id` = '.$_POST['id'][$i];
                    mysql_query($sql);
                }
                ?><pre><? print_r($_POST); ?></pre><?
                    //header('location: control.php');
   
                }else{
                    $sql    = 'SELECT * FROM `objects` ORDER BY `id` ASC';
                    $result = mysql_query($sql) or die("SQL Select Error");
                    $count  = mysql_num_rows($result);
                    
                ?>
                <table width="600" border="0" cellspacing="1" cellpadding="0" align="center">
                <form name="form1" method="post" action="control.php?type=2">
                <tr><td>
                    <table width="600" border="0" cellspacing="1" cellpadding="0">
                        <tr><td align="center"><strong>Id</strong></td>
                            <td align="center"><strong>Object Name</strong></td>
                            <td align="center"><strong>Object type</strong></td>
                            <td align="center"><strong>Object</strong></td>
                        </tr>
            
                        <?php
                        
                            while ($obj = mysql_fetch_object($result)) {
                                echo '<tr>';
                                    
                                    ?>
                                        <td align="center"><input type="hidden" name="id[]" value="<?=$obj->id?>"><?=$obj->id?></td>
                                        <td align="center"><input name="obj01[]" type="text" id="obj01" value="<?=$obj->obj01?>"></td>
                                        <td align="center"><input name="obj02[]" type="text" id="obj02" value="<?=$obj->obj02?>"></td>
                                        <td align="center"><input name="obj03[]" type="text" id="obj03" value="<?=$obj->obj03?>"></td>
                                        <td align="center">
                                    
                                        <font color="green">Snow</font>
                                        <input type="checkbox" name="snow_order[<?=$obj->id?>]" value="1" <?php if ($obj->snow_order != 0) { echo ' checked'; } ?>>
                                        
                                    <?php
                                echo '</tr>';    
                            }
                            
                        
                        
                        }
                        
                        ?>
                        <tr><td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
                        </tr>
                    </table>
                </td></tr>
                </form>
                </table>
                
                <?php


Добавлено @ 17:37 
Ну или тоже как вариант, как тебе понятнее будет
Код

<?php
        if (isset($_POST['Submit'])) {
                $count = sizeof($_POST['id']);
                for ($i = 0; $i < $count; $i++) {
                    $_POST['id'][$i] = intval($_POST['id'][$i]);
                    $show = (in_array($_POST['id'][$i], $_POST['show_order'])) ? 1 : 0;
                    $sql = 'UPDATE 
                                `objects` 
                            SET 
                                `obj01` = \''.mysql_escape_string($_POST['obj01'][$i]).'\', 
                                `obj02` = \''.mysql_escape_string($_POST['obj02'][$i]).'\', 
                                `obj03` = \''.mysql_escape_string($_POST['obj03'][$i]).'\', 
                                `snow_order` = \''.$show.'\' 
                            WHERE 
                                `id` = '.$_POST['id'][$i];
                    mysql_query($sql);
                }
                ?><pre><? print_r($_POST); ?></pre><?
                    //header('location: control.php');
   
                }else{
                    $sql    = 'SELECT * FROM `objects` ORDER BY `id` ASC';
                    $result = mysql_query($sql) or die("SQL Select Error");
                    $count  = mysql_num_rows($result);
                    
                ?>
                <table width="600" border="0" cellspacing="1" cellpadding="0" align="center">
                <form name="form1" method="post" action="control.php?type=2">
                <tr><td>
                    <table width="600" border="0" cellspacing="1" cellpadding="0">
                        <tr><td align="center"><strong>Id</strong></td>
                            <td align="center"><strong>Object Name</strong></td>
                            <td align="center"><strong>Object type</strong></td>
                            <td align="center"><strong>Object</strong></td>
                        </tr>
            
                        <?php
                        
                            while ($obj = mysql_fetch_object($result)) {
                                echo '<tr>';
                                    
                                    ?>
                                        <td align="center"><input type="hidden" name="id[]" value="<?=$obj->id?>"><?=$obj->id?></td>
                                        <td align="center"><input name="obj01[]" type="text" id="obj01" value="<?=$obj->obj01?>"></td>
                                        <td align="center"><input name="obj02[]" type="text" id="obj02" value="<?=$obj->obj02?>"></td>
                                        <td align="center"><input name="obj03[]" type="text" id="obj03" value="<?=$obj->obj03?>"></td>
                                        <td align="center">
                                    
                                        <font color="green">Snow</font>
                                        <input type="checkbox" name="snow_order[]" value="<?=$obj->id?>" <?php if ($obj->snow_order != 0) { echo ' checked'; } ?>>
                                        
                                    <?php
                                echo '</tr>';    
                            }
                            
                        
                        
                        }
                        
                        ?>
                        <tr><td colspan="4" align="center"><input type="submit" name="Submit" value="Submit"></td>
                        </tr>
                    </table>
                </td></tr>
                </form>
                </table>
                
                <?php

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)