Odolsanie dat do db – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Odolsanie dat do db – PHP – Fórum – Programujte.comOdolsanie dat do db – PHP – Fórum – Programujte.com

 

jurinecko
~ Anonymní uživatel
24 příspěvků
15. 11. 2009   #1
-
0
-

Ako odošlem dáta do db ak ma užívateľ možnosť označiť viac položiek.Mne totiž odošle iba prvú označenú.



<select name="zoznam" size="3" multiple>
<option value="polozka1">polozka1</option>
<option value="polozka2">polozka2</option>
<option value="polozka3">polozka3</option>
</select>

Nahlásit jako SPAM
IP: 78.99.175.–
z_moravec
~ Redaktor
+3
Posthunter
15. 11. 2009   #2
-
0
-

<select name="zoznam[]" size="3" multiple>

<option value="polozka1">polozka1</option>
<option value="polozka2">polozka2</option>
<option value="polozka3">polozka3</option>
</select>


Přijde ti to jako pole $zoznam

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
jurinecko
~ Anonymní uživatel
24 příspěvků
15. 11. 2009   #3
-
0
-

nejako mi to vkladanie multiple nefunguje, tu je cely kod ako to mam urobene



<?php
include('connect.php');
if (isset($_POST['zoznam_mu']))
{
$sql_prikaz = "INSERT INTO zaznamy(mesta) VALUES('".mysqli_real_escape_string($db_spojenie,$_POST['mesta[]'])."')";
$pridaj = mysqli_query ($db_spojenie, $sql_prikaz);
if (!$pridaj)
{
echo 'Odoslanie udajov sa nepodarilo';
echo '';
echo 'Popis chyby: '.mysqli_error($db_spojenie);
exit();
}
echo 'Novy zaznam bol pridany';
}
?>
<form action="pridaj.php" method="post" name="zaznamy">
<select name="mesta[]" size="3" multiple>
<option value="zaznam1">zaznam1</option>
<option value="zaznam2">zaznam2</option>
<option value="zaznam3">zaznam3</option>
<option value="zaznam4">zaznam4</option>
</select>
<input name="submit" type="submit" />
</form>

Nahlásit jako SPAM
IP: 78.99.175.–
z_moravec
~ Redaktor
+3
Posthunter
15. 11. 2009   #4
-
0
-

Přečti si znovu můj minulý příspěvek.

Nic takového $_POST['mesta[]'] nedostaneš. Dostaneš pole $_POST['mesta']

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
wise0
Stálý člen
15. 11. 2009   #5
-
0
-

<select name="mesta[]" size="3" multiple>
<option value="zaznam1">zaznam1</option>
<option value="zaznam2">zaznam2</option>
<option value="zaznam3">zaznam3</option>
<option value="zaznam4">zaznam4</option>
</select>

Pokud budeš mít například označený záznam1 a záznam2,
pak prvky pole mesta[0] a mesta[1] budou na "true"(? vybrané, zvolené ?).

(nevzpomínám si teď přesně jak se zjistí vybrání víc položek v selectu. Nikdy jsem to nepotřeboval)

Nahlásit jako SPAM
IP: 89.176.199.–
"Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód..."
z_moravec
~ Redaktor
+3
Posthunter
15. 11. 2009   #6
-
0
-

To wise : Dostaneš pole $mesta, kde budou hodnoty vybraných option. Pořadí v jakém byly zapsány v HTML nehraje roli. Takže pokud vybereš první a třetí položku v příkladu, dostaneš:



$mesta[0] = 'zaznam1';
$mesta[1] = 'zaznam3';

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
jurinecko
~ Anonymní uživatel
24 příspěvků
15. 11. 2009   #7
-
0
-

To z_moravec :

Ked to urobim takto:



<?php
include('connect.php');
if (isset($_POST['zoznam_mu']))
{
$sql_prikaz = "INSERT INTO zaznamy(mesta) VALUES('".mysqli_real_escape_string($db_spojenie,$_POST['mesta'])."')";
$pridaj = mysqli_query ($db_spojenie, $sql_prikaz);
if (!$pridaj)
{
echo 'Odoslanie udajov sa nepodarilo';
echo '';
echo 'Popis chyby: '.mysqli_error($db_spojenie);
exit();
}
echo 'Novy zaznam bol pridany';
}
?>
<form action="pridaj.php" method="post" name="zaznamy">
<select name="mesta[]" size="3" multiple>
<option value="zaznam1">zaznam1</option>
<option value="zaznam2">zaznam2</option>
<option value="zaznam3">zaznam3</option>
<option value="zaznam4">zaznam4</option>
</select>
<input name="submit" type="submit" />
</form>


sice mi vypise ze zaznam bol odoslany,ale vypise aj chybu a ked sa pozriem do db,tak mi prida prazdny riadok.
Warning: mysqli_real_escape_string() expects parameter 2 to be string, array given in C:\xampplite\htdocs\www\sitina\pridaj.php on line 5

Nahlásit jako SPAM
IP: 78.99.175.–
wise0
Stálý člen
16. 11. 2009   #8
-
0
-

To z_moravec : to sem chtěl vědět :) byl sem línej si to vyzkoušet. Díky

To jurinecko : funkce mysqli_real_escape_string() očekává jako svůj 2. parametr string, kdežto ty mu předáváš array (pole).

Pokud chceš do sloupce města přidat text, resp. hodnoty, které byly vybrané, udělal bych to tak, že si do proměnný uložím, které hodnoty byly zvoleny.

Pomocí if:



if($mesta[0] == 'zaznam1') $Smesta = 'zaznam1; ';
if($mesta[1] == 'zaznam2') $Smesta = 'zaznam2; ';
if($mesta[2] == 'zaznam3') $Smesta = 'zaznam3; ';
if($mesta[3] == 'zaznam4') $Smesta = 'zaznam4; ';

// při zvolení všech bys dostal:
$Smesta = 'zaznam1; zaznam2; zaznam3, zaznam4;';


a při zpracování bys použil např. explode...

ale když nevíš kolik bude záznamů, nebo resp. jich je hodně,
můžeš použít cyklus:



foreach($mesta as $value){
if(!empty($value))
$Smesta .= $value . '; ';
}

// výsledek je stejný, ale pokud bys měl např. 100 prvků pole, pak bych ti nepřál psát to přes if

Nahlásit jako SPAM
IP: 89.176.199.–
"Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód..."
d.mostek0
Návštěvník
16. 11. 2009   #9
-
0
-

Ještě by bylo dobrý kontrolovat to co ti přijde, jestli je to opravdu to co chceš. Tedy vytvořit pole a kontrolovat, jestli existuje prvek s názvem toho města, co ti přišlo z formuláře. Protože nějaká hračička si může tvojí stránku uložit na disk pozměnit si ten formulář a odesílat ti nesmysly.

Nahlásit jako SPAM
IP: 88.146.211.–
www.dominik-mostek.cz
jurinecko
~ Anonymní uživatel
24 příspěvků
19. 11. 2009   #10
-
0
-

Takže urobil som to takto,ale problém je v tom že do databázy mi vloží len poslednú z vybraných hodnôt t.j. ak označím všetky hodnoty, tak do db mi vloží len zaznam4.Na kontrolu som si dal premennú $mesta_hodnota vypísať a vypíše mi všetky označené hodnoty.
Neviete kde by mohla byť chyba?

<?php 

include('connect.php');
if (isset($_POST['mesta']))
{
foreach ($_POST['mesta'] as $mesta_hodnota)
echo "$mesta_hodnota<br>";

$sql_prikaz = "INSERT INTO zaznamy(mesta) VALUES('".mysqli_real_escape_string($db_spojenie,$mesta_hodnota)."')";
$pridaj = mysqli_query ($db_spojenie, $sql_prikaz);
if (!$pridaj)
{
echo 'Odoslanie udajov sa nepodarilo';
echo '';
echo 'Popis chyby: '.mysqli_error($db_spojenie);
exit();
}
echo 'Novy zaznam bol pridany';
}
?>
<form action="pridaj.php" method="post" name="zaznamy">
<select name="mesta[]" size="3" multiple>
<option value="zaznam1">zaznam1</option>
<option value="zaznam2">zaznam2</option>
<option value="zaznam3">zaznam3</option>
<option value="zaznam4">zaznam4</option>
</select>
<input name="submit" type="submit" />
</form>

Nahlásit jako SPAM
IP: 213.81.134.–
z_moravec
~ Redaktor
+3
Posthunter
19. 11. 2009   #11
-
0
-

To jurinecko : Ono to dělá pouze to co jsi naskriptoval :-)

<?php 

include('connect.php');
if (isset($_POST['mesta']))
{
foreach ($_POST['mesta'] as $mesta_hodnota)
{
echo "$mesta_hodnota<br>";

$sql_prikaz = "INSERT INTO zaznamy(mesta) VALUES('".mysqli_real_escape_string($db_spojenie,$mesta_hodnota)."')";
$pridaj = mysqli_query ($db_spojenie, $sql_prikaz);
if (!$pridaj)
{
echo 'Odoslanie udajov sa nepodarilo';
echo '';
echo 'Popis chyby: '.mysqli_error($db_spojenie);
exit();
}
}
echo 'Novy zaznam bol pridany';
}
?>
<form action="pridaj.php" method="post" name="zaznamy">
<select name="mesta[]" size="3" multiple>
<option value="zaznam1">zaznam1</option>
<option value="zaznam2">zaznam2</option>
<option value="zaznam3">zaznam3</option>
<option value="zaznam4">zaznam4</option>
</select>
<input name="submit" type="submit" />
</form>


Ale lepší je vyhnout používání SQL v cyklu, protože to není výkonově příliš vhodné.

Nahlásit jako SPAM
IP: 147.251.29.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
jurinecko
~ Anonymní uživatel
24 příspěvků
19. 11. 2009   #12
-
0
-

To z_moravec :
A nejaká rada s príkladom ako na to? Je to vstupny formulár a nerád by som tam dával checkbox-y.

Nahlásit jako SPAM
IP: 213.81.134.–
z_moravec
~ Redaktor
+3
Posthunter
19. 11. 2009   #13
-
0
-

Ten kód je opravený, měl by fungovat. Akorát ti chyběly složené závorky u cyklu foreach, proto se uložila pouze jedna hodnota.

Nahlásit jako SPAM
IP: 147.251.29.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
Lordest0
Super člen
19. 11. 2009   #14
-
0
-

-

(preco nejde vymazat post?)

Nahlásit jako SPAM
IP: 78.98.177.–
jurinecko
~ Anonymní uživatel
24 příspěvků
19. 11. 2009   #15
-
0
-

To z_moravec :
Vdaka funguje to, ale ono to vloží do db dva riadky zaznamu.Nedá sa to urobiť tak že by sa neurobili dva riadky,ale vybrané záznamy by sa vložili do jedneho poľa db?

Nahlásit jako SPAM
IP: 213.81.134.–
z_moravec
~ Redaktor
+3
Posthunter
19. 11. 2009   #16
-
0
-

To jurinecko : Dá, ale zkus trochu zapřemýšlet. Opisováním se nic nenaučíš. Ta úprava je jednoduchá.

Nahlásit jako SPAM
IP: 83.240.110.–
Spát lze čtyři hodiny denně, spát déle je nemístný přepych.
Thomas Alva Edison
wise0
Stálý člen
19. 11. 2009   #17
-
0
-

To jurinecko : zkus se trochu zamyslet a příjít na úpravu. Jak uvedl z_moravec, opisováním se nic nenaučíš.

Nahlásit jako SPAM
IP: 89.176.199.–
"Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód..."
jurinecko
~ Anonymní uživatel
24 příspěvků
19. 11. 2009   #18
-
0
-

To z_moravec :
Skúšam,skúšam a nič. Je tam niečo s tým cyklovaním, je to nastavené aby urobilo cyklus celého vkladaného príkazu a to asi treba nejako zmeniť, však?

Nahlásit jako SPAM
IP: 213.81.134.–
wise0
Stálý člen
19. 11. 2009   #19
-
0
-

Dám ti radu. Dej SQL dotaz mimo cyklus.

Nahlásit jako SPAM
IP: 89.176.199.–
"Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód..."
jurinecko
~ Anonymní uživatel
24 příspěvků
19. 11. 2009   #20
-
0
-

Podarilo, vďaka chlapi.
WISE ešte na začiatku si napísal ako urobiť tu podmienku.



<?php

include('connect.php');

if (isset($_POST['mesta']))

{

foreach ($_POST['mesta'] as $mesta_hodnota)
{
if(!empty($mesta_hodnota))

$mesta_hodnota_all .= $mesta_hodnota . '; ';

}
$sql_prikaz = "INSERT INTO zaznamy(mesta) VALUES('".mysqli_real_escape_string($db_spojenie,$mesta_hodnota_all)."')";
$pridaj = mysqli_query ($db_spojenie, $sql_prikaz);
if (!$pridaj)
{
echo 'Odoslanie udajov sa nepodarilo';
echo '';
echo 'Popis chyby: '.mysqli_error($db_spojenie);
exit();
}

echo 'Novy zaznam bol pridany';
}
?>
<form action="pridaj.php" method="post" name="zaznamy">
<select name="mesta[]" size="3" multiple>
<option value="zaznam1">zaznam1</option>
<option value="zaznam2">zaznam2</option>
<option value="zaznam3">zaznam3</option>
<option value="zaznam4">zaznam4</option>
</select>
<input name="submit" type="submit" />
</form>


Nahlásit jako SPAM
IP: 213.81.134.–
wise0
Stálý člen
19. 11. 2009   #21
-
0
-

To jurinecko : já vím, k tomu jsem se tě snažil navést. Hlavně, že je problém vyřešen. Nemáš zač.

Nahlásit jako SPAM
IP: 89.176.199.–
"Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód..."
wise0
Stálý člen
19. 11. 2009   #22
-
0
-

refresh error..delete

Nahlásit jako SPAM
IP: 89.176.199.–
"Život by byl mnohem jednodušší, kdybychom k němu měli zdrojový kód..."
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, 21 hostů

Podobná vlákna

Stoj.dat + 20 = bezi.dat — založil Leopik

Konzistencia dat — založil kandri

Dopocitani dat — založil Pepek7

[C#] Vypis dat z while do c# — založil gledy

SW na obnovení dat — založil Slim

 

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