Autor Zpráva
Manny
Profil
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
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();
}
To funguje
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
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
Taps:
Jo, byla tam chybka, ale stejně to pole nevytváří
_es
Profil
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&amp;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>&nbsp;&nbsp;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
ještě připomenu, že js funkce se vkládá samostatně a je popsaná výše
_es
Profil
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
_es:
to jsem dostal sodu:-))

Tady je to html
_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
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
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
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 = '';

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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