Autor | Zpráva | ||
---|---|---|---|
Manny Profil |
#1 · Zasláno: 13. 2. 2017, 21:31:52
Pokusím se vysvětlit problém.
Mám formulář, ve kterém potřebný počet inputů přidávám pomocí js. něco takového <input type="text" name="pole[]" value="">
Po odeslání formu mám v poli pouze 1 index. Mohou na to mít vliv inputy vytvořené js nebo jsem něco přehlédl? |
||
Taps Profil |
#2 · Zasláno: 13. 2. 2017, 21:41:41
Manny:
ukaž kód,který zpracováváš odeslaná data. |
||
_es Profil |
Manny:
„Mám formulář, ve kterém potřebný počet inputů přidávám pomocí js.“ Hodilo by sa aj vedieť, ako presne a do akého formulára ich pridávaš. |
||
Manny Profil |
Input v tomto tvaru
<div class="parametr" id="sablona"><label>Parametr produktu: <input type="text" name="pole[]" value=""></label></div> <button type="button" onclick="pridatPole()">+ Přidat parametr</button> přidáván touto funkcí <script>var prvniPolozka = document.getElementById(\'sablona\'); var sablona = prvniPolozka.cloneNode(true);</script> function pridatPole() { var kopie = sablona.cloneNode(true); document.getElementById('parametry').appendChild(kopie); kopie.getElementsByTagName("input")[0].focus(); } Následně celý form i s ostatními inputy odesílám jako POST
Takže přepokládám, že příslušnou sadu budu mí k dispozici v $_POST["pole"]
Jenže po kontrolním print_r($_POST["pole"]); je v poli pouze obsah 1. inputu, který je vypsán serverem při načítání stránky.
Je to tak, že inputy vypsané serverem se přenáší, ale klonované js ne. |
||
Taps Profil |
#5 · Zasláno: 15. 2. 2017, 10:28:22
Manny:
Podle mě ten js kod, nemáš správně napsán. Zkus toto var prvniPolozka = document.getElementById('sablona'); var sablona = prvniPolozka.cloneNode(true); function pridatPole() { var kopie = sablona.cloneNode(true); document.getElementById('sablona').appendChild(kopie); kopie.getElementsByTagName("input")[0].focus(); } |
||
Manny Profil |
#6 · Zasláno: 15. 2. 2017, 10:39:35
Taps:
Jo, byla tam chybka, ale stejně to pole nevytváří |
||
_es Profil |
#7 · Zasláno: 15. 2. 2017, 11:01:21
Manny:
„Je to tak, že inputy vypsané serverem se přenáší, ale klonované js ne.“ Tak to ich asi „klonuješ“ nejako nesprávne. Tipujem, že asi mimo formulára. Vytvor „živú ukážku“ s celým HTML dokumentom, tak, ako ho dostane prehliadač. A/alebo tu daj celý kód formulára a JS kód na pridanie inputu - ale len ak to nie je príliš dlhé. |
||
Manny Profil |
_es:
„Tak to ich asi ‚klonuješ‘ nejako nesprávne. Tipujem, že asi mimo formulára“ To si myslím, že ne. onclick="pridatPole()" je ve formuláři
„ak to nie je príliš dlhé.“ no právě. Form je poměrně obsáhlý + obslužný kód. Ale zkusím to nějak očesat. asi totok. (je to dost promazané a rozvrtané) proměnná z ř. 43 se vkládá na ř. 86 if(isset($_POST["title"])) { if(empty($_POST["title"])) $zprava = 'Není vyplněný titulek stránky'; elseif(empty($_POST["id"])) ////////////////////////////////////////////Nová stránka { $title = mysqli_real_escape_string($spojeni,$_POST["title"]); if(empty($_POST["parametr"])) $parametr = diakritika($title); else $parametr = diakritika(mysqli_real_escape_string($spojeni,$_POST["parametr"])); $keywords = mysqli_real_escape_string($spojeni,$_POST["keywords"]); $description = mysqli_real_escape_string($spojeni,$_POST["description"]); $content = mysqli_real_escape_string($spojeni,$_POST["editor1"]); $urldir = mysqli_real_escape_string($spojeni,$_POST["urldir"]); $thumb = mysqli_real_escape_string($spojeni,$_POST["thumb_path"]); print_r($_POST["par"]); exit; $cena1 = mysqli_real_escape_string($spojeni,$_POST["cena1"]); $cena2 = mysqli_real_escape_string($spojeni,$_POST["cena2"]); $cena3 = mysqli_real_escape_string($spojeni,$_POST["cena3"]); $komcena1 = mysqli_real_escape_string($spojeni,$_POST["komcena1"]); $komcena2 = mysqli_real_escape_string($spojeni,$_POST["komcena2"]); $komcena3 = mysqli_real_escape_string($spojeni,$_POST["komcena3"]); $vysledek = mysqli_query($spojeni,"INSERT INTO ".PREFIX."obsah (ord, title, keyword, description, content, type) VALUES ('1', '$title', '$keywords', '$description', '$content', '11')"); if (!$vysledek) die (mysqli_error($spojeni)); //ukládání header("Location: ".$_SERVER["PHP_SELF"].'?str=produkty&zpr=2'); } else { if(!$_GET["id"]) //není ID -> nová stránka { $strana["id"] = 0; $id = false; $paramprint = '<div class="parametr" id="sablona"><label>Parametr produktu: <input type="text" name="par[]" value=""></label><button class="odebrat" onclick="odebrat(this)"> Odebrat</button></div>'; $nadpis = '<h2>Nový produkt</h2>'; } if ($id) { $path = '../upload/produkty/'.$strana["parametr"]; if(is_dir($path) != false) { $countItems = count(array_diff(scandir($path),array('..','.','Thumbs.db','.htaccess','.thumbs'))); $sumaItems = ($countItems != false) ? $countItems : '0' ; $galleryInfo = 'Ve fotogalerii je '.$sumaItems.' obrázků'; } else $galleryInfo = 'Fotogalerie je zatím prázdná'; } else $galleryInfo = 'Fotogalerie je zatím prázdná'; $print .= $nadpis.$zprava.'<div id="contentleft">'; $print .= '<fieldset><legend >'.$galleryInfo.'</legend>'.$uplmessage.'<a id="upload" href="#" onclick="zmenaTridy(document.getElementById(\'uplform\'), \'nezobrazena\',\'zobrazena\');return false">Nahrát obrázky</a> <form id="uplform" class="nezobrazena" action="'.$_SERVER["PHP_SELF"].'?str=produkt&id='.$strana["id"].'" method="POST" ENCTYPE="multipart/form-data"> <input type="file" onclick="return getTitle();" name="obrazky[]" multiple="multiple"> <input type="hidden" name="page_title" id="page_title" value=""> <input type="hidden" name="id_page" value="'.$strana["id"].'"> <button type="submit"><i class="fa fa-check-square-o fa-lg" aria-hidden="true"></i> Nahrát</button></form></fieldset> <form name="produkt" action="" method="POST"> <a href="#" onclick="zmenaTridy(document.getElementById(\'meta\'), \'nezobrazena\',\'zobrazena\');return false" class="click">Další meta informace</a> <fieldset id="meta" class="nezobrazena"> <em class="tooltip"><span class="tooltext"><a href="napoveda.html#identifikator" onclick="noveOkno(this.href,\'okno\',\'500\',\'300\',\'yes\'); return false" title="Do návodu k obsluze"><img src="icons/help.png" alt="Nápověda"></a>'.pageid.'</span>Identifikátor</em> <input type="text" name="parametr" value="'.$strana["parametr"].'" placeholder="Identifikátor"> <em class="tooltip"><span class="tooltext"><a href="napoveda.html#keywords" onclick="noveOkno(this.href,\'okno\',\'500\',\'300\',\'yes\'); return false" title="Do návodu k obsluze"><img src="icons/help.png" alt="Nápověda"></a>'.keywords.'</span>Klíčová slova</em> <input type="text" name="keywords" value="'.$strana["keyword"].'"> <em class="tooltip"><span class="tooltext"><a href="napoveda.html#description" onclick="noveOkno(this.href,\'okno\',\'500\',\'300\',\'yes\'); return false" title="Do návodu k obsluze"><img src="icons/help.png" alt="Nápověda"></a>'.description.'</span>Popisek stránky</em> <textarea name="description">'.$strana["description"].'</textarea></fieldset>'; $print .= '<input type="hidden" name="id" value="'.$strana["id"].'"><input type="hidden" name="action" value="-1"> </div> <div id="content"> <fieldset><legend class="dulezite">Název produktu</legend><input type="text" name="title" id="title_p" value="'.$strana["title"].'" placeholder="Vyplňte název a nahrajte obrázky..."></fieldset> <fieldset><legend>Technické parametry produktu (max. 6 parametrů)</legend> <div id="parametry">'.$paramprint.' </div> <button type="button" onclick="pridatPole()">+ Přidat parametr</button> </fieldset> <textarea name="editor1" rows="40" cols="50" class="ckeditor" >'.$strana["content"].'</textarea></div>'; $print .= '<button type="submit" id="fixed"><i class="fa fa-check-square-o fa-lg" aria-hidden="true"></i>Uložit změny</button></form>'; } $print .= '<script>var prvniPolozka = document.getElementById(\'sablona\'); var sablona = prvniPolozka.cloneNode(true);</script>'; echo $print; |
||
Manny Profil |
#9 · Zasláno: 15. 2. 2017, 12:21:27
ještě připomenu, že js funkce se vkládá samostatně a je popsaná výše
|
||
_es Profil |
#10 · Zasláno: 15. 2. 2017, 12:39:53
Manny:
Požiadavka z [#7] je snáď dosť zrozumiteľná, viď aj Povídání o živých ukázkách. Čo s tým v [#8] má potenciálny radca asi tak spraviť? ([#7]: „Vytvor „živú ukážku“ s celým HTML dokumentom, tak, ako ho dostane prehliadač.“ [#7]) |
||
Manny Profil |
#11 · Zasláno: 15. 2. 2017, 13:04:45
|
||
_es Profil |
Manny:
Tipoval som správne, pridané inputy sú mimo formulára, skontroluj si, ako sú inputy pridávané, JS kód máš príliš neprehľadný a na rôznych miestach. Pridanie inputov v JS normálne funguje, viď Živá ukázka, môžeš si to overiť v adrese po odoslaní. |
||
Manny Profil |
#13 · Zasláno: 15. 2. 2017, 15:30:33
Nechápu jaktože mám form name=produkt uzavřený už v levém divu, když v scriptu je ukončovací značka až za odesílacím buttonem.:-(
|
||
_es Profil |
#14 · Zasláno: 15. 2. 2017, 15:53:13
Skontroluj si všetky vygenerované počiatočné aj koncové HTML značky. Malý tip: nesnažíš sa niekam dať niečo, čo tam nepatrí, viď Jak funguje HTML?
|
||
Manny Profil |
Všechny značky jsou OK. Dělá to ten druhý form name=uplform. Pokud ho smažu, všechno funguje. Přitom oba formy nekřížím. Jsou po sobě.
Už to jede. Bylo to divem, který zahrnoval oba formy |
||
Manny Profil |
#16 · Zasláno: 16. 2. 2017, 11:59:37
Ještě malé doladění.
V případě, že server vygeneruje z databíze inputů víc a s obsahem, přidání dalšího prostřednictvím js dojde mezi ostatní inputy a s obsahem 1. inputu. Šlo by to přidávat na konec a s prázdným value
něco jako kopie.getElementsByTagName("input").value = '';
|
||
Časová prodleva: 6 let
|
0