Autor Zpráva
gix
Profil *
Dobrý den,

pomocí jQuery jsem si udělal formulář ve kterém si uživatel "nakliká" libovolný počet textových polí:

<input type="text" name=text_pole1>
<input type="text" name=text_pole2>
<input type="text" name=text_pole3>
...

chtěl bych se zeptat jakým způsobem vložit pomocí php tyto řádky do databáze?

Nechtěl bych to uložit jako kupu informací v poli - "text1,text2,text3", ale každý řádek jako samostatný v databázi - tz. výsledek:
ID TEXT_POLE
1   text1
2   text2
3   text3
...

Kdybych měl pevný počet polí, tak je to jednoduché, ale s neurčitým si zatím neumím poradit. Díky za radu
Alphard
Profil
<input type="text" name="text_pole[]">

foreach ($_POST['text_pole'] as $item)
gix
Profil *
Jo takhle :-) Díky a ještě se zeptám... Když bude situaci o trosku složitější..

<div id="radek1">
    <input type="text" name=jmeno1>
    <input type="text" name=telefon1>
    <input type="text" name=email1>
</div>
<div id="radek2">
    <input type="text" name=jmeno2>
    <input type="text" name=telefon2>
    <input type="text" name=email2>
</div>
<div id="radek3">
    <input type="text" name=jmeno3>
    <input type="text" name=telefon3>
    <input type="text" name=email3>
</div>
...

Jak tohle vložit do databáze v následujícím tvaru?

ID    JMENO    TELEFON    EMAIL
1     jmeno1    telefon1    email1
2     jmeno2    telefon2    email2
3     jmeno3    telefon3    email3
...
Alphard
Profil
Já bych to konstruoval takhle
<input type="text" name="users[line_0][jmeno]">
Je třeba vyplnit si číslo řádku, ale pak jsou data pěkně seskupená.

Alternativně
<input type="text" name="users[jmeno][]">
není třeba nic seskupovat, ale pak je třeba paralelně procházat víc polí.
gix
Profil *
Tak teď jsem se do toho právě zamotal :-)

když budu mít HTML v takovémto tvaru:

<form method="post" action="test.php">
    <div id="radek1">
        Jméno 1: <input type="text" name="users[line_1][jmeno]">
        Telefon 1:<input type="text" name="users[line_1][telefon]">
        Email 1:<input type="text" name="users[line_1][email]">
    </div>
    <div id="radek2">
        Jméno 2: <input type="text" name="users[line_2][jmeno]">
        Telefon 2:<input type="text" name="users[line_2][telefon]">
        Email 2:<input type="text" name="users[line_2][email]">
    </div>
    <div id="radek3">
        Jméno 3: <input type="text" name="users[line_3][jmeno]">
        Telefon 3:<input type="text" name="users[line_3][telefon]">
        Email 3:<input type="text" name="users[line_3][email]">
    </div>
    <input type="submit" value="Vložit do databáze">
</form>

Jak bude vypadat foreach ? Děkuji moc za odpověd.


Zkoušel jsem něco jako:

<?php

// funguje tak jak ma
var_dump($_POST['users']);


// nefunguje
$array = $_POST['users'];

foreach ($array as list($a, $b, $c)) {
    echo "Jméno: $a; Telefon: $b; Email: $c\n";
}

?>

Ale nefunguje - zobrazí chybu - Parse error: syntax error, unexpected 'list' (T_LIST) in C:\wamp\www\System2\test.php on line 28


Podařilo se mi vypsat hodnoty, ale pořád ne a ne je roztřídit:

foreach ($array as $v1) {
    foreach ($v1 as $v2) {
        echo "Hodnota:$v2<br>";
    }
}
Someone
Profil
$temp = array();
foreach($_POST['users'] as $user) {
    $temp[] = "'" . $user['jmeno'] . "','" . $user['telefon'] . "', '" . $user['email'] . "'";
}
$db->query("INSERT INTO table(jmeno,telefon,email) VALUES(" . implode("),(",$temp) . ")");

Nezapomeň na patřičné escapování.
...
Profil *
Díky za odpověd.

Nahlásilo mi to chybu na tomto řádku:

$db->query("INSERT INTO users(jmeno,telefon,email) VALUES(" . implode("),(",$temp) . ")");

Konkrétně
Notice: Undefined variable: db in C:\wamp\www\System2\test4.php on line 31
 Fatal error: Call to a member function query() on a non-object in C:\wamp\www\System2\test4.php on line 31

Chápu, že je asi něco s (" . implode("),(",$temp) . ") ale nemůžu přijít na řešení.

Děkuji za odpověd.
juriad
Profil
...:
Zkus si přeložit hlášku:
Nedefinovaná proměnná $db.
Máš plusový bod za to, že jsi alespoň napsal znění chyby.

Je to způsobené tím, že Someone uvedl neúplný příklad kódu, který ukládá hodnoty do databáze.
Jeho kód by nejspíš fungoval, pokud bys měl objekt $db, který reprezentuje připojení k databázi. Koukám, že má špatně syntaxi dotazu, tedy by nefungoval

Ukládat nějak do databáze umíš?

$temp = array();
foreach($_POST['users'] as $user) {
    $temp[] = "('" . $user['jmeno'] . "','" . $user['telefon'] . "', '" . $user['email'] . "')";
}
$sql = "INSERT INTO table(jmeno,telefon,email) VALUES " . implode(', ', $temp);
echo $sql; # podívej se, jaký dotaz se bude provádět

# tady ten dotaz $sql proveď

A máš mínusový bod za to, že měníš přezdívky.
gix
Profil *
Díky za pomoc. Už vše funguje jak má :-)

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: