Autor Zpráva
Duchaplny
Profil
Zdravím,

rád by som si spravil zoznam ľudí s informáciami a naraz ich menil. Príklad:
Meno a Priezvisko | Vek | Tel.číslo 
Jožko Mrkvička    | 18  | 421000
Ferko Mrkvička    | 17  | 421000
Janko Mrkvička    | 16  | 421000
.....

Meniť by som chcel len vek a tel. číslo naraz len ich prepísaním a odoslaním, takže som spravil form (kombinovane s PHP):
<form method="post" action="">
<fieldset>
<?php
$vyber=mysql_query("SELECT id, meno, vek, telefon FROM tabulka", $GLOBALS["result"]);
       while ($vysledok=mysql_fetch_array($vyber)):
        echo "<input type="hidden" name="zoznamID" value='".$vysledok["id"]."' />".
              $vysledok["meno"].
             "<input name="vek" size="1" value=".$vysledok["vek"]." />".
             "<input name="telefon" size="1" value=".$vysledok["telefon"]." />";
       endwhile;
?>
<input type="submit" name="poslat" value="Poslať" />
<input type="hidden"> mi zabezpečuje IDčka osôb. Odosielací script:
<?php if (!empty($_POST["poslat"]))

{foreach($_POST["zoznamID"] as $zoznamID)

{mysql_query ("UPDATE `tabulka` SET `vek`=$_POST[vek], `telefon`=$_POST[telefon] WHERE `id`='$zoznamID';");

       if (mysql_affected_rows()>0)  echo "<p> Údaje boli zmenené. </p>\n";
     else                            echo "<p> ! Operácia sa nezdarila ! </p>\n";
 }
 } ?>
Keď sa snažím každému upraviť vek a telefón na iné čísla, tak mi to vždy vypíše 0, pretože foreach prebehne len cez "zoznamID". Hľadal som na nete spôsob ako spraviť 3 foreach v 1, ale zdá sa, že je to zlá cesta.

Vie mi niekto poradiť ?
Taps
Profil
Duchaplny:
zkus
<form method="post" action="">
<fieldset>
<?php
$vyber=mysql_query("SELECT id, meno, vek, telefon FROM tabulka", $GLOBALS["result"]);
       while ($vysledok=mysql_fetch_array($vyber)):
        echo '<input type="hidden" name="zoznamID[]" value="'.$vysledok["id"].'" />'
              .$vysledok["meno"].
             '<input name="vek[]" size="1" value="'.$vysledok["vek"].'" />
             <input name="telefon[]" size="1" value="'.$vysledok["telefon"].'" />';
       endwhile;
?>
<input type="submit" name="poslat" value="Poslať" />
a pak
<?php if (!empty($_POST["poslat"]))
 
{foreach($_POST["zoznamID"] as $index => $idecko)
 
{mysql_query ("UPDATE `tabulka` SET `vek`='".$_POST[vek][$index]."', `telefon`='".$_POST[telefon][$index]."' WHERE `id`='$idecko';");
 
       if (mysql_affected_rows()>0)  echo "<p> Údaje boli zmenené. </p>\n";
     else                            echo "<p> ! Operácia sa nezdarila ! </p>\n";
 }
 } ?>
Duchaplny
Profil
Taps:
zkus

Nepomohlo. Všade to hodilo 0 a miesto hodnôt, ktoré vložím je výstup pole, teda -> Array[číslo] (začína 0).
Taps
Profil
Duchaplny:
pokud aktualizuješ více poležek v db tak je lepší pracovat s polem.
Duchaplny
Profil
Taps:
pokud aktualizuješ více poležek v db tak je lepší pracovat s polem.

verím, len keby to pole nehádže všade 0. Ja potrebujem vkladať vlastné hodnoty, nie číslovať riadky.
Taps
Profil
Duchaplny:
o odesílají se ti správně data z formuláře? Svůj kod jsem ještě poupravil, tak můžeš vyzkoušet
Duchaplny
Profil
Taps:
ID nájde tak ako predtým správne, ale vek a telefon je "Array[číslo]", pretože "vek[]" a "telefon[]" je pole, ktoré sa čísluje a nezaznamenáva hodnoty, ktoré vkladám, takže po odoslaní nastaví všetko na 0.

BTW: Tento kód som skúšal, nevidím v ňom zmenu.
Alphard
Profil
Když editujete, je rozumné nevytvářet dynamické pole, ale napsat tam rovnou id konkrétní položky. Raději přímo name="list[id][vek]"
Bylo to tady snad 100x, naposled před pár týdny, kdybyste diskusi sledovali pravidelně, nemusíte vymýšlet kolo :-)
Duchaplny
Profil
Alphard:
sry, ale nejak nechápem, nesledujem to tu pravidelne, aký list[id] ? to ID je napísané v <input type="hidden">, ale problém je s hodnotami, ktoré sa neukladajú podľa manuálneho zadania..
Alphard
Profil
list je libovolný kontejner, na kterém se vystaví pole, kde jako klíč bude nejdříve id a pak jednotlivé položky. V jednodušším formátu to pro update už dostat nemůžete. Udělejte to, jak vám říkám, a při zpracování si zobrazte vstupní proměnné.
Duchaplny
Profil
keď dám toto, tak to nefunguje:
<input name="zoznamID[]vek" size="1" value="'.$vysledok["vek"].'" />
ani toto nefunguje:
<input name="zoznamID[][vek]" size="1" value="'.$vysledok["vek"].'" />
čo vlastne mám zmeniť, form abo php ? nejak nechápem, čo vlastne mám urobiť.. podľa toho príkladu:name="list[id][vek]"
to urobiť nejde, abo aspoň ja nevidím spôsob, ako to urobiť..
Taps
Profil
Duchaplny:
máš zakončený formulář pomocí
</form>
a co se ti vypíše když si vytiskneš pole ?
<?
print_r($_POST);
?>
Duchaplny
Profil
dopísal som do toho príkladu, resp. do selectu, limit 1, aby mi to hodilo len 1 riadok z MySQL a keď zmením dve hodnoty a odošlem, s týmto zadaním:
<input name="zoznamID[]vek" size="1" value="'.$vysledok["vek"].'" />
<input name="zoznamID[]telefon" size="1" value="'.$vysledok["telefon"].'" />
tak buď:
Array ( [zoznamID] => Array ( [0] => 1 [1] => 1 [2] => 2 ) [odosli] => Odošli )
alebo:
print_r(Array)
nebolo by lepšie vrátiť sa k tomu pôvodnému scriptu a napísať ho tak, aby fungoval ? teraz už v tom začínam mať neporiadok.. už neviem, ktoré zadanie je dobré, a ktoré zlé..
Taps
Profil
Duchaplny:
pokud použiješ ten můj původní zápis tak co ti zobrazí
<?print_r($_POST); ?>
. Správně by se ti mělo zobrazit pole ve kterém budeš mít POSTnuté položky
Duchaplny
Profil
Taps:
pokiaľ použijem tvoj zápis a vložím hodnoty vek = 1 a telefon = 2 tak mi to vypíše presne toto:
Array ( [zoznamID] => Array ( [0] => 1 ) [vek] => Array ( [0] => 1 ) [telefon] => Array ( [0] => 2 ) [odosli] => Odošli )
! Operácia sa nezdarila !

1
Taps
Profil
Duchaplny:
pole se vypisuje správně :-) tak přejdeme do SQL
<?php if (!empty($_POST["poslat"]))
 
{foreach($_POST["zoznamID"] as $index => $idecko)
 
{
  mysql_query ("UPDATE tabulka SET vek='".$_POST['vek'][$index]."', telefon='".$_POST['telefon'][$index]."' WHERE id='$idecko'") or die (mysql_error());
 
       if (mysql_affected_rows()>0)  echo "<p> Údaje boli zmenené. </p>\n";
     else                            echo "<p> ! Operácia sa nezdarila ! </p>\n";
 }
 } ?>
Jaká chyba se ti zobrazí ?
Duchaplny
Profil
Taps:
žiadna, všetko prebehne v poriadku a zobrazí sa to, čo predtým..
Taps
Profil
Duchaplny:
tak to vypadá že ti vše funguje v pořádku, ještě uděláme drobnou úpravu
<?php if (!empty($_POST["poslat"]))
 
{foreach($_POST["zoznamID"] as $index => $idecko)
 
{
  mysql_query ("UPDATE tabulka SET vek='".$_POST['vek'][$index]."', telefon='".$_POST['telefon'][$index]."' WHERE id='$idecko'") or die (mysql_error());
 
   
 }
    $hlaska= (mysql_affected_rows()>0)  ? 'Údaje byly úspěšně změněny' : 'Operace se nezdařila';
     echo $hlaska;
 
 } ?>
Duchaplny
Profil
juchú, teraz to už ukladá, akurát, že to hodí "Operace se nezdařila", aj keď zmení polovicu údajov a ostatné ponechám jak boli, ale to je len chyba hlášky, s tým si už hádam poradím.. nakoniec bol problém v úvodzovkách..

Ďakujem veľmi pekne..

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: