Autor | Zpráva | ||
---|---|---|---|
Kačule Profil |
#1 · Zasláno: 28. 2. 2013, 23:39:10
Ahoj všem,
najde se prosím někdo kdo mi poradí? Už pár nocí se peru s funkcí UPDATE, snažím se najít způsob (určitě je, ale nejde mi najít), jak změnit v tabulce více dat najednou, například v prvním řádku něco a ve třetím také něco a uložit to jedním společným příkazem. (samostatně každý řádek se mi povedlo, ale potřebovala bych aby to šlo hromadně). Mám zkušební tabulku, zkušební databázi, proto text1 atd.. tabulka dole ukládá změny jen v posledním řádku a hodnoty překopíruje do ostatních řádků. Předem moc díky pridani_radku.php <?php // připojení k databazi include_once "admin_connect.php"; // zaslání příkazu do databáze $objekt_vysledku = mysqli_query($spojeni, 'SELECT * FROM pridani_radku'); if (!$objekt_vysledku) { echo 'Nezdařilo poslání príkazu do databáze'; echo '<br />'; echo 'mysql_error ($spojeni)'; exit(); } // zobrazení hodnot ziskaných z databáze ?> <form action="skript_cela_tabulka.php" method="POST"> <table class="tabvypis"> <tr> <th width="10%">ID</th> <th width="18%">Text1</th> <th width="18%">Text2</th> <th width="18%">Text3</th> <th width="18%">Text4</th> <th width="18%">Úpravy</th> </tr> </table> <?php while ($radek = mysqli_fetch_array($objekt_vysledku)) { ?> <table class="tabvypis"> <tr> <td width="10%"><?php echo $radek['id']; ?></td> <td width="18%"><input type="text" name="text1" class="pole" value="<?php echo $radek['text1']; ?>"></td> <td width="18%"><input type="text" name="text2" class="pole" value="<?php echo $radek['text2']; ?>"></td> <td width="18%"><input type="text" name="text3" class="pole" value="<?php echo $radek['text3']; ?>"></td> <td width="18%"><input type="text" name="text4" class="pole" value="<?php echo $radek['text4']; ?>"></td> <?php echo ' <td width="18%"> <a href="skript_smaz_radek.php?id='.$radek['id'].'"> <img src="./img/ico-delete.gif" alt="Smazat záznam"></a></td> '; ?> </tr> </table> <?php } ?> <input type="submit" value="Ulož změny" alt="Ulož provedené změny"></td> </form> </div> <?php // odpojení od databáze mysqli_free_result($objekt_vysledku); if ($spojeni) mysqli_close($spojeni); ?> skript_cela_tabulka.php <?php // pripojení include_once "admin_connect.php"; // OVERENÍ jesli je poslaný if(isset($_POST['text1'])) { //vytvorení príkazu $objekt_vysledku = mysqli_query($spojeni, "UPDATE pridani_radku SET text1 = '".$_POST['text1']."', text2 = '".$_POST['text2']."', text3 = '".$_POST['text3']."', text4 = '".$_POST['text4']."' "); } if (!$objekt_vysledku) die ('Chyba zaslání příkazu'); else echo 'Záznam byl ZMENEN'; header("Location: uzivatele_administrace.php", true, 303); // presmerování na stránku s výsledkem ?> |
||
Alphard Profil |
#2 · Zasláno: 28. 2. 2013, 23:57:45
Kačule:
„určitě je, ale nejde mi najít“ Ono to není tak jednoduché, existují určité konstrukce, ale vypadají nějak takhle Dvojné pole..?. Jestli neřešíte výkon kvůli tomu, že už to nestíhá, nechal bych to asi po jednom, nebo devrefuge.com/2011/12/better-multiple-queries-performance-with-mysqli_multi_query. |
||
Kačule Profil |
#3 · Zasláno: 1. 3. 2013, 01:00:42
Díky za nasměrování! - sice tomů vůbec nerozumim, ale mám co prozkoumávat a zkoušet.... snad najdu něco co bude polopaticky vysvětleno a pochopim to i já.
|
||
Tori Profil |
#4 · Zasláno: 1. 3. 2013, 07:03:38
Kačule:
Máte špatně pojmenovaná políčka formuláře, v PHP dostanete pouze hodnoty z posledního řádku. Změnila bych to tak, aby vám přišlo pole, kde klíče budou ID záznamu: while ($radek = mysqli_fetch_array($objekt_vysledku)) { ?> <table class="tabvypis"> <tr> <td width="10%"><?php echo $radek['id']; ?></td> <td width="18%"><input type="text" name="text1" class="pole[<?php echo $radek['id']; ?>]" value="<?php echo $radek['text1']; ?>"></td> <td width="18%"><input type="text" name="text2" class="pole[<?php echo $radek['id']; ?>]" value="<?php echo $radek['text2']; ?>"></td> .... atd. Ohledně ukládání koukněte i na článek J.Vrány: Hromadná aktualizace záznamů (včetně komentářů). |
||
Kačule Profil |
#5 · Zasláno: 1. 3. 2013, 10:27:16
Děkuji, bohužel i po hromadě přečtených informací, včetně článku J.Vrány se mi nedaří ty id přenést, tak aby to fungovalo... pořád to mění jen ten jeden řádek. Můžete mi poradit jak sestavit ten příkaz UPDATE, aby ta id byla tam kde mají být?
|
||
Tori Profil |
Kačule:
Ukažte, jak to vypadá teď.. (nevím, co a jak už jste změnila nebo ne) |
||
Kačule Profil |
#7 · Zasláno: 1. 3. 2013, 10:52:44
Změnila jsem tu tabulku se vstupními daty podle vaší rady, pak sem se pokoušela změnit i ten příkaz, ale bez úspěchu, takže jsem se vrátila k první verzi.
tabulka <table class="tabvypis"> <tr> <td width="10%"><?php echo $radek['id']; ?></td> <td width="18%"><input type="text" name="text1" class="pole[<?php echo $radek['id']; ?>" value="<?php echo $radek['text1']; ?>"></td> <td width="18%"><input type="text" name="text2" class="pole[<?php echo $radek['id']; ?>" value="<?php echo $radek['text2']; ?>"></td> <td width="18%"><input type="text" name="text3" class="pole[<?php echo $radek['id']; ?>" value="<?php echo $radek['text3']; ?>"></td> <td width="18%"><input type="text" name="text4" class="pole[<?php echo $radek['id']; ?>" value="<?php echo $radek['text4']; ?>"></td> <?php echo ' <td width="18%"> <a href="skript_smaz_radek.php?id='.$radek['id'].'"> <img src="./img/ico-delete.gif" alt="Smazat záznam"></a></td> '; ?> </tr> </table> No a tady jsem v koncích, netušim, jak sem ty id z tabulky dostat :-( skript_cela_tabulka.php <?php // pripojení include_once "admin_connect.php"; // OVERENÍ jesli je poslaný techt if(isset($_POST['text1'])) { //vytvorení príkazu $objekt_vysledku = mysqli_query($spojeni, "UPDATE pridani_radku SET text1 = '".$_POST['text1']."', text2 = '".$_POST['text2']."', text3 = '".$_POST['text3']."', text4 = '".$_POST['text4']."' "); } if (!$objekt_vysledku) die ('Chyba zaslání príkazu'); else echo 'Záznam byl ZMENEN'; header("Location: uzivatele_administrace.php", true, 303); // presmerování na stránku s výsledkem ?> |
||
Alphard Profil |
#8 · Zasláno: 1. 3. 2013, 10:55:34
Toho, co píše Tori, jsem si včera ani nevšiml. Učte se to postupně.
foreach ($_POST['pole'] as $id => $zaznam) { mysqli_query($spojeni, "UPDATE pridani_radku SET text1 = '".$zaznam['text1']."', text2 = '".$zaznamT['text2']."', text3 = '".$zaznam['text3']."', text4 = '".$zaznam['text4']."' where id = ".(int) $id); } Až tohle bude fungovat, můžete zkusit optimalizovat do jednoho dotazu. |
||
Tori Profil |
Kačule:
Aha, omlouvám se, napsala jsem to blbě, mělo být: <input type="text" name="text1[<?php echo $radek['id']; ?>]" class="pole" value="<?php echo $radek['text1']; ?>">
nakonec ani tohle nebylo dobře, práce kvapná,... atd. |
||
Kačule Profil |
#10 · Zasláno: 1. 3. 2013, 11:03:22 · Upravil/a: Kačule
Jeje:-) odkládám svou práci oficiálně a jdu se na to mrknout, jste oba moc hodní!
Tori: opravila jsem to, teď už mi to neukládá ani ten poslední řádek. |
||
Alphard Profil |
#11 · Zasláno: 1. 3. 2013, 11:43:30
Kačule:
Já jsem ten cyklus nenapsal dobře, opět jsem si nepřečetl, co uvedla Tori a čekal jsem, že myslí stejně jako já, omlouvám se. Princip je naznačený, jen doladit proměnné. Formulář bych udělal takhle <input type="text" name="data[<?php echo $radek['id']; ?>]['text1']" class="pole" value="<?php echo $radek['text1']; ?>"> A pak v tom cyklu foreach ($_POST['data'] as $id => $zaznam)
Omlouvám se za moc chyb, dneska se necítím moc dobře, už sem nebudu psát :-) |
||
Kačule Profil |
#12 · Zasláno: 1. 3. 2013, 11:55:51
Alphard:
formulář jsem poupravila (pořád maže a přidává, to se nezměnilo :-) ale stále nic se nemění..... jsem z toho úplně zmatená a za každou pomoc vděčná! Co jsem tady pročítala ty diskuze, tak ani Vám a ani Tori nesham po kotníky.... vlastně vim prdlajs, jen vim, co potřebuju aby to dělalo, ale jak to udělalat je v mém případě běh na x měsíců:-) Asi bych potřebovala pomoc víc než jsem si myslela:-( nevím, jak to doho cyklu dostat ty proměnný aby to něco dělalo :-( resp. ukládalo změny. |
||
Alphard Profil |
#13 · Zasláno: 1. 3. 2013, 18:22:39
Podařilo se? Já pracuji s generovanými formuláři, nejsem si jist detaily u takového nízkoúrovňového řešení a v poledne jsem se fakt necítil moc dobře. Vy taky moc nepomáháte, víme jenom, že to nefunguje...
Když se zpětně dívám na Alphard [#11], neměl jsem tam dávat apostrofy, takže <input type="text" name="data[<?php echo $radek['id']; ?>][text1]" class="pole" value="<?php echo $radek['text1']; ?>"> Ale jinak by to mělo fungovat, jestli ne, nedokáži dál věštit. Takže nakopírujte kousek vygenerovaného html, vypisujte hodnoty, např. $_POST['data'] a prostě debugujte.
|
||
Kačule Profil |
#14 · Zasláno: 1. 3. 2013, 18:45:28
FUNGUJE!!!!!!!!! pro to abych se v tom tolik nestrácela jsem přejmenovala text1 na jmeno, 2 na prijmeni, 3 na adresa, 4 na telefon. Vyzkoušela jsem moře věcí i odstranit ty apostrofy, protože se vypisovali když jsem to zkoušela vypsat, abych věděla jak se to přes post posílá na skript_cele_stranky.php no a zjistila jsem za dnešek moře věcí o tom jak fungují pole:-) moc děkuji za pomoc!!
|
||
Časová prodleva: 11 let
|
0