Autor Zpráva
Pavel015
Profil
Dobrý večer.

Potřeboval bych poradit s vkládáním dat do databáze pomocí pole.
DB struktura:
id -.- jmeno -.- vek

Z jecas.cz ( Přidání dalšího textového pole) mám tento formulář:
<form>
    <div class="polozky" id="polozky">
        <div class="polozka" id="sablona">
            <label>Jméno: <input type="text" name="policko1[]" placeholder="Zadejte jméno"></label>
            <label>Věk: <input type="number" name="policko2[]" value="20" size="4"></label>
            <label>VIP: <input type="checkbox" name="checkbox[]"></label>
            
            <button class="odebrat" onclick="odebrat(this)">× Odebrat</button>
        </div>
    </div>
    <button type="button" onclick="pridatPole()">+ Přidat</button>
</form>
<script>
var prvniPolozka = document.getElementById('sablona');
var sablona = prvniPolozka.cloneNode(true);

function pridatPole() {
    var kopie = sablona.cloneNode(true);
    document.getElementById('polozky').appendChild(kopie);
    kopie.getElementsByTagName("input")[0].focus();
}

function odebrat(el) {
    var polozka = el.parentNode;
    polozka.parentNode.removeChild(polozka);
}
</script>

Nevíte, prosím, jak docílím toho, aby se vyplněné inputy dostaly do db?
Moc děkuji a přeji příjemný večer.
mckay
Profil
Pavel015:
V prvé řadě nejspíš přidáním atributů action a method do elementu <form> s hodnotou odpovídající php skriptu, který vytvoříte a který se o uložení hodnot do databáze postará, a s hodnotou buď get/post - dle Vašich preferencí, hodnota post je ale subjektivně vhodnější.

Ptáte-li se na to, jak docílíte toho, aby bylo možné k hodnotám přistupovat, když není zjevné, kolik jich celkem bude - doporučuji pro lepší představu ve zpracujícím php skriptu vypsat var_dump($_POST);, předvyplnit formulář a odeslat ho. V principu budete mít pole hodnot pro policko1, policko2 a checkbox, nad nimi pustíte nějaký cyklus a předpřiravíte si dotaz, co budete posílat.
Pavel015
Profil
mckay:
Dobře, mám to upravené takto, ale jak to teď vložím do db, prosím?

<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
<?php
    include 'connect.php';

var_dump($_POST);
    
    
    
?>
<form method="post">
    <div class="polozky" id="polozky">
        <div class="polozka" id="sablona">
            <label>Jméno: <input type="text" name="policko1[]" placeholder="Zadejte jméno"></label>
            <label>Věk: <input type="number" name="policko2[]" value="20" size="4"></label>
            <label>VIP: <input type="checkbox" name="checkbox[]"></label>
            
            <button class="odebrat" onclick="odebrat(this)">× Odebrat</button>
        </div>
    </div>
    <button type="button" onclick="pridatPole()">+ Přidat</button>
  <br><br><br><br><br>
    
    <input type="submit">
</form>
<script>
var prvniPolozka = document.getElementById('sablona');
var sablona = prvniPolozka.cloneNode(true);
 
function pridatPole() {
    var kopie = sablona.cloneNode(true);
    document.getElementById('polozky').appendChild(kopie);
    kopie.getElementsByTagName("input")[0].focus();
}
 
function odebrat(el) {
    var polozka = el.parentNode;
    polozka.parentNode.removeChild(polozka);
}
</script>
</body>
</html>
mckay
Profil
Pavel015:

Toto Vám teď řekne, jak vypadá pole, které přijímáte a máte zpracovat. To využijete k tomu, abyste sestavil odpovídající skript, který to bude umět. Psát to za Vás nebudu (a pravděpodobně to neudělá ani nikdo jiný, kdo si alespoň trochu Váží svého času).

Podívejte se na to, jak fungují cykly foreach a for. Těmi si připravíte data, která chcete vkládat do databáze. Pak budete potřebovat vědět, jak se píší SQL dotazy, konkrétně INSERTy.

Algoritmicky pak:
1. Připojení se k databázi
2. Zaslání dotazů k vykonání
3. Ověření úspěchu operace a případné informování o chybě.
4. Ukončení spojení s databází.

Samozřejmě před tím, než něco takového nasadíte do produkce budete muset zajistit ošetření uživatelského vstupu a další podobné věci.
Pavel015
Profil
mckay:
Spíš neumím použít ten foreach... Mám vkládání do všechny body, co jste napsal, jen "neumím nechat projet všechny pole, aby se uložily"...
Poradíte?
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <style>
        body {
            font-family: 'Geneva CE', sans-serif;
            font-size: 18px;
        }
    </style>
</head>
<body>
<?php
    include('connect.php');

    if(isset($_POST["jmeno"])){
        if($_POST["jmeno"]=="") { echo "<h3>Zadej jmeno</h3>";}
        else if($_POST["vek"]=="") { echo "<h3>Zadej vek</h3>";}
        
    
else  {
    
    
    $dotaz = "INSERT INTO lide (jmeno,vek,vip) VALUES ('{$_POST["policko1[]"]}', '{$_POST["policko2[]"]}', '{$_POST["checkbox[]"]}');";
    if (mysqli_query($spojeni,$dotaz)) {echo "<h2>Data byla vložena.</h2>";}
    else {
        {echo "<h2>Data nebyla vložena.</h2>";}
}
}
    }
    
    
    
?>
<form method="post">
    <div class="polozky" id="polozky">
        <div class="polozka" id="sablona">
            <label>Jméno: <input type="text" name="policko1[]" placeholder="Zadejte jméno"></label>
            <label>Věk: <input type="number" name="policko2[]" value="20" size="4"></label>
            <label>VIP: <input type="checkbox" name="checkbox[]"></label>
            
            <button class="odebrat" onclick="odebrat(this)">× Odebrat</button>
        </div>
    </div>
    <button type="button" onclick="pridatPole()">+ Přidat</button>
      <br><br><br><br>  <input type="submit" value="Uložit">
</form>
<script>
var prvniPolozka = document.getElementById('sablona');
var sablona = prvniPolozka.cloneNode(true);

function pridatPole() {
    var kopie = sablona.cloneNode(true);
    document.getElementById('polozky').appendChild(kopie);
    kopie.getElementsByTagName("input")[0].focus();
}

function odebrat(el) {
    var polozka = el.parentNode;
    polozka.parentNode.removeChild(polozka);
}
</script>
</body>
</html>

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: