Autor Zpráva
aladin
Profil *
Zdravím,
Došel jsem na bod,kde je moje achillova pata..a to Checkboxy
hledal jsem tady tohle téma,ale nikde není to,co potřebuji

Mám databázi:
tabulku a v ní sloupce
id | settings | checked | info | title
id-> id nastavení
settings-> co nastavuji
checked-> zda je zaškrtnuté nebo ne
info-> informace o tom,co nastavuji
title-> nadpis nastavení(třeba Registrace apod..)

cíl: vypsat v nastaveni všechny řádky,a zaškrtnout to,co je upravený,například povolení registrace někdo předemnou zaškrtl že budou vypnutý,tak aby to tak zůstalo když tam příjde někdo jiný.
a uložení..např když tu registraci chci povolit tak aby se v db změnil na checked

mám udělanej script,ten výpis funguje,ale nějak mě blbne to ukládání..
script projde celej,ale neuloží to..domnívám se že mám chybu v definici checkboxu

formulář: (je to vzhled typu phtml takže php tam moc dávat nechci)
<form name="formSettings" method="POST">                  
  <?php foreach ($settings as $set) : ?>
    <tr>
      <td><h3><?= $set['title'] ?></h3></td>
      <td><input data-no-uniform="true" <?= $set['checked'] ?> type="checkbox" name="checkbox[]" class="toggle">
            <input type="hidden" name="id" value="<?= $set['id'] ?>">
      </td>
      <td><h6><?= $set['info'] ?></h6></td>
    </tr>
<?php endforeach ?>
<button type="submit" name="settingsSubmitSave" class="btn btn-primary">Uložit změny</button>  
</form>

Třída pro uložení:
class checkbox{
    public function settings($url)
    {
      if(isset($_POST['settingsSubmitSave'])){    
      
          $box = $_POST['checkbox'];
          $id = $_POST['id'];
          
          $save['checked'] = implode(',',$_POST['checkbox']);
            DB::update('site_settings', $save, 'WHERE `id` = ?', array($id)); 
             
                      Message::show('
                                            <div class="alert alert-success">
                                                <button type="button" class="close" data-dismiss="alert">×</button>
                                                <strong>Hotovo!</strong>
                                            </div>          
                                ');
      }
            return DB::allQuery('SELECT * FROM `site_settings`');            
      }
}
asi tam uvidíte víc chyb,tak budu rád když mě na ně upozorníte děkuji
peta
Profil
Jaky ma smysl radek 6, kdyz na radku 8 $box nepouzijes?
Formular odesila jen zaskrtnute checkboxy, prazdne se neodesilaji. Pomoci print_r($_POST['checkbox']); si to muzes zobrazit. Tj, pokud zaskrtnes vsechny checboxy, tak by se meli vsechny ulozit do db. Ale, kdyz je pak odskrtnes, tak je $_POST['checkbox'] prazdne a do db se neulozi nic, zustanou zaskrtnute.
Jinak dotaz nechapu, nevim, jak se ti to chova, co se neulozi a nevidim do celeho php, treba je problem jeste nekde jinde. Ja predpokladam, ze se to ulozi.
aladin
Profil *
ten box jsem měl na něco jiného..
jinač jak teda udělat aby to ukládalo i ty prázdné?jelikož mám v db ten sloupec checked danej ve value,že se to tam zapíše a pak jen do toho inputu type checkbox připisuje jestli je to checked nebo ne..
prostě aby to z tý db v sloupci checked smazalo...pokud je to vypnuté
možná podmínkou by to šlo ne?
isset checkbox?


jinač pokud vypíšu ten check box tak to vypisuje pořád 1
takže asi nejspíš to je pořád zapnuté
takže aby to vypisovalo checked tak budu muset přes podmínku udělat aby to psalo checked ne?
if(implode(',',$_POST['checkbox'])==1)
$check = "checked";
else
$check = "";
?ale asi je to blbost..

ještě se chci zeptat,jelikož je to ve foreach..tak zpráva o uspěšném uložení se zobrazí tolikrát kolik je tam checkboxu(neboli řádků)
jde to nějak obejít že by se to zobrazilo pouze jednou?
napadlo mě cyklovačem while,ale to si myslím že výsledek bude stejný
peta
Profil
Co ti brani projet cele pole?
isset($_POST['checkbox']) {
$ch = array();
for $i=0;$i<1234;$i++) // 1234 checkboxu
{$ch[] = isset($_POST['checkbox'][$i]) ? 1 : 0;} // kdyz je set-ly, tak je zaskrtnuty a neni treba resit value, pokud value nema dalsi vyznam
}
aladin
Profil *
peta:
nějak jsem to sesmolil..funguje,ukládá..ale blbě ukládá...
jelikož to je ve foreach,tak pokud označím třeba 2,a dám uložit,tak to uloží do db jako checked,checked
což je nahouno
asi se tam špatně označuje ID toho co nastavuji...
jak jsi ted radil procházet celým polem,tak to samé dělá foreach v pohledu ne?(v phtml)
nebo jsi myslel projít celým polem přímo při zpracování?tudíž v nastaveni.php ?

phtml: (šablona)
                    <form name="formSettings" method="post">                  
                    
                      <?php foreach ($settings as $set) : ?>
                                      <tr>
                                          <td><h3><?= $set['title'] ?></h3></td>
                                          <td>
                                              <input data-no-uniform="true" <?= $set['checked'] ?> 
                                   type="checkbox" 
                                   value="<?php if($set['checked']=='checked'){ 
                                                    echo ''; 
                                                  }else{ 
                                                    echo 'checked'; }?>" 
                                   name="checkbox[]" 
                                   class="iphone-toggle">
                            <input hidden="hidden" name="id" value="<?= $set['id'] ?>">
                                          </td>
                                          <td><h6><?= $set['info'] ?></h6></td>
                                      </tr>
                      <?php endforeach ?>
                      
                      <button type="submit" name="settingsSubmitSave" class="btn btn-primary">Uložit změny</button> 
                       
                    </form>

nastaveni.php
    public function settings($url)
    {
      if(isset($_POST['settingsSubmitSave'])){    
      
          $box = $_POST['checkbox'];
          $in=implode(',',$_POST['checkbox']);
          $id = $_POST['id'];
          $save=array('checked' => $in);
          //$save['checked'] = implode(',',$_POST['checkbox']);
            DB::zmen('site_settings', $save, 'WHERE `id` = ?', array($id)); 
                      Zprava::zobraz('
                                            <div class="alert alert-success">
                                                <button type="button" class="close" data-dismiss="alert">×</button>
                                                <strong>Hotovo!</strong> '. $in.' a '. $_POST['id'].'
                                            </div>          
                                ');   

                                
                      
      }
      return DB::dotazVsechny('SELECT * FROM `site_settings`');
   
    }

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: