Vkládání více možností z formuláře do databáze – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Vkládání více možností z formuláře do databáze – PHP – Fórum – Programujte.comVkládání více možností z formuláře do databáze – PHP – Fórum – Programujte.com

 

divady
~ Anonymní uživatel
21 příspěvků
29. 3. 2014   #1
-
0
-

dobrý den, mam formulář kde ma checkbox kde uživatel muže zaškrtnou více možností na jednou 
ale do databáze se mi zapíše pouze jen poslední, nevíte jak bych toto mohl vyřešit 
tady je ta část formuláře 

<TD COLSPAN=3><input type="checkbox" name="druh_oken" value="stavba" checked> Stavba
        <input type="checkbox" name="druh_oken" value="rekonstrukce"> Rekonstrukce
        <input type="checkbox" name="druh_oken" value="okna"> Okna,dveře
        <input type="checkbox" name="druh_oken" value="projekty"> Projekty

a tady php

 $sql->query("INSERT INTO poptavky SET  druh_oken='$_POST[druh_oken]'"); 

v databázi mam ma sloupec druh_oken udělanej jako množinu SET, a v ní vložený možnosti

ale stejně si mi uloží pouze jen poslední možnost

Nahlásit jako SPAM
IP: 88.101.36.–
z_moravec
~ Redaktor
+3
Posthunter
29. 3. 2014   #2
-
0
-

Všechny checkboxy mají stejné označení, proto se odešle pouze ten poslední. Většinou se to řeší pomocí pole:

<TD COLSPAN=3><input type="checkbox" name="druh_oken" value="stavba" checked> Stavba
        <input type="checkbox" name="druh_oken[]" value="rekonstrukce"> Rekonstrukce
        <input type="checkbox" name="druh_oken[]" value="okna"> Okna,dveře
        <input type="checkbox" name="druh_oken[]" value="projekty"> Projekty
Nahlásit jako SPAM
IP: 46.39.170.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
divady
~ Anonymní uživatel
21 příspěvků
29. 3. 2014   #3
-
0
-

#2 z_moravec
to jsem udělal, Hádám že ty závorky urcují množinu.

ale buhužel to nefunguje, ted si mi vc databázi neukáže nic,nemam ještě něco udělat s tim PHP skriptem?

Nahlásit jako SPAM
IP: 88.101.36.–
z_moravec
~ Redaktor
+3
Posthunter
29. 3. 2014   #4
-
0
-

#3 divady
Jasně, že je nutné upravit i PHP, třeba takto:

 $sql->query("INSERT INTO poptavky SET  druh_oken='" . Implode(',', $_POST[druh_oken]) . "'");


Dál je také nutné ošetřit vstupy ,apod.

Nahlásit jako SPAM
IP: 46.39.170.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Kit+15
Guru
29. 3. 2014   #5
-
0
-

#3 divady
Zkus si pomocí funkce print_r() vypsat, co jsi vlastně přijal a podle toho uprav ten SQL dotaz.  

<?php
$insert = $sql->query("INSERT INTO poptavky SET druh_oken=?");
$insert->execute(array(implode(',', $_POST[druh_oken])));
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
divady
~ Anonymní uživatel
21 příspěvků
29. 3. 2014   #6
-
0
-

ja jsem to zkoušel vyřešit takto, 

 function rozdelpole($pole,$nazev)
  {
if (isSet($pole)):
 $vysledek = $nazev."='";
   while (List($index, $hodnota) = Each ($pole))
{$vysledek .= "$hodnota";
if ($index<Count($pole)-1) $vysledek .=",";
}
$vysledek .= "', ";
return $vysledek;
else:
$vysledek = $nazev."='',";
return $vysledek;
endif;
  }

a pak dát

$sql->query("INSERT INTO poptavky SET .$this->rozdelpole($_POST[druh_oken],"druh_oken").");

ale nic se nenáhralo stejně jako u imlode

Nahlásit jako SPAM
IP: 88.101.36.–
Kit+15
Guru
30. 3. 2014   #7
-
0
-

#6 divady
A proč jsi tam nechal to SQL injection?

Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
30. 3. 2014   #8
-
0
-

#6 divady
Mně to šlape jak hodinky: 

<?php
header('Content-Type: text/html;charset=UTF-8');
$pdoptions = array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
);
$db = new PDO("mysql:host=localhost;dbname=test", null, null, $pdoptions);
$db->query("DROP TABLE IF EXISTS poptavka");
$db->query(<<<EOT
CREATE TABLE poptavka (
    id integer primary key auto_increment,
    druh_oken set('stavba', 'rekonstrukce', 'okna', 'projekty')
)
EOT
);
if (isset($_POST['druh_oken'])) {
    $insert = $db->prepare("INSERT INTO poptavka SET druh_oken=?");
    $insert->execute(array(implode(',', $_POST['druh_oken'])));
}
?>
<form method="POST">
<input type="checkbox" name="druh_oken[]" value="stavba" checked> Stavba<br>
<input type="checkbox" name="druh_oken[]" value="rekonstrukce"> Rekonstrukce<br>
<input type="checkbox" name="druh_oken[]" value="okna"> Okna,dveře<br>
<input type="checkbox" name="druh_oken[]" value="projekty"> Projekty<br>
</form>
<?php
echo "<ul>";
foreach ($db->query('SELECT * FROM poptavka', PDO::FETCH_ASSOC) as $row) {
    echo "<li>$row[id]: " . htmlspecialchars($row['druh_oken']) . "</li>";
}
echo "</ul>";
Nahlásit jako SPAM
IP: 46.174.34.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý