Autor Zpráva
peter_r
Profil
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
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
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
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
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
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
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
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
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
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.
peter_r
Profil
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
Pokud si to chcete nechat napsat, tak zkuste inzerát v Práce a zakázky
peter_r
Profil
to som nevedel, že je tu niečo takéto, ďakujem

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:

0