Autor | Zpráva | ||
---|---|---|---|
peter_r Profil |
#1 · Zasláno: 23. 3. 2021, 10:09:50
Ahojte. Prosím o radu, ako som už niekde spomínal, učím sa programovať tak, že upravujem už vytvorené kódy. Avšak s týmto si neviem rady. Čumím do toho ale nič ... Zo stránky itnetwork.cz mám kód, kde jeden súbor editor.php môže urobiť dve veci: vytvoriť nový alebo upraviť vytvorený článok. Chcem ho prerobiť tak, aby len upravoval už vytvorený článok, nechcem INSERT ale len UPDATE. Snažím sa to pochopiť ale je tam tých podmienok IF veľa. Toto je originál kód:
<?php session_start(); if (empty($_SESSION['uzivatel_admin'])) die('Nedostatecna opravneni'); require('Db.php'); Db::connect('127.0.0.1', 'ners_db', 'root', ''); $clanek = array( 'clanky_id' => '', 'titulek' => '', 'obsah' => '', 'url' => '', 'popisek' => '', 'klicova_slova' => '', ); if ($_POST) { if (!$_POST['clanky_id']) { Db::query(' INSERT INTO clanky (titulek, obsah, url, popisek, klicova_slova) VALUES (?, ?, ?, ?, ?) ', $_POST['titulek'], $_POST['obsah'], $_POST['url'], $_POST['popisek'], $_POST['klicova_slova']); } else { Db::query(' UPDATE clanky SET titulek=?, obsah=?, url=?, popisek=?, klicova_slova=? WHERE clanky_id=? ', $_POST['titulek'], $_POST['obsah'], $_POST['url'], $_POST['popisek'], $_POST['klicova_slova'], $_POST['clanky_id']); } header('Location: index.php?clanek=' . $_POST['url']); exit(); } else if (isset($_GET['url'])) { $nactenyClanek = Db::queryOne(' SELECT * FROM clanky WHERE url=? ', $_GET['url']); if ($nactenyClanek) $clanek = $nactenyClanek; else $zprava = 'Článek nebyl nalezen'; } ?> |
||
lionel messi Profil |
peter_r:
„Snažím sa to pochopiť ale je tam tých podmienok IF veľa“ Používaš nejaké IDE (NetBeans, PHPStorm, Visual Studio...), prípadne lepší textový editor (Sublime), ktorý ti zvýrazní začiatky a konce jednotlivých blokov? Umožní ti aj tzv. code folding, teda operatívne skrytie či odkrytie bloku kódu, ktorý ti "zavadzia". Riadky 19-33 nahraď takto: if ($_POST['clanky_id']) //ak je $_POST['clanky_id'] nastavené, aktualizujeme daný článok, inak nespravíme nič - všimni si, že táto podmienka je oproti pôvodnej podmienke otočená a nenasleduje po nej žiadne else { Db::query(' UPDATE clanky SET titulek=?, obsah=?, url=?, popisek=?, klicova_slova=? WHERE clanky_id=? ', $_POST['titulek'], $_POST['obsah'], $_POST['url'], $_POST['popisek'], $_POST['klicova_slova'], $_POST['clanky_id']); } |
||
peter_r Profil |
#3 · Zasláno: 23. 3. 2021, 11:17:29
lionel messi:
používam Dream weaver, ten zobrazuje bloky ale neviem či mi to pomôže čiže ak dobre pozerám, len si odstránil riadky 20-26 ale nepomohlo mi to, zmenu mi neuloží |
||
lionel messi Profil |
peter_r:
„čiže ak dobre pozerám, len si odstránil riadky 20-26“ Nie je to jediná úprava. Prosím, ešte raz si pozorne prečítaj [#2] a sústreď sa aj na zvýraznený riadok v mojom kóde, dokonca ho máš aj okomentovaný. Na Základní kurz 10: Podmínky nájdeš fajn zdroj k podmienkam v PHP, konkrétne ti odporúčam venovať sa najmä časti začínajúcej: „Když je řeč o přehlednosti kódu, může se stát, že při splnění podmínky nechcete udělat nic a máte jen kód pro nesplnění...“ |
||
peter_r Profil |
#5 · Zasláno: 23. 3. 2021, 13:28:28
lionel messi:
ten výkričník som si tam nevšimol, už je to ok, ďakujem takisto ďakujem za ten odkaz, určite si to prejdem |
||
peter_r Profil |
#6 · Zasláno: 23. 3. 2021, 15:24:57
ešte otázka, v riadku 34 je (ak uvažujem správne) zadefinované, že po UPDATE má ísť na uvedenú stránku
je možné nastaviť, aby po UPDATE zobrazilo stránku, z ktorej ten UPDATE bol vyžiadaný? aby som to napísal zrozumiteľnejšie, mám stránky index1.php a index2.php, v obidvoch mám odkaz na update nejakých údajov, čiže používajú rovnaký súbor editor.php, avšak vždy sa vráti na index1.php lebo to tak mám zadefinované v riadku 34 header('Location: index.php?clanek=' . $_POST['url']); |
||
Kajman Profil |
#7 · Zasláno: 23. 3. 2021, 15:30:47
Ve formuláři si předejte v hidden inputu, kam se má přesměrovat , a hodnotu z této proměnné využijte.
|
||
peter_r Profil |
#8 · Zasláno: 25. 3. 2021, 07:32:09
nejdem zakladať novú tému, a týka sa to UPDATE tak to napíšem sem
mám vypísaný zoznam všetkých položiek z tabuľky a potrebujem jednou funkciou zapísať (update) všetky hodnoty každej položky toto je výpis: foreach ($clanky as $clanek) { echo('<tr><td>' . htmlspecialchars($clanek['priezvisko']) . '</td> <td>' . htmlspecialchars($clanek['meno'])); <form method="post"> <input type="hidden" name="prac_id" value="<?= htmlspecialchars($clanek['prac_id']) ?>" /> <input type="text" name="odmh" autofocus value="<?= htmlspecialchars($clanek['odmh']) ?>" /> } <input type="submit" value="Odoslať" /> nevšímajte si čo je php a čo je html, urobil som len taký výcuc a na update mám toto: $clanek = array( 'odmh' => '', ); if ($_POST) { if ($_POST['prac_id']) { Db::query(' UPDATE clanky4 SET odmh=? WHERE prac_id=? ', $_POST['odmh']); } header('Location: clanky.php'); exit(); } $clanky = Db::queryAll(' SELECT * FROM clanky4 ORDER BY priezvisko, meno '); údaje mi nezapisuje, prosím poradí niekto? Ďakujem. |
||
blaaablaaa Profil |
#9 · Zasláno: 25. 3. 2021, 09:13:58
peter_r:
Stačí si povolit výpis chyb. V Db::query('UPDATE clanky4 SET odmh=? WHERE prac_id=?', $_POST['odmh']); očekáváte dva parametry, ale předáváte jen jeden.
|
||
peter_r Profil |
#10 · Zasláno: 25. 3. 2021, 10:27:05
Kde si mám povoliť výpis chýb?
Nerozumiem tomu, mám tam dva inputy, jeden skrytý prac_id a druhý odmh |
||
peter_r Profil |
#11 · Zasláno: 25. 3. 2021, 13:33:00
upravil som to takto ale stále nič :-(
$clanek = array( 'prac_id' => '', 'odmh' => '', ); if ($_POST) { if ($_POST['prac_id']) { Db::query(' UPDATE clanky4 SET odmh=? WHERE prac_id=? ', $_POST['odmh'], $_POST['prac_id']); } header('Location: clanky.php'); exit(); } |
||
Kajman Profil |
#12 · Zasláno: 25. 3. 2021, 14:12:35
Přečtěte si něco o základech html a html formulářů. Pro každý řádek děláte nový formulář a tlačítko tak máte jen po posledním z nich - ale možná je vlastně úplně mimo, protože ukončení buňky možná ukončí formulář vytvořený v ní.
Pokud chcete odeslat všechny řádky jedním tlačítkem, tak musíte mít vše v jednom formuláři. V takovém případě je pak dobré si nazvat proměnné, aby se v $_POST chovaly jako pole. Např. prac_id[] nebo prac_id[jedinečnéID]
Takže si nastudujte i pole a cykly v php. Bez toho to nenaprogramujete. Ono možná je vůbec lepší si přečíst nějakou knížku než začnete programovat, bylo by to pro všechny rychlejší. Při programování se pak umět podívat, co posílá prohlížeč na server (F12 - síť) a debugovat si php kód nebo si umět alespoň vypisovat hodnoty proměnných a podobné pomocné informace. |
||
Časová prodleva: 5 dní
|
|||
peter_r Profil |
#13 · Zasláno: 30. 3. 2021, 10:35:21
Prosím, nepomôže mi s tým niekto? Nechcem sa živiť programovaním, potrebujem si len v práci zjednodušiť robotu
proste potrebujem jedným tlačidlom zapísať údaje vo všetkých riadkoch naraz Ďakujem |
||
Kajman Profil |
#14 · Zasláno: 30. 3. 2021, 11:12:55
Pokud si to chcete nechat napsat, tak zkuste inzerát v Práce a zakázky
|
||
peter_r Profil |
#15 · Zasláno: 30. 3. 2021, 12:12:00
to som nevedel, že je tu niečo takéto, ďakujem
|
||
Časová prodleva: 3 roky
|
0