Autor Zpráva
Joudolol
Profil *
Ahoj,
prosím potřeboval bych poradit, protože vůbec nevím jak uložit do databáze zaškrtnuté v checkboxu.
Skloudil jsem HTML
<?while($seznam=mysql_fetch_array($dbv)):?>
<input type="checkbox" name="odvetvi" value="<?php echo $seznam['odvetvi_id']; ?>"> <?php echo $seznam['nazev']; ?><br>
          <?endwhile;?>

To bych měl, ale už vůbec netuším jak to uložit. Tedy, tímto jsem do toho vypsal z DB název odvětví (rubriky) a její id do value. Právě už teď nevím, jestli to mám správně. atribut name="" bude u každé položky stejný (může být, anebo musí být jiný?) Nyní uživatel zaškrtne třeba 3 z 10 rubrik. To potřebuji uložit do databáze a vůbec nevím jak. Nemohl by mi někdo pomoci to zpracovat a naznačit uložení do DB? Děkuji mnohokrát za pomoc.
dehtak
Profil
jednoduse , ja to delam treba tak, ze funkci implode spojim ty polozky .
U html musis zadat za jmeno hranate zavorky [] , tim se vytvori array. No a pokud chces to odvetvi ulozit do jednoho sloupce v mysql ,
tak ty array pole spoj v jeden text a oddel texty nejakym odelovacem , treba znamenkem | .
Vysledek by mel vypadat takto : text|text|text|text. Vysledek uloziz do databaze.


// pro html 
<input type="checkbox" name="odvetvi[]" value="<?php echo $seznam['odvetvi_id']; ?>">

// pro php
$odvetvi = implode("|", $_POST['odvetvi']); // php
 mysql_query("INSERT INTO `odvetvi` VALUE ('$odvetvi') ");

//z vypisu databaze si to zase musis pomoci funkce  explode rozdelit
$odvetvi = explode("|",$result['odvetvi']);
foreach ($odvetvi as $o){
echo $o ."<br>";
}

pisu to jen tak zkracene aby jste to pochopil
Joudolol
Profil *
No, já potřebuju uložit to databáze čistě jen to ID toho odvětví, je to možné?
dehtak
Profil
Joudolol:
Muzes postupovat stejnym zpusobem , vysledek bude 14|25|18|34

$odvetvi = explode("|",$result['odvetvi']);
foreach ($odvetvi as $o){
 mysql_query("SELECT  FROM `neco` WHERE id ='$o' ");
}

jeste jedna vec , nepis <?php echo ; ?> ale napis jen <?=?>
value="<?php echo $seznam['odvetvi_id']; ?>"
value="<?=$seznam['odvetvi_id']?>"

je to prehlednejsi a rychlejsi
Joudolol
Profil *
Ty to nechápeš :D. Já potřebuji provést to samé Query podle toho kolik bylo zaškrutných checkboxů akorát tam vložit odvetvi_id jiné. Tzn. že třeba, když zaškrtnu 4 checkboxy, do databáze se uloží 4x to samé, ale bude to mít pokaždé jiné odvetvi_id. Šlo by to tak nějak provést?
dehtak
Profil
Nejak te scela nechapu.
dehtak
Profil
Mozna uz to chapu , u toho html to nech stejne s hranatejma zavorkama

<input type="checkbox" name="odvetvi[]" value="<?=$seznam['odvetvi_id']?>">

potom staci jen vypsat vsechna odvetvi a ulozit do databaze

foreach($_POST['odvetvi'] as $odvetvi){
mysql_query(" INSERT INTO `neco` VALUE($odvetvi)");
}
Joudolol
Profil *
Jojo, přesně tak, akorát ještě z toho odstranit to odvetvi[]. Prostě zapsat do DB jen čistě to číslo. Šlo by to?
dehtak
Profil
Joudolol:
vzdyt o to se stara foreach ty hranate zavorky tam jsou kvuli vytvoreny array pole
while($seznam=mysql_fetch_array($dbv)){
echo "<input type='checkbox' name='odvetvi[]' value='".$seznam['odvetvi_id']."'> ".$seznam['nazev']."<br>"; 
}
$_POST['odvetvi'] =  Array ( [0] => 23 [1] => 5 [2] => 18 ) ;


Array ( [0] => 23 [1] => 5 [2] => 18 ) , tim foreach ziskas jenom ty Id 23, 5, 18 a ty id ulozis

schvalne jsem ti napsal script k odskouseni jen ho zkopiruj a vyskousej , akorad misto echo $o das ulozeni do databaze
mysql_query(" INSERT INTO `neco` VALUE($o)");
<form action="<?=$PHP_SELF?>" method="POST">
 <?php
 for ($i=0; $i<=5; $i++){
 echo  "<input type='checkbox' name='odvetvi[]' value='$i'> $i<br>";
 }
 echo "<input type='submit' name='send' value='send'>";
?>
</form>

<?php
 if (isset($_POST['send']) && $_POST['odvetvi']){
        
         foreach ($_POST['odvetvi'] as $o){
         echo $o."<br />";
         }
         
 }
?>
Joudolol
Profil *
Dobře, už to alespoň trochu chápu. Takže, vrátím se k tomu jak jsi psal to implode a explode, imploduju to a uložím do DB. Pak to exploduju a např. do query dám SELECT ... FROM ... WHERE odvetvi = '7'
V DB bude uloženo pod odvetvi 1|6|2|3|7. Vybere mi to nebo to nevybere?
dehtak
Profil
jak ti to vysvetlit , mas dejme tomu 2 tabulky , jedna je odvetvi obsahuje sloupce id a obsah
druha je seznam a obsahuje sloupce id_odvetvi a treba taky nakej text.
1 reseni
Z ty tabulky seznam chces vypsat vsechna odvetvi , takze musis vypsat z tabulky seznam id_odvetvi explodovat a funkci foreach
vypsat z tabulky odvetvi obsah.

nebo 2 reseni
vypsat nekolikrat tabulku seznam s id_odvetvi a tim pak vypsat z tabulky odvetvi obsah

Podle mne je 1 reseni lepsi.
Vypis z databaze podle druhyho reseni lze udelat i spojovanim tabulek
mysql_query(SELECT * FROM odvetvi, seznam WHERE seznam.id=1 AND odvetvi.id=seznam.odvetvi_id );
Joudolol
Profil *
Dobře, jdu to zkusit....
panther
Profil
dehtak:
není moc dobrý nápad cokoliv z pole spojovat do jednoho stringu pomocí nějakých oddělovačů.

Joudolol:
každou položku toho pole (každý checkbox) ukládej do tabulky do samostatného řádku (id | hodnota), případně si ukládej jen ta ID, kde je hodnota == 1, nuly můžeš ignorovat.
Joudolol
Profil *
V DB mám tenhle zápis v odvetvi_id : 2|3|9
Když přímo v PHPMyAdmin do SQL napíšu SELECT * FROM ... WHERE odvetvi_id = '2'
Vypíše: nulový počet výsledků
Joudolol
Profil *
panther:
Rád bych, ale spíš bych to potřeboval napsat, psal jsem, že vůbec netuším jak to zde rozdělit nějak, prostě nevím .. byl bych vděčný, kdybys mi to alespoň ukázal na nějakém příkladu prosím..
xmark
Profil
Joudolol:
nepotřebuješ náhodou toto?

tabulka clanky
ID ... nazev .. neco .. atd

tabulka odvetvi
ID ... nazev

tabulka prirazeni
IDclanku ... IDodvetvi
dehtak
Profil
Joudolol:
udelej to takhle , i kdyz podle mne je to blby, reseni 2
 if (isset($_POST['send']) && $_POST['odvetvi']){
        
         foreach ($_POST['odvetvi'] as $o){
         mysql_query("INSET INTO seznam  ('id_odvetvi',id_seznam) VALUE('$o', 'id_seznamu s obsahem') ");
         }
 }

$result = mysql_query ("SELECT id FROM seznam WHERE id=1");
while($row=mysql_fetch_array($result)){
$row2=mysql_fetch_array(mysql_query ("SELECT * FROM seznam,odvetvi WHERE seznam.id_seznam=$row['id'] AND odvetvi.id= seznam.odvetvi_id"));
}

budes muset ukladat i id_seznamu, pokud mas i v seznamu nakej obsah abys ho nemusel 50x ukladat do tabulky i s id_odvetvim

podle 1 reseni by to bylo takto
 if (isset($_POST['send']) && $_POST['odvetvi']){
 $odvetvi_id = implode("|",$_POST['odvetvi']);
  mysql_query("INSET INTO seznam(id_odvetvi) VALUE($odvetvi_id) ");
 }

$row=mysql_fetch_array( mysql_query ("SELECT * FROM seznam WHERE id=1"));
$id_odvetvi = explode("|", $row['id_odvetvi']);
foreach ($id_odvetvi as $id ){
$row2=mysql_fetch_arra(mysql_query ("SELECT * FROM odvetvi WHERE id=$id "));
}

min to zatezuje databazi
dehtak
Profil
panther:
ní moc dobrý nápad cokoliv z pole spojovat do jednoho stringu pomocí nějakých oddělovačů.
pokud se jedna o id je to jedno, jemu jde o spojovani tabulek , jak jsem tak nejak pochopil. takze neni dobry ukladat do tabulky seznam
20x id odvetvi , tim padem by musel but ukladat do tabulky seznam i ten obsah nebo by musel vytvorit dalsi sloupec id_seznam
dehtak
Profil
Joudolol:
V DB mám tenhle zápis v odvetvi_id : 2|3|9
Když přímo v PHPMyAdmin do SQL napíšu SELECT * FROM ... WHERE odvetvi_id = '2'
Vypíše: nulový počet výsledků

Jasne ze 0 pocet vysledku to bys v tom radku musel mit pouze cislo 2 ale ty tam mas vice cisel, to reseni jsem uz napsal,

$row=mysql_fetch_array( mysql_query ("SELECT * FROM nevim_co WHERE id=1"));
$id_odvetvi = explode("|", $row['id_odvetvi']);
foreach ($id_odvetvi as $id ){
$row2=mysql_fetch_arra(mysql_query ("SELECT * FROM odvetvi WHERE id=$id "));
}
panther
Profil
dehtak:
už vidíš, proč je nesmysl ukládat vše do jednoho řádku s oddělovačem?

Dejme tomu, že uložím 10 hodnot oddělených „|“. K získání dat pak budu potřebovat 11! SQL dotazů. Přijde ti to normální. Mě moc ne.

Směr, jakým Joudolola navádíš, je ten nejhorší možný.
Joudolol
Profil *
Díky všem za pomoc, už jsem to nějak skloubil, smícháním mých vědomostí a všech skriptů, co jsou zde. Ke všemu mi to ještě vysvětlil AM, za což mu také děkuji.

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:

0