21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Spectrum
Profil *
Mám ďalší problém, mám PHP kód na registráciu:

$meno = $_POST['meno'];
$heslo = sha1($_POST['heslo']); 
}
mysql_query("INSERT INTO uzivatelia(meno,heslo) VALUES('$meno','$heslo' )")
or die("Užívateľa sa nepodarilo registrovať.");
?>

A chcem aby do inputu s name="meno" a name="heslo" nedávali prázdne hodnoty. Skúšal som to cez podmienku if(isset(....)) a if(empty(...)) no vôbec to nechcelo fungovať a do databázy sa stále ukladali prázdne hodnoty. Ako teda docieliť toho aby sa pri zadaní prázdnej hodnoty neposlali údaje do databázy?
Taps
Profil
Spectrum:
$meno = mysql_real_escape_string($_POST['meno']);
$heslo = sha1($_POST['heslo']); 

if(!empty($meno) || !empty($heslo)){
mysql_query("INSERT INTO uzivatelia(meno,heslo) VALUES('$meno','$heslo' )")
or die("Užívateľa sa nepodarilo registrovať.");
}
Kubo2
Profil
Taps:
Myslím, že v tej podmienke by bolo vhodnejšie použiť &&.
juriad
Profil
Taps:
Co když se někdo bude jmenovat 0 nebo bude mít heslo 0? Funkce empty je hloupá, je lepší se držet isset a následně zkontrolovat is_string, že vstup není pole.
Kubo2
Profil
juriad:
...a následne strlen(), či vstup nie je prázdny tj. nulovej dĺžky.
Spectrum
Profil *
Vytvoril som si teda tento kód:

$meno = mysql_real_escape_string($_POST['meno']);
$heslo = sha1($_POST['heslo']); 
 
if(isset($meno) && isset($heslo)){
  if(is_string($meno) && is_string($heslo)){
    if(strlen($meno) > 0 && strlen($heslo) > 0){
mysql_query("INSERT INTO uzivatelia(meno,heslo) VALUES('$meno','$heslo' )")
or die("Užívateľa sa nepodarilo registrovať.");
}else {
  echo "Musíte vyplniť všetky údaje.";
}
}
}

A narazil som na 2 problémy. 1. problém je že hláška "Musíte vyplniť všetky údaje." sa napíše vždy, už hneď po načítaní stránky. 2. problém je že heslo zobere vždy ako vyplnené, pretože je zahashované. Vedeli by ste mi prosím ešte s týmto pomôcť?
Fisir
Profil
Reaguji na Spectruma:
První dva řádky přesuň těsně před mysql_query a v podmínkách nahraď $meno a $heslo za $_POST['meno'], respektive $_POST['heslo'].
Kubo2
Profil
<?php

$empty = array();

if(!isset($_POST['meno']) || !is_string($_POST['meno']) || !strlen($_POST['meno'])) {
    $empty[] = 'meno';
}

if(!isset($_POST['heslo']) || !is_string($_POST['heslo']) || !strlen($_POST['heslo'])) {
    $empty[] = 'heslo';
}

if(!count($empty)) {
    $meno = $_POST['meno']; // bez escapovania, použije sa pri výpise chyby resp. oznámenia o úspechu
    $heslo = sha1($_POST['heslo']); // predpokladám, že heslo sa v pôvodnej podobe nikde nepoužije
    $dotaz = sprintf('INSERT INTO uzivatelia (meno, heslo) VALUES ('%s', '%s' )', mysql_real_escape_string($meno), $heslo);

    if(!mysql_query($dotaz)) {
        printf('Používateľa sa %s nepodarilo zaregistrovať.', htmlspecialchars($meno));
    } else {
        printf('Registrácia používateľa %s bola úspešná.', htmlspecialchars($meno));
    }

    exit;
}

printf('Nevyplnili ste správne %s', join(', ', $empty));
Spectrum
Profil *
Upravil som to podľa Fisira a všetko funguje ako má, vďaka každému.

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