Autor Zpráva
Spyro_x
Profil *
Nazdar, potřeboval bych trochu poradit.

Z formuláře(checkboxy) mi přijdou dvě proměnné, potřebuju je spárovat, aby se zapsaly do db společně do jednoho řádku.

$ar1 = array(1,5,8,20);
$ar2 = array(3,4,1,2);


Zkoušel sem to spárovat přes foreach ($my_array as $ar1 => $ar2)

Výsledek by měl být takový, že se mi do db vytvoří toto:

ar1 | ar2
-----------
1 | 3
5 | 4
8 | 1
20 | 2

Díky za nápady. Projížděl sem všechny operace s poli na php.net, ale ne a ne na to přijít.
BetaCam
Profil
Spyro_x


array_combine($ar1, $ar2);
Spyro_x
Profil *
To bohužel můj problém nevyřešilo. Array stejně nereaguje.

Potřeboval bych $ar1 a $ar2 rozdělit tak, abych mohl dát to db tento příkaz:

ar1 | ar2
-----------
1 | 0
5 | 0
8 | 0
20 | 0
UPDATE tabulka SET ar2=$ar2 WHERE ar1=$ar1;  


Možná dělám chybu někde ve zpracování arraye. Přijdou mi hodnoty z checboxů, potom s nimi udělám toto:
$prislo = implode(",",$_POST['ar1']);
$ar1 = array($prislo);


Děkuju za radu, už si nevím rady.
srigi
Profil
Pole do tabulky nemozes ulozit jedinym prikazom, tak ako si naznacil. Do SQL databazy musis posielat jednotlive prvky. Cize nejako takto:
$i = 0;
foreach ($ar1 as $row) {
  mysql_query("INSERT INTO nazov_tabulky (id, ar1, ar2) VALUES (null, $row, " . $ar2[$i] . ")";
  $i++;
}
Sicario
Profil *
Do tabulky muzes vlozit vice zaznamu v jednom prikazu:
INSERT INTO table (..., ...) VALUES (..., ...), (..., ...), (..., ...), (..., ...)

(Vyzkouseno v psql, mysql, v sqlite tusim nelze)

Pri update neco takoveho logicky nejde, musis pouzit cyklus for.
Spyro_x
Profil *
Diky za radu srigi. Příkaz funuguje, bohužel se zapíše vždy jen první řádek, zbytek nic.

$ar1 = array(1,5,8,20);
$ar2 = array(3,4,1,2);

$i = 0;
foreach ($ar1 as $row) {
  mysql_query("INSERT INTO nazov_tabulky (id, ar1, ar2) VALUES (null, $row, " . $ar2[$i] . ")";
  $i++;
}


Výsledek v DB
id | ar1 | ar2
---------------
0..|..1...|..3...

Zbytek nic.
srigi
Profil
Vlozenie do DB je mozne zjednodusit podla Sicariovho prispevku:
$query = "INSERT INTO nazov_tabulky (id, ar1, ar2) VALUES
  (null, " . $ar1[0] . ", " . $ar2[0] . "),
  (null, " . $ar1[1] . ", " . $ar2[1] . "),
  (null, " . $ar1[2] . ", " . $ar2[2] . "),
  (null, " . $ar1[3] . ", " . $ar2[3] . "),
  (null, " . $ar1[4] . ", " . $ar2[4] . ")";

// debug
// echo $query;
mysql_query($query);

Neviem ci som sa nepomylil, takze query mozes debugovat pomocou odkomentovania echo prikazu.
Spyro_x
Profil *
Počet členů v poli je ale proměnný, takhle to udělat nemůžu.
Nechápu, proč nefunguje
$i = 0;
foreach ($ar1 as $row) {
  mysql_query("INSERT INTO nazov_tabulky (id, ar1, ar2) VALUES (null, $row, " . $ar2[$i] . ")";
  $i++;
}
srigi
Profil
Nechápu, proč nefunguje
To by aj mna zaujimalo. Ako keby to zaiterovalo iba 1x. Skus na konci vypisat $i, ci ma pozadovanu hodnotu.
kajaman
Profil
for($i = 0; $i <= count($ar1); $i++){
    mysql_query("INSERT INTO tabulka(id, ar1, ar2) VALUES ($i, $ar1[$i], $ar2[$i])");
}
srigi
Profil
kajaman
Neviem, ale asi bude treba ten QUERY zretazit, lebo takto definovane premenne poli sa tusim nedokazu vyexpandovat z retazca (s uvodzovkami).

A asi aj stlpec id by mal dostavat inu hodnotu (null) ako $i, ak je to AUTOINCREMENT. Ale fungovat by to malo.
kajaman
Profil
ak je to AUTOINCREMENT
ano, ale pokud je auto_increment tak se v dotazu vůbec nemusí objevovat

asi bude treba ten QUERY zretazit
to je možná pravda, u toho si nejstem nikdy jistej, takže vždy vyzkouším tak, a pak tak :-)
Spyro_x
Profil *
Kdepak, ani to nepomohlo, teď se v db vytvořilo:
ar1 | ar2
----------
..0..|..0..
..1..|..4..

Nepomohlo by možná definovat key v arrayi?
kajaman
Profil
No, tak to tedy nechápu, protože tehnle cyklus:
$ar1 = array(1,2,3,4);
$ar2 = array(5,6,7,8);

for($i = 0; $i < count($ar1); $i++){
    echo "INSERT INTO tabulka(id, ar1, ar2) VALUES($i, $ar1[$i], $ar2[$i])<br />\n";
}


mě vytvoří tento výstup:
INSERT INTO tabulka(id, ar1, ar2) VALUES(0, 1, 5)
INSERT INTO tabulka(id, ar1, ar2) VALUES(1, 2, 6)
INSERT INTO tabulka(id, ar1, ar2) VALUES(2, 3, 7)
INSERT INTO tabulka(id, ar1, ar2) VALUES(3, 4, 8)


takže myslím, že by to fungovat mělo.
srigi
Profil
Mozno bude nejaka chyba na strane MySQL. ASi by bolo vhodne zistovat result mysql_query(), mozno tam nieco bude: (pouzijem mierne upravveny Kajamanov kod)
$ar1 = array(1,2,3,4);
$ar2 = array(5,6,7,8);

for($i = 0; $i < count($ar1); $i++){
    $result = mysql_query("INSERT INTO tabulka(ar1, ar2) VALUES ($ar1[$i], $ar2[$i])");
    if (!$result) {
      die(mysql_error());
    }
}

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: