Autor | Zpráva | ||
---|---|---|---|
peter_r Profil |
prosím o radu, mám výpis z tabuľky podľa nejakých kritérií:
$vypis = Db::queryAll(' SELECT * FROM latky WHERE spotreba >0 AND obj="" ORDER BY dodavatel '); foreach ($vypis as $u) { echo(".htmlspecialchars($u['nazov'])."); echo(".htmlspecialchars($u['dodavatel'])."); echo(".htmlspecialchars($u['spotreba'])."); echo("<input type='checkbox' id='vehicle1' name='vehicle1' value='Bike'>"); } kde vypíše všetky riadky, ktoré majú vypísanú spotrebu (väčšiu ako nula) a stĺpec obj je prázdny, ten CHECKBOX id, name a value je len príklad teraz potrebujem pomocou checkboxu vybrať určité riadky a pod tabuľku pridať tlačidlo objednať a po stlačení tohoto tlačidla zapíše do riadkov ktoré majú zaškrtnutý checkbox do stĺpca obj nejakú hodnotu, najlepšie aktuálny dátum a čas poradí mi niekto prosím? ďakujem |
||
anonym_ Profil * |
#2 · Zasláno: 16. 6. 2022, 12:37:19
peter_r:
Ten htmlspecialchars v uvozovkách neudělá to, co chceš.
„po stlačení tohoto tlačidla zapíše do riadkov ktoré majú zaškrtnutý checkbox do stĺpca obj nejakú hodnotu, najlepšie aktuálny dátum a čas“ Zaškrtnutý checkbox poznáš tak, že se odešle. Nezaškrtnutý nikoliv. Čili, pokud má každý řádek více polí, kontroluj, jestli exituje checkbox se stejným indexem. Pokud ano, zapiš, pokud ne, jdi dál. Zápis do DB (ten dotaz) je pak snad jasný, ne? Indexy tam dostaneš pomocí nějaké iterační proměnné (třeba $k v tom cyklu, který tam máš), v name pak bude vehicle[$k] .
|
||
peter_r Profil |
#3 · Zasláno: 16. 6. 2022, 12:51:58
anonym:
s tým htmlspecialchars to mi je jasné, bolo tam ešte niečo čo som vymazal aby to bolo prehľadnejšie to ostatné, neviem či tomu rozumiem ale skôr som myslel keby mi to niekto zapísal, lebo ja som v tom amatér, ďakujem |
||
Kajman Profil |
#4 · Zasláno: 16. 6. 2022, 12:53:30
Do value checkboxu dejte id řádku. Name můžete dát např. "vybrano[]". Po odeslání pak budou v hodnotách pole $_POST['vybrano'] zatrhnutá id.
|
||
anonym_ Profil * |
#5 · Zasláno: 16. 6. 2022, 12:53:49
peter_r:
„neviem či tomu rozumiem ale skôr som myslel keby mi to niekto zapísal, lebo ja som v tom amatér“ Popis máš, tak s ním zkus nějak naložit. Až si nebudeš vědět rady s něčím konkrétním, ptej se. |
||
peter_r Profil |
#6 · Zasláno: 16. 6. 2022, 13:21:19
tak to som v prdeli
<input type='checkbox' id=".htmlspecialchars($u['latky_id'])." name=obj['latky_id'] value="ano") a potom po stlačení button odoslať $dt=date("Y-m-d H:i:s"); Db::query("INSERT INTO latky (obj) VALUES (?)" WHERE value="ano", $dt ); ako hovorím, nerozumiem tomu, som v tom absolútny amatér, preto vás prosím o pomoc |
||
anonym_ Profil * |
#7 · Zasláno: 16. 6. 2022, 13:25:59
peter_r:
„ id=".htmlspecialchars($u['latky_id'])." “
Tohle je nesmysl, viz [#2]. „ name=obj['latky_id'] “
Tady ti vypadlo to $u .
Db::query("INSERT INTO latky (obj) VALUES (?)" WHERE value="ano", $dt ); WHERE je nesmyslné v INSERT u, dev.mysql.com/doc/refman/8.0/en/insert.html. Binduješ (to je ten otazník) sloupec obj , kde nevím, co má být za hodnotu, ale vkládáš do ní čas. SQL má navíc vlastní fci NOW() pro vložení aktuálního času.
Ty budeš mít na stránce třeba 20 checkboxů. Po odeslání formáře v proměnné $_POST[obj] budou jen ty zaškrtnuté. To jsem ti ale už psal (žádný s value="ne" se neodešle).
|
||
Kajman Profil |
#8 · Zasláno: 16. 6. 2022, 13:33:04
peter_r:
Ani nedokážete číst. Do value checkboxu dejte id řádku. Name můžete dát např. "vybrano[]" Neudělal jste ani jedno. echo("<input type='checkbox' value=".$u['latky_id']." name='vybrano[]'>"); Pak záleží na tom, jaký používáte databázový layer. Pokud je dobře udělaný a bude podporovat pole, tak stačí. Db::query("UPDATE latky SET obj=Now() WHERE latky_id in (?)", $_POST["vybrano"] ); A pokud se nechcete snažit do dotáhnout, zvolte kategorii Práce a zakázky a udělejte si inzerát. |
||
peter_r Profil |
#9 · Zasláno: 16. 6. 2022, 13:46:06
Kajman:
:-( tak díky |
||
peter_r Profil |
#10 · Zasláno: 17. 6. 2022, 08:50:18
nahodil som to takto ale neurobí nič a ani nevyhodí žiadnu chybu:
if ($_POST) { Db::query("UPDATE latky SET obj=Now() WHERE latky_id in (?)", $_POST["vybrano"] ); header('Location: latky.php'); exit(); } <form method='post'> <?php $vypis = Db::queryAll(' SELECT * FROM latky WHERE spotreba >0 AND obj="" ORDER BY dodavatel '); foreach ($vypis as $u) { echo("<tr class='tab'><input type='hidden' name='latky_id' value=".$u['latky_id']. " />"); echo("<td width='160px'>".htmlspecialchars($u['nazov'])." ".htmlspecialchars($u['typ'])."</td>"); echo("<td width='80px' align='center'>".htmlspecialchars($u['dodavatel'])."</td>"); echo("<td width='140px' align='center'>".htmlspecialchars($u['cislo_obj'])."</td>"); echo("<td width='270px' align='center'>".htmlspecialchars($u['odberatel'])."</td>"); echo("<td class='datum' width='70px'> ".date('d.m.Y', strtotime($u['datum_zap']))."</td>"); echo("<td align='center'>".htmlspecialchars($u['poznamka'])."</td>"); echo("<td width='80px' align='center'>".htmlspecialchars($u['spotreba'])."</td>"); echo("<td width='70px' align='center'><input type='checkbox' value=".$u['latky_id']." name='vybrano[]'></td>"); echo("</tr>"); } echo("</tbody></table>"); ?> <br /><br /><input type="submit" value="Objednať" /> </form> |
||
juriad Profil |
#11 · Zasláno: 17. 6. 2022, 09:12:12
Zakomentuj si řádek 6 a 7 a místo nich si přidej výpis:
var_dump($_POST); Zatím jsi nám neprozradil, co je DB - php samotné takovou třídu nemá. Používáš tedy nějakou knihovnu. Jakou?
Kajman ti říkal, že předat pole může a nemusí fungovat. To bys zjistil v dokumentaci té funkce query .
|
||
peter_r Profil |
#12 · Zasláno: 17. 6. 2022, 09:26:38
juriad:
no vypísalo chybu Notice: Array to string conversion in C:\xampp\htdocs\Db.php on line 61 array(2) { ["latky_id"]=> string(2) "43" ["vybrano"]=> array(1) { [0]=> string(2) "43" } } ten súbor Db.php mám z príkladov nejakej stránky, už nepamätám asi itnetwork.cz a používam ho všade |
||
juriad Profil |
#13 · Zasláno: 17. 6. 2022, 10:17:31
Aha, relevantní část je:
/** * Spustí dotaz a vrátí PDO statement * @param array $params Pole, kde je prvním prvkem dotaz a dalšími jsou parametry * @return \PDOStatement PDO statement */ private static function executeStatement($params) { $query = array_shift($params); $statement = self::$connection->prepare($query); $statement->execute($params); return $statement; } /** * Spustí dotaz a vrátí počet ovlivněných řádků. Dále se předá libovolný počet dalších parametrů. * @param string $query Dotaz * @return int Počet ovlivněných řádků */ public static function query($query) { $statement = self::executeStatement(func_get_args()); return $statement->rowCount(); } Takže to používá PDO. Zkusme o tom něco najít: Google: pdo bind array Existuje workaround, musíš v tom dotazu složit přesný počet otazníků a následně předat ne pole, ale jednotlivá id: $ids = $_POST["vybrano"]; $inQuery = implode(',', array_fill(0, count($ids), '?')); Db::query("UPDATE latky SET obj=Now() WHERE latky_id in ($inQuery)", ...$ids); Pokud bys používal skutečnou knihovnu pro prác s DB a ne jen tuto triviální třídu z ITNetworks.cz (která je dostatečná pro ten jejich kurz), tak je dost pravděpodobné, že by to mohla umět za tebe. Příkladem je česká Dibi, která v dokumentaci ukazuje, že s poli pracovat umí: dibiphp.com/cs/documentation Mimochodem, měl bys zkontrolovat, že uživatel zaškrnul alespoň jeden checkbox - tedy, že pole $ids není prázdné. Pokud by bylo, tak dostaneš chybu:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 |
||
Časová prodleva: 3 dny
|
|||
peter_r Profil |
#14 · Zasláno: 20. 6. 2022, 13:30:12
juriad:
ďakujem, funguje to ešte mám jednu prosbu a už potom vám dám pokoj :-) po stlačení objednať mi zapíše do tabuľky dátum pre vybrané položky, ale ešte by som potreboval aby hneď za tým tieto vybrané (zaškrtnuté) položky vypísalo do jednoduchej tabuľky html ďakujem pekne za pomoc |
||
anonym_ Profil * |
#15 · Zasláno: 20. 6. 2022, 13:36:14
peter_r:
Tak select pravděpodovně umíš (byl v #1), tak jen do WHERE přidej podmínku na vybrání jen těch chtěných položek. Výpis do tabulky bude v tom foreach cyklu.
Symbolicky nějak takto echo '<table>'; foreach (...) { echo '<tr> <td>... </tr>'; } echo '</table>'; |
||
peter_r Profil |
anonym:
tak toto náhodou viem :-) ale akú dám podmienku WHERE ??? uvažujem, v podmienke za príkazom UPDATE mám presmerovanie na inú stánku, toto by som nahradil nejako takto: Db::queryALL("SELECT * FROM latky WHERE latky_id in ($inQuery)", ...$ids); exit(); ale to je asi blbosť |
||
anonym_ Profil * |
#17 · Zasláno: 20. 6. 2022, 14:22:55
peter_r:
Pokud tu tabulku chceš vypsat jen bezprostředně po tom uložení a redirectu, tak nemusíš nic lovit v DB a jen si ta IDčka z `$_POST[$ids]` ulož do SESSION a pak je vypiš z té session. Proměnná inQuery po redirectu už existovat nebude, musíš si ji uložit někam, kde se ten redirect přežije. To je ta session. Pokud bys chtěl vypsat vždy poslední uložená, tak všechny záznamy podle posledního uloženého času. |
||
peter_r Profil |
#18 · Zasláno: 20. 6. 2022, 14:33:13
anonym:
áno chcem to vypísať bezprostredne po tom uložení, ale nemám šajnu ako to uložím do SESSION a vypíšem :-( |
||
anonym_ Profil * |
#19 · Zasláno: 20. 6. 2022, 14:38:21
peter_r:
„ale nemám šajnu ako to uložím do SESSION“ Jako do jakékoliv jiné proměnné. „a vypíšem“ Jako jakékoliv jiné pole. Projev trochu vlastní iniciativy, za těch 10 minut od mojí poslední odpovědi sis ji maximálně stihl přečíst a odpověď, bez vlastního zamyšlení se nad ní. |
||
peter_r Profil |
#20 · Zasláno: 20. 6. 2022, 14:42:51
|
||
blaaablaaa Profil |
#21 · Zasláno: 20. 6. 2022, 15:04:50
peter_r:
Pak je třeba se to naučit nebo zadat jako zakázku. Toto jsou základní věci, které jsou mj. vysvětlené i na stránce, kterou odkazuješ. |
||
peter_r Profil |
za komplet vypracovanú zákazku nemám problém zaplatiť
ale keď tu potrebujem jednu-dve rady, lebo sa neviem pohnúť ďalej, je to taký problém? tak mi napíšte číslo účtu a sumu koľko chcete za túto jednu radu a pošlem vám peniaze |
||
Kajman Profil |
#23 · Zasláno: 20. 6. 2022, 16:21:52
Ne, udělejte to naopak. Napište si inzerát do sekce Práce a zakázky podle tamních pravidel.
|
||
peter_r Profil |
#24 · Zasláno: 20. 6. 2022, 16:40:18
To naozaj sa tu nenájde dobrá duša ktorá by mi to napísala?
|
||
Stroganov Profil * |
#25 · Zasláno: 20. 6. 2022, 23:21:42
peter_r:
„to nie je pravda, pozerám na w>ww.w3schools.com/php/php_sessions.asp“ Veď to je úplne polopate vysvetlené. Sú tam príklady. Čomu konkrétne na tých príkladoch nerozumiete? |
||
peter_r Profil |
#26 · Zasláno: 22. 6. 2022, 07:44:14
Stroganov:
tak tomu príkladu na tej stránke v podstate rozumiem ale neviem ako to dať do tej mojej požiadavky, keďže tam tých $_SESSION môže byť jeden alebo aj viac |
||
blaaablaaa Profil |
#27 · Zasláno: 22. 6. 2022, 07:49:02
peter_r:
V session může být i pole. |
||
anonym_ Profil * |
#28 · Zasláno: 22. 6. 2022, 07:50:13
peter_r:
Tak si najdi ještě jiný zdroj, pokud tomuto nerozumíš. Napovim, ze i v tom tebou odkázaném příkladu se pracuje se dvěma sessionami. |
||
Časová prodleva: 1 rok
|
0