Autor Zpráva
anubis
Profil *
Dobrý deň
potreboval by som poradiť ako vypísať chybovú hlášku po nevyplnení formulárového poľa na správne miesto, teraz sa mi stále vypisuje nad formulár a nie vedľa daného poľa

<?php
error_reporting(E_ALL ^ E_NOTICE);
$posledni_stranka = 1;

function check_email($email) {
  $atom = '[-a-z0-9!#$%&\'*+/=?^_`{|}~]';
  $domain = '[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])';
  return preg_match(":^$atom+(\\.$atom+)*@($domain?\\.)+$domain\$:i", $email);
}
if (!$_POST) {
    $stranka = 0;
    $registrace = array();
} else {
    $stranka = intval($_POST["stranka"]);
    $form_id = (isset($_POST["form_id"]) ? intval($_POST["form_id"]) : count($_SESSION["registrace"]));
    $registrace = &$_SESSION["registrace"][$form_id];
    $chyba = "";
    
    // uložení vyplněných hodnot
    foreach ($_POST as $key => $val) {
        if ($key != "form_id" && $key != "zpet" && $key != "stranka") {
            $registrace[$key] = $val;
        }
    }
    
    if ($_POST["zpet"]) {
        $stranka--;
    } else {
        
        // kontrola vyplněných hodnot
        switch ($stranka) {
            case 0:
                if (!strlen($_POST["jmeno"])) {
                    $chyba .= "Jméno nesmí být prázdné.\n";
                }
                if (!strlen($_POST["priezvisko"])) {
                    $chyba .= "priezvisko nesmí být prázdné.\n";
                }
            break;
            case 1:
                if (!check_email($_POST["email"])) {
                    $chyba .= "Vyplňte prosím e-mail.\n";
                }
                if (!$chyba && !mysql_query("INSERT INTO uzivatele (jmeno, email) VALUES ('" . mysql_real_escape_string($registrace["jmeno"]) . "', '" . mysql_real_escape_string($registrace["email"]) . "')")) {
                    $chyba = "Data se nepodařilo uložit.";
                }
                if (!$chyba) {
                    header("Location: ok.php");
                    exit;
                }
            break;
        }
        if (!$chyba) {
            $stranka++;
        }
    }
}

// vypsání formuláře
echo "<form action='' method='post'>\n";
if ($_POST) {
    echo "<input type='hidden' name='form_id' value='$form_id' />\n";
    echo "<input type='hidden' name='stranka' value='$stranka' />\n";
    if ($chyba) {
        echo "<p>$chyba</p>\n";
    }
}
switch ($stranka) {
    case 0:
        echo"<table border='0'> ";
        echo '<tr><td>Jméno:</td><td> <input name="jmeno" value="' . htmlspecialchars($registrace["jmeno"]) . '" /></td><td>ako dat sem vypis chybocej hlasky?</td></tr>';
         echo '<tr><td>Priezvisko:</td><td> <input name="jmeno" value="' . htmlspecialchars($registrace["jmeno"]) . '" /></td><td></td></tr>';
    break;
    case 1:
        echo 'E-mail: <input name="email" value="' . htmlspecialchars($registrace["email"]) . '" />';
    break;
}
echo "<tr><td></td><td><input type='submit' value='" . ($stranka < $posledni_stranka ? "Další" : "Dokončit") . "' />\n";
if ($stranka) {
    echo "\n<input type='submit' name='zpet' value='Zpět' />\n";
}
echo "Strana: " . ($stranka + 1) . "/" . ($posledni_stranka + 1) . "\n";
echo "</form></td><tr></table>";
?>
_es
Profil
anubis:
Pochybujem, že bude niekto v hlave krokovať henten PHP kód a rozmýšľať, čo možno vygeneruje. Ide o problém s HTML, tak z toho vyrob taký problém. Zo zbežného pohľadu to vyzerá na problém s počiatočnými a ukončovacími značkami. Kde začínajú a končia formulár, tabuľka, riadky, bunky?
anubis
Profil *
_es:
zbežného pohľadu to vyzerá na problém s počiatočnými a ukončovacími značkami. Kde začínajú a končia formulár, tabuľka, riadky, bunky?
s týmto problém nie je a jedná sa o viacstrankový formulár
_es
Profil
anubis:
s týmto problém nie je
Myslím, že je. Skontroloval si si to? Pozrel si si vôbec v prehliadači, čo ti PHP skript vygeneroval?
aDAm
Profil
anubis:
ako dat sem vypis chybocej hlasky?

co takhle ho tam dát úplně stejně jako je nahoře?

    if ($chyba) {
        echo "<p>$chyba</p>\n";
    }

jen si ty chyby logovat do pole a jako index např použít name toho formulářového elementu?

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: