Diskuze: Úprava vloženého článku (inzerátu)

PHP PHP Úprava vloženého článku (inzerátu) American English version English version

Avatar
Michal Kuba
Redaktor
Avatar
Michal Kuba:

A ještě jednu prosbu bych měl. Mám stránku, na níž lze přes formulář vložit "článek"(inzerát). Přihlášenému uživateli chci dát možnost svůj inzerát smazat a editovat. Smazání je jednoduché, to mi funguje. Pro editaci jsem si vytvořil speciální php stránku, vypadající přesně jako stránka pro přidání nového inzerátu. Nedaří se mi ale samotné vypsání editovaného inzerátu a po zadání čehokoliv se inzerát nepřepíše ani neuloží.
PHP ošetřující vložení inzerátu (FUNGUJE):

$inzerat= array(
    'titulek'=>'',
    'text' => '',
    'kategorie' => '',
    'mesto' => '',
);
if ($_POST){
     if ( isset($_POST['kategorie']) AND isset($_POST['upresneni_' . $_POST['kategorie']]) )
    $upresneni = $_POST['upresneni_' . $_POST['kategorie']];

     $autor = $_SESSION['uzivatel_jmeno'];

            Db::query('
           INSERT INTO inzeraty (autor, datum_vlozeni, titulek, text, kategorie, upresneni,  mesto)
           VALUES (?,CURRENT_TIMESTAMP(),?, ?, ?, ?, ?)
             ',$autor, $_POST['titulek'], $_POST['text'], $_POST['kategorie'],$upresneni,$_POST['mesto'] );

            header('Location: podat_inzerat.php');
                        exit();

A PHP ošetřující úpravu inzerátu (NEFUNGUJE):

$inzerat= array(
    'titulek'=>'',
    'text' => '',
    'kategorie' => '',
    'mesto' => '',
);
if($_POST){
if (isset($_GET['ID'])){
    $nactenyInzerat = Db::queryOne('
                SELECT *
                FROM inzeraty
                WHERE ID=?
        ', $_GET['ID']);
       if ($nactenyInzerat)
$inzerat=$nactenyInzerat ;}
header('Location:administrace.php');

Měl jsem tam ještě více věcí, ale ani tak to nefungovalo. Máte nějaký nápad?

 
Odpovědět 22.2.2015 9:59
Avatar
Odpovídá na Michal Kuba
Michal Šmahel (ceskyDJ):

A co ti přesně nefunguje?? Jak tam vypisuješ data (ta nastavená při vytvoření)?? A tím vypisováním myslím: vytáhneš to z databáze a jak ty data vypisuješ do toho formuláře pro vytvoření. A budeš potřebovat udělat ještě script na změnu dat (po úpravě).

Nahoru Odpovědět 22.2.2015 12:19
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Fredep
Redaktor
Avatar
Odpovídá na Michal Kuba
Fredep:

Ahoj, píšeš "PHP ošetřující úpravu inzerátu", ale já zde vidím dotaz SELECT. Navíc na konci máš přesměrování, takže se se ti to vypsat ani nemůže, protože se ti to přesměruje. Čeho jsi chtěl v tom druhém skriptu dosáhnout? :)

Nahoru Odpovědět  +1 22.2.2015 13:36
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
Fredep
Redaktor
Avatar
Odpovídá na Michal Kuba
Fredep:

Jinak bys mohl použít stránku na vytváření nového inzerátu a předělat ji tak, aby mohla i inzeráty upravovat. Je to snad ta nejjednodušší možnost ;)

Nahoru Odpovědět  +1 22.2.2015 15:02
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
Odpovídá na Fredep
Michal Šmahel (ceskyDJ):

To SELECT chtěl použít nejspíš na získání starých dat z databáze. Tyto data by vypsal do stejného formuláře, který používá k vytváření inzerátů. Tam by šli data pozměnit a následně by přepsal aktuální data v databázi za tyto upravená.

Nahoru Odpovědět  +1 22.2.2015 15:53
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Fredep
Redaktor
Avatar
Odpovídá na Michal Šmahel (ceskyDJ)
Fredep:

Ano, máš pravdu, trochu mě to popletlo. V tom případě si myslím, že mu tam přebývá řádek:

header('Location:administrace.php');

(Michal Kuba) Vytáhne data z databáze a potom stránku přesměruje. Každopádně není tu celý kód, tak to nemůžu posoudit.

Nahoru Odpovědět  +1 22.2.2015 16:02
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
Odpovídá na Fredep
Michal Šmahel (ceskyDJ):

Pokud ty data někam uloží, půjde to i takto. Ovšem bych to řešil v tomto souboru a tento řádek by tam nebyl.

Nahoru Odpovědět 22.2.2015 16:16
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Fredep
Michal Kuba:

Tak ta stránka je vlastně zkopírovaná a jen nachystaná na úpravu inzerátů.. Který kus kódu bych měl ještě pro úplnost dodat?

 
Nahoru Odpovědět 25.2.2015 0:47
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Michal Šmahel (ceskyDJ)
Michal Kuba:

trochu jsem to upravil do jedné stránky PHP, ale když chci zkusit onu editaci, tak mi to právěže vypíše, že inzerát neexistuje:

$inzerat= array(
    'ID' => '',
    'autor' => '',
    'datum_vlozeni' => '',
    'titulek'=>'',
    'text' => '',
    'kategorie' => '',
    'upresneni' => '',
    'mesto' => '',
);
if ($_POST){
    if(!$_POST['ID']){
     if ( isset($_POST['kategorie']) AND isset($_POST['upresneni_' . $_POST['kategorie']]) )
    $upresneni = $_POST['upresneni_' . $_POST['kategorie']];

     $autor = $_SESSION['uzivatel_jmeno'];

            Db::query('
           INSERT INTO inzeraty (autor, datum_vlozeni, titulek, text, kategorie, upresneni,  mesto)
           VALUES (?,CURRENT_TIMESTAMP(),?, ?, ?, ?, ?)
             ',$autor, $_POST['titulek'], $_POST['text'], $_POST['kategorie'],$upresneni,$_POST['mesto'] );

            header('Location: podat_inzerat.php');
                        exit();

}
else
        {
                Db::query('
                        UPDATE inzeraty
                        SET titulek=?, text=?, kategorie=?, upresneni=?, mesto=?
                        WHERE ID=?
                ',  $_POST['titulek'], $_POST['text'], $_POST['kategorie'],$upresneni, $_POST['mesto'], $_POST['ID']);
        }
        header('Location: administrace.php');
        exit();
    }
    else if (isset($_GET['ID']))
{
        $nactenyClanek = Db::queryOne('
                SELECT *
                FROM inzeraty
                WHERE ID=?
        ', $_GET['ID']);
        if ($nactenyInzerat)
                $inzerat = $nactenyInzerat;
        else
                $zprava = 'Inzerát nebyl nalezen';
}
 
Nahoru Odpovědět 25.2.2015 16:47
Avatar
Fredep
Redaktor
Avatar
Odpovídá na Michal Kuba
Fredep:

Máš tam malou chybičku ke konci. Data načítáš do proměnné $nactenyClanek, ale potom používáš jinou proměnnou $nactenyInzerat­... ;)

Nahoru Odpovědět 25.2.2015 16:53
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Fredep
Michal Kuba:

Jo vidíš, toho jsem si nevšiml :) už to víceméně funguje, když napíšu nový titulek, text atd tak se to přepíše, jen při otevření editace se mi nevypíší původní hodnoty. :/

 
Nahoru Odpovědět 25.2.2015 16:58
Avatar
Fredep
Redaktor
Avatar
Odpovídá na Michal Kuba
Fredep:

Tak musíš mít někde v kódu chybu. Postupně si testuj proměnné, co obsahují a zjistíš, co děláš špatně. Také by sis mohl psát komentáře a mít pořádek v kódu, odhalíš hodně chyb již tak, že uvidíš, jak moc je daný řádek odsazený od okraje :D

var_dump($inzerat); // Vypíše obsah proměnné, abych se ujistil, že je vše správně.
Nahoru Odpovědět 25.2.2015 17:09
Týmová práce je důležitá proto, aby bylo možno obvinit z neúspěchu někoho jiného.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.