Autor Zpráva
fili
Profil
Chcel by som, aby mi užívateľ vyplnil všetky údaje pri registrácii.
Mám nasledujúci kód, ktorým to chcem overiť, ale nefunguje to ako má.
Kde mám chybu? Ako to má vyzerať správne?

<?
$objekt_chyba=0;
$meno_chyba=0;
$zodpovedna_osoba_chyba=0;
$ulica_chyba=0;
$cislo_chyba=0;
$mesto_chyba=0;
$psc_chyba=0;
$mail_chyba=0;
$www_chyba=0;
$mobil_chyba=0;
$ico_chyba=0;
$dic_chyba=0;
$dic_dph_chyba=0;
$login_chyba=0;
$password_chyba=0;


if ($send !="submitted") {
echo"$form";
}
else {
if (empty($objekt)) {
echo "<b>Chyba:</b> Neuviedli ste oficiálny názov objektu!<br>";
$objekt_chyba=1;
}
if (empty($meno)) {
echo "<b>Chyba:</b> Neuviedli ste Vaše meno!<br>";
$meno_chyba=1;
}
if (empty($zodpovedna_osoba)) {
echo "<b>Chyba:</b> Neuviedli ste meno zodpovednej osoby!<br>";
$zodpovedna_osoba_chyba=1;
}
if (empty($ulica)) {
echo "<b>Chyba:</b> Neuviedli ste Vaše meno!<br>";
$ulica_chyba=1;
}
if (empty($cislo)) {
echo "<b>Chyba:</b> Neuviedli ste číslo domu!<br>";
$cislo_chyba=1;
}
if (empty($mesto)) {
echo "<b>Chyba:</b> Neuviedli ste mesto!<br>";
$mesto_chyba=1;
}
if (empty($psc)) {
echo "<b>Chyba:</b> Neuviedli ste PSČ!<br>";
$psc_chyba=1;
}
if (empty($mail)) {
echo "<b>Chyba:</b> Neuviedli Vašu e-mailovú adresu!<br>";
$mail_chyba=1;
}
if (empty($www)) {
echo "<b>Chyba:</b> Neuviedli ste PSČ!<br>";
$www_chyba=1;
}
if (empty($mobil)) {
echo "<b>Chyba:</b> Neuviedli číslo telefónu alebo mobilu!<br>";
$mobil_chyba=1;
}
if (empty($ico)) {
echo "<b>Chyba:</b> Neuviedli ste IČO!<br>";
$ico_chyba=1;
}
if (empty($dic)) {
echo "<b>Chyba:</b> Neuviedli ste DIČ!<br>";
$dic_chyba=1;
}
if (empty($login)) {
echo "<b>Chyba:</b> Neuviedli ste login/prihlasovacie meno!<br>";
$login_chyba=1;
}
if (empty($password)) {
echo "<b>Chyba:</b> Neuviedli ste heslo!<br>";
$password_chyba=1;
}

if (($objekt_chyba) || ($meno_chyba) || ($zodpovedna_osoba_chyba) || ($ulica_chyba) || ($cislo_chyba) || ($mesto_chyba) || ($psc_chyba) || ($mail_chyba) || ($www_chyba) || ($mobil_chyba) || ($ico_chyba) ||  ($dic_chyba) ||($login_chyba) || ($password_chyba)) {
echo "$form";
} else {
echo "dáta sa spracovávajú<br />";
echo "<em>$meno</em> uviedli ste tieto udaje <em>$objekt</em>", "<em>$zodpovedna_osoba</em>", "<em>$ulica</em>", "<em>$cislo</em>", "<em>$mesto</em>", "<em>$psc</em>", "<em>$mail</em>", "<em>$www</em>", "<em>$mobil</em>", "<em>$ico</em>", "<em>$dic</em>", "<em>$ic_dph</em>","<em>$login</em>", "<em>$password</em>";
}
 }

$objekt = $_POST['objekt'];
$meno = $_POST['meno'];
$zodpovedna_osoba = $_POST['zodpovedna_osoba'];
$ulica = $_POST['ulica'];
$cislo = $_POST['cislo'];
$mesto = $_POST['mesto'];
$psc = $_POST['psc'];
$mail = $_POST['mail'];
$www = $_POST['www'];
$mobil = $_POST['mobil'];
$ico = $_POST['ico'];
$dic = $_POST['dic'];
$ic_dph = $_POST['ic_dph'];
$login = $_POST['login'];
$password = sha1($_POST['password']);

$objekt=MySQL_Real_Escape_String($objekt);
$meno=MySQL_Real_Escape_String($meno);
$zodpovedna_osoba=MySQL_Real_Escape_String($zodpovedna_osoba);
$ulica=MySQL_Real_Escape_String($ulica);
$cislo=MySQL_Real_Escape_String($cislo);
$mesto=MySQL_Real_Escape_String($mesto);
$psc=MySQL_Real_Escape_String($psc);
$mail=MySQL_Real_Escape_String($mail);
$www=MySQL_Real_Escape_String($www);
$mobil=MySQL_Real_Escape_String($mobil);
$ico=MySQL_Real_Escape_String($ico);
$dic=MySQL_Real_Escape_String($dic);
$dic_dph=MySQL_Real_Escape_String($dic_dph);
$login=MySQL_Real_Escape_String($login);
$password=MySQL_Real_Escape_String($password);


$sql="INSERT INTO owners(objekt, meno, zodpovedna_osoba, ulica, cislo, mesto, psc, mail, www, mobil, ico, dic, ic_dph, login, password) VALUES('$objekt', '$meno', '$zodpovedna_osoba','$ulica', '$cislo', '$mesto', '$psc', '$mail', '$www', '$mobil', '$ico', '$dic', '$ic_dph', '$login', '$password')";
$query=MySQL_Query($sql);

if($query){
echo "<center>Registrácia prebehla v poriadku. Teraz sa môžete <a href=\"../prihlasenie.php\">prihlásiť</a></center><br>";
}
elseif(mysql_errno()){
echo "<center><span style=\"color:red\">Užívateľské meno </span><b>".htmlentities(StripSlashes($login))."</b> <span style=\"color:red\">je obsadené, zvolte </span><a href=\"../registracny-form.php\">iné</a><br></center>";
}
else {
echo "<center>Údaje sa nepodarilo vložiť! Vyplňte znova pozorne formular.<br><br>";
echo "<span style='color:red'>".MySQL_Error()."</span></center><br>";
}

mysql_close();
?>

Moderátor Kajman: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
Kajman
Profil
fili:

Když budete používat editor, který umí odsazovat kód v závorkách, snadno zjistíte, že kód na řádcích 88 až 133 má být před ukočující závorkou na řádku 85.
fili
Profil
Kajman:
Vďaka, presunul som to, ale aj tak to nefunguje, musí byť ešte niekde chyba.
Používam PSPad a mám zobrazené číslovanie riadkov, aj farebné rozlíšenie kódu a nevykazovalo mi žiadnu chybu v syntaxe. Mám tam ešte niečo nastaviť pre lepšiu prácu s PHP?
Tori
Profil
fili:
Máte zapnuté register_globals nebo ne? Chvílemi to vypadá že ano (řádky 19-86), jinde že ne (zbytek skriptu).
Pokud je register_globals vypnuté, tak na ř.19 má být zřejmě $_POST['send'], dtto všechny ostatní až po ř.86. Když všechna pole ověřujete stejným způsobem, tak by validace mohla být i trochu přehledější, např.:
$chyby = array();
// klic = název pole z formuláře, hodnota = chyb.hláška
$hlasky = array(
    'objekt' => 'Neuviedli ste oficiálny názov objektu.',
    'meno' => 'Neuviedli ste meno.',
);

if (isset($_POST['send']) && $_POST['send'] == 'submitted') {
    // validace:
    foreach ($hlasky as $pole => $hlaska) {
        if (empty($_POST[$pole])) {
            $chyby[] = $hlaska;
        }
    }

    if (!empty($chyby)) {
        echo '<b>Chyba: '.implode('<br>', $chyby).'</b>';
    } else {
        // ulozeni dat
    }
}
fili
Profil
Tori:
Vďaka, vyzerá to, že to bude fungovať, len si nie som celkom istý
overením toho loginu.
A nefunguje mi ešte aj prihlásenie s použitím session
  <? session_start()?>
<html>
  <head>
  </head>
    <body>
   
<?php
   error_reporting(E_ALL);?>
 <?

$login = $_POST['login'];
$password = sha1($_POST['$password']);

$result = mysql_query("SELECT $password FROM owners WHERE login='login'");
$row = mysql_fetch_row($result); 

if($password == $row[0])
{
    $_SESSION['prihlaseny'] = 'ano';
  }
else
{
    echo "Uviedli ste nesprávne meno alebo heslo!";
}
?>

   </body>
</html>
Kajman
Profil
$result = mysql_query("SELECT `password` FROM owners WHERE login='".mysql_real_escape_string($login)."'");
fili
Profil
Kajman:
Dakujem, ale nefunguje to.
Tori
Profil
ř.12, znak navíc: $password = sha1($_POST['$password']);
fili
Profil
Tori:
Vďaka, to som si nevšimol, ale aj tak mi stále vyhadzuje
"Uviedli ste nesprávne meno alebo heslo!"
Pričom heslo a meno v databáze sú.
Tori
Profil
fili:
Dočasně můžete podmínku změnit takhle, abyste zjistil, kde je chyba. Na ostrý web je samozřejmě vhodnější nechat tak, jak to máte (aby se nedalo poznat, jestli bylo špatně jméno nebo heslo).
if (empty($row))
{
    echo 'Uživatel nenalezen.';
}
elseif($password == $row[0])
{
    $_SESSION['prihlaseny'] = 'ano';
}
else
{
    echo 'Špatné heslo.';
}
fili
Profil
Tori:
Vyhaddzuje "Špatné heslo." Zrejme bude problem s tym, ze na heslo je použité sha1 a nejak to nejde spätne rozšifrovať. Alebo nie? Ja sa na tom učím a nemám skúsenosti, tak to nedokážem presne odhadnúť.
PostCC
Profil
fili:
A proč to heslo rozšifrovávat? Porovnávejte SHA1 otisk zaslaného hesla s otiskem v databázi, tím jednoznačně poznáte, zda se shodují či nikoli, víc vědět nepotřebujete.
fili
Profil
PostCC:
Nestačí, že to mám takto zadefinované?
$password = sha1($_POST['password']);
Ako vyzerá kód na také porovnanie?
Tori
Profil
fili:
na heslo je použité sha1 a nejak to nejde spätne rozšifrovať
Aha, a v databázi máte heslo uložené jako obyčejný text, nebo otisk hesla? Má být sha1($heslo) (= otisk). Info o rozdílu mezi otiskem a zašifrováním najdete např. tady: Nejčastější potíže s PHP (FAQ) » Jak získat zpět text zakódovaný přes MD5 (SHA-1, SHA-256, …)?
fili
Profil
Tori:
Som z toho celkom jeleň.
V DB to vyzerá asi takto fc069f9f27
A mám to nastavené ako VARCHAR a UNIQUE kľúč.
Micruss
Profil
varchar na kolik písmen?
fili
Profil
Micruss:
10, treba to nastaviť nejak inak??
juriad
Profil
fili:
Funkce SHA1 vrací buď 40 (výchozí nastavení) nebo 20 znaků. Databáze znaky, které se nevejdou do nastaveného limitu (10 znaků) tiše zahodí. Nastav v databázi délku hesla alespoň 40 znaků a ulož heslo znovu.
Kajman
Profil
fili:
A mám to nastavené ako VARCHAR a UNIQUE kľúč.

Z jakého důvodu nesmí mít dva uživatelé stejné heslo?
fili
Profil
juriad:
Vďaka za radu, to som nevedel. Prestavil som, ale nejde mi to.
Som to dosť rozvŕtal - teraz to mám takto, samozrejme
<? session_start()?> mám pred <html>:

$login = $_POST['login'];
$password = sha1($_POST['password']); 

$result = mysql_query("SELECT `password` FROM owners WHERE login='".mysql_real_escape_string($login)."'");
$row = mysql_fetch_row($result); 
if (empty($row))
{
    echo 'Uživatel nenalezen.';
}
elseif($password == $row[0])
{
    $_SESSION['prihlaseny'] = 'ano';
}
else
{
    echo 'Špatné heslo.';
}
jenikkozak
Profil
Jak konkrétně se to nejití projevuje?
fili
Profil
Kajman:
Neviem, nastavoval som to po logine a prišlo mi to vhodné, ale teraz, keď si na to upozornil, tak to vidím z iného uhla pohľadu. Takéto nastavenie sedí skôr pre login. Ale to by nemalo mať vplyv na prihlásenie, alebo áno?
jenikkozak
Nevypisuje nič.
fili
Profil
jenikkozak:
Oprava: vypisuje Špatné heslo


jenikkozak:
Tak som to upravil
 <?

$login = $_POST['login'];
$password = sha1($_POST['password']); 

$result = mysql_query("SELECT `password` FROM owners WHERE login='".mysql_real_escape_string($login)."'");
$row = mysql_fetch_row($result); 

if($password == $row[0])
{
    $_SESSION['prihlaseny'] = 'ano';
echo "<div><a href=../vlozit-udaje.php\">vlozte údaje </a><br />;<a href=../aktualizacia-udajov.php\">Aktualizácia údajov</a></div>";
  }
else
{
    echo "Uviedli ste nesprávne meno alebo heslo!";
}
?>

A vypisuje linky "vlozte údaje Aktualizácia údajov"
Takže by to asi malo fungovať, alebo nie?
Robím to 1x, tak nemám skúsenosti.
Prihlasovacie údaje mam v jednej tabuľke a údaje chcem vkladať do druhej, len presne neviem ako má vyzerať kód.
Z toho linku, čo mi vyhodilo mi údaje do druhej tabuľky nevložilo, tak neviem...

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: