Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
BF extended 2022
Avatar
Patrik Strišovský:20.1.2021 18:01

Zdravím, mám formulár ktorý má action na PHP script v inom súbore, a chcem dosiahnuť to, že keď niekde nastane chyba pri registrácii tak sa ukáže chybová hláška (to už mám) a následne doterajšie vložené hodnoty vo formulári zostanú, lenže skúšal som čo som našiel a fungovalo mi to len vtedy ak ten script bol v tom istom súbore, ale to ja nechcem pre poriadok v kóde.

Zkusil jsem: Formulár vyzerá takto

<form action="_inc/register.php" method="POST" id="send-form">
                <label>
                    Meno
                    <input class="display-block" type="text" name="name" id="name" value="<?= htmlspecialchars( $name ) ?>">
                </label>

                <label>
                    E-mail
                    <input class="display-block" type="text" name="email" value="<?= htmlspecialchars( $email ) ?>">
                </label>
                <button type="submit">Registrovať</button>
            </form>

ešte nad samotným formulárom mám premenné v podobe:

$name =  ( isset($_POST['name'] ) ) ? $_POST['name'] : '';
$email =  ( isset($_POST['email'] ) ) ? $_POST['email'] : '';

a práve pomocou toho sa snažím získať dáta z metódy POST a vložiť to do formulára:

value="<?= htmlspecialchars( $email ) ?>"

lenže ako som už spomínal funguje mi to len ak script beží v tom istom súbore, a taktiež som skúšal prepísať kód na takúto podobu ale to tiež nefungovalo.

$name =  ( isset($$_SESSION['name'] ) ) ? $$_SESSION['name'] : '';
$email =  ( isset($$_SESSION['email'] ) ) ? $$_SESSION['email'] : '';

Tak by som poprosil o nejaké rady.
Vopred ďakujem :)

Odpovědět
20.1.2021 18:01
Život by byl mnohem snazší, kdybychom k němu měli zdrojové kódy.
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:26.1.2021 8:33

--- 1 ---

var_dump(
  $name,
  isset($_POST['name'],
  isset($_SESSION['name']),
  isset($$_SESSION['name'])
); // toto vypise co, kdyz to das pred formular a kdyz to das hned za kod z isset?

--- 2 ---
Udelej jednoduchy testovaci priklad, kde mas jen minimum, jen pro testy a ten sem dej cely. Z toho zadani problemu se neda poznat, kde ten kod mas umisteny. Zdanlive vypada ok.

$name =  ( isset($_POST['name'] ) ) ? $_POST['name'] : '';
$name =  isset($_POST['name'] ) ? $_POST['name'] : ''; // se da napsat i takhle

$name =  ( isset($$_SESSION['name'] ) ) ? $$_SESSION['name'] : ''; // touto nerozumim
$name =  isset($_SESSION['name'] ) ? $_SESSION['name'] : '';
// $$x = ${$x} = ${'name'}

// kdyz $_SESSION['name'] = 'tonda';
// pak $$_SESSION['name'] = ${'tonda'} = $tonda
// a pak $name = $tonda

// kdyz $_SESSION['name'] = 'lojza';
// pak $$_SESSION['name'] = ${'lojza'} = $lojza
// a pak $name = $lojza

Jakoze se tak da php rici, z jakeho promena-jmeno ma tahat data. Ale to se moc nedoporucuje takhle pouzivat, pokud nevis, co delas a nemas to tak zamerne. Takze mi prijde, ze jsi to omylem napsal spatne.
Mno, a ted je samozrejme otazka, co tam mas v kodu dal a jak to mas celkove napsane. Kdyz to napises takhle v urcitem poradi, tak si prepises $name nejakym nesmyslem, protoze v $$_SESSION['name'] nemas nic ulozene
--- 3 ---
No, a zapni si error_reporting.
Zkontroluj si, kde mas session_start, jestli tam chces mit session.
A pouzivas pro externi soubor include nebo require? V tom je dost rozdil. Pokud require, tak ti globalni promene nemusi fungovat, pokud predtim nedas v souboru global $name, $email;.To je lepsi dat do toho souboru funkci, ktera prevezme data a vrati pole a nechat v tom druhem php-html neco jako

<?php
$form = formFromRequest($_POST); // $form = array(); $form['name'] = isset($_POST['name'] ) ? $_POST['name'] : ''
?>
...
<input class="display-block" type="text" name="name" id="name" value="<?= htmlspecialchars( $form['name'] ) ?>">
 
Nahoru Odpovědět
26.1.2021 8:33
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 2 zpráv z 2.