Autor Zpráva
gogy27
Profil
Dobry vecer prajem,
Toto je moj script n prihlasenie ale neviem preco ak $db_aktivovany = 0 sa nevykona ten dany prikaz ale vykona sa header("Location: main.php"); budem rad za kazdu radu
btw:
$query1=mysql_query("SELECT * FROM uzivatelia WHERE nick='$login'");
while ($fetch=mysql_fetch_array($query1)) {
$db_aktivovany = $fetch['aktivovany'];
tato cast kodu je spravna co sa tyka tych udajov tahanych z databazy ale nwm kde sa to zastavy.

 <?php

include_once ('config.php');

session_cache_expire(2);
$cache_expire = session_cache_expire();
session_start();



$login=$_POST['login'];
$passw=$_POST['heslo'];
$md5_passw=MD5("$passw");

if ($login!="Login" && $passw!="Password" && $login!="" && $passw!="") {
         
  $query=mysql_query("SELECT * FROM uzivatelia WHERE nick='$login'");
          
        while ($qfetch=mysql_fetch_array($query)) {
          $db_login = $qfetch['nick'];
          $db_pass = $qfetch['heslo'];
          $db_id = $qfetch['id'];
        }
        
        
          if ($db_login==$login && $db_pass==$md5_passw) {
            $_SESSION['login'] = 1;
            $_SESSION['nick'] = $db_login;
            $_SESSION['id'] = $db_id;
          }  

if ($login =="" && $passw=="") {
echo '<script>alert("Zadali ste zlé meno alebo heslo!")</script>';
          echo '<script>window.location.replace("index.php");</script>';
}

          
          else {
          echo '<script>alert("Zadali ste zle heslo!")</script>';
          echo '<script>window.location.replace("index.php");</script>';
        }

$query1=mysql_query("SELECT * FROM uzivatelia WHERE nick='$login'");
while ($fetch=mysql_fetch_array($query1)) {
          $db_aktivovany = $fetch['aktivovany'];
          }
          
if ($db_aktivovany = 0) {
echo '<script>alert("Aktivacia nebola vykonana!")</script>';
          echo '<script>window.location.replace("aktiv.php");</script>';
}
else
{
            header("Location: main.php");
}


          
          }
?>          
Mastodont
Profil
No protože neporovnáváš, ale přiřazuješ. Musíš tam mít dvě rovnítka.
if ($db_aktivovany == 0) {
gogy27
Profil
mno ale teraz mi pre zmenu vypise zadali ste zle heslo a pritom zadavm spravne
SwimX
Profil
gogy27
ža by tato podmínka?:
if ($login =="" && $passw=="") {
echo '<script>alert("Zadali ste zlé meno alebo heslo!")</script>';
          echo '<script>window.location.replace("index.php");</script>';
}

          
          else {
          echo '<script>alert("Zadali ste zle heslo!")</script>';
          echo '<script>window.location.replace("index.php");</script>';
        }
gogy27
Profil
Dakujem a este posledny problem

<?php
include_once ('config.php');
session_start();
if (isset($_POST['odoslat'])) {
$query1=mysql_query("SELECT * FROM uzivatelia WHERE nick='".$_SESSION['nick']."'");
while ($fetch=mysql_fetch_array($query1)) {
          $db_aktivovany = $fetch['aktivovany'];
          }
          
if ($db_aktivovany == 1) {
echo '<script>alert("Aktivacia uz bola vykonana!")</script>';
          echo '<script>window.location.replace("index.php");</script>';
}
else {

$aktiv = $_POST['aktiv'];
$query=mysql_query("SELECT * FROM uzivatelia WHERE nick='".$_SESSION['nick']."'");

while ($qfetch=mysql_fetch_array($query)) {
          $db_aktiv = $qfetch['aktiv'];
          }
if ($db_aktiv==$aktiv) {
mysql_query("UPDATE clenovia SET aktivovany = 1 WHERE nick = '".$_SESSION['nick']."'");
echo '<script>alert("Teraz sa mozete prihlasit!")</script>';
          echo '<script>window.location.replace("index.php");</script>';
}
          
          else {
          echo '<script>alert("Zadali ste zle aktivacne heslo!")</script>';
          echo '<script>window.location.replace("index.php?clanek=aktiv");</script>';
}
if ($aktiv=="") {
echo '<script>alert("Zadali ste zle aktivacne heslo!")</script>';
          echo '<script>window.location.replace("index.php?clanek=aktiv");</script>';
}
}
}
echo "<b>ZADAJTE AKTIVACNE HESLO, KTORE VAM PRISLO V E-MAILy</b><br>";
?>
<form name="form" method="post"><br>
<input type="text" size="10" maxlength="5" name="aktiv" class="tmave" <?php if(isset($_POST['odoslat'])) {echo "value=\"$aktiv\"";} ?>>
<input type="submit" name="odoslat" class="tmave" value="Overit">
</form>
</body>
</html>

vypise sice Teraz sa mozete prihlasit! ale nevykona sa prikaz mysql_query("UPDATE clenovia SET aktivovany = 1 WHERE nick = '".$_SESSION['nick']."'");
SwimX
Profil
gogy27
neprocházel jsem to celý ale zkus: mysql_query() or die (mysql_error());
Joker
Profil
gogy27
Zkuste si vypsat, co to najde v databázi.

Pár poznámek ke kódu:
1. $md5_passw=MD5("$passw"); - proč si tu proměnnou dáváte ještě do řetězce?
Krom toho proměnná $passw je tam celkem zbytečná.
2. Zbytečně několikrát opisujete stejný kód, ve kterém se mění jen chybová hláška. Bylo by lepší dát hlášku do proměnné a pak to vypsat jen jednou.
3. if ($login!="Login" && $passw!="Password" && $login!="" && $passw!="")
Jednak bych testoval nejen prázdný řetězec, ale obecně jestli není proměnná prázdná, jednak obecnější podmínky dávejte před konkrétnější.
Vyhodnocování podmínek && skončí na první, která je false (trochu zjednodušuju), takže je lepší obecnější podmínky (na kterých to skončí častěji) nacpat dopředu. No a krom toho, například:
if(($_POST["login"] != "něco") && !empty($_POST["login"]))
v případě, že $_POST["login"] bude prázdné vyhodí poznámku, zatímco:
if(!empty($_POST["login"]) && ($_POST["login"] != "něco"))
projde v pořádku, protože skončí už na té první podmínce a druhou ani nezkusí vyhodnotit.

4. Posílat data do databáze bez escapování je dost nebezpečné, s dotazem:
SELECT * FROM uzivatelia WHERE nick='$login'
když zadám jméno: ' OR 1=1--
a nějaké heslo, přihlásím se na prvního uživatele, který má to heslo.

5. Jednodušší než vybrat uživatele a zkontrolovat jeho heslo je kontrolovat jeho heslo rovnou v SQL dotazu:
$login = mysql_real_escape_string($_POST["login"]);
$heslo = md5($_POST["heslo"]);
$sql = "SELECT * FROM uzivatelia WHERE nick='$login' AND heslo='$heslo' AND aktivovany=1"

-> pokud mi ten dotaz něco najde, je to správný uživatel. Pokud nic nenajde, je špatné jméno nebo heslo, nebo není aktivovaný.
gogy27
Profil
Joker
Dakujem za ochotu ucim sa to a preto taketo rady mi su vzdy napomocne :)

1. toto md5 neni moja vyroba tahal som to z nejakeho free prihlasenia kde je metoda zahashovania hesla prave takato
2. To mas pravdu ale uz to radsej nebudem menit :P
3. jednak bych testoval nejen prázdný řetězec, ale obecně jestli není proměnná prázdná
myslis if (!$login)?

if(($_POST["login"] != "něco") && !empty($_POST["login"]))
v případě, že $_POST["login"] bude prázdné vyhodí poznámku, zatímco:
if(!empty($_POST["login"]) && ($_POST["login"] != "něco"))
projde v pořádku, protože skončí už na té první podmínce a druhou ani nezkusí vyhodnotit.

co si chcel tymto povedat?
4. moze byt aj $nick = htmlspecialchars(addslashes($_POST['nick'])); ?

5. ttymto by si nahradil
$login = mysql_real_escape_string($_POST["login"]);
$heslo = md5($_POST["heslo"]);
$sql = "SELECT * FROM uzivatelia WHERE nick='$login' AND heslo='$heslo' AND aktivovany=1"


toto?

$login=$_POST['login'];
$passw=$_POST['heslo'];
$md5_passw=MD5("$passw");
SwimX
Profil
gogy27
1, stačí vyhodit ty uvozovky v md5("$prom") => md5($prom)

3, ne if not login ale if emtpy login
co si chcel tymto povedat?
myslel tím, že „if(!empty($_POST["login"]) && ($_POST["login"] != "něco"))
pokud proměnná neexistuje - tak podmínka !empty bude false -> na to pokračování PHP kašle a rovno vyhodnotí celou podmínku false, čili nebude se snažit porovnávat neexistující proměnnou s řetězcem což by mělo vyhodit nějaký warning, notice (naštěstí se většinou nezobrazují takže je to tak trochu jedno, ale správné to není)

4, jo přesně to.
5, ano
Joker
Profil
gogy27
1. Když chcete hashovat jen obsah proměnné, nemají okolo být uvozovky. Ty jsou naopak správně, když chcete zadat nějaký konkrétní text.

3. Pokud chcete vědět, zda proměnná byla nastavena a něco se v ní nachází, použijte funkci empty() (ta vrátí zda je proměnná prázdná, takže !empty() je zda není prázdná). Pozor, empty() bere jako prázdnou třeba i číselnou proměnnou, ve které je 0.
Pokud chcete vědět, zda je proměnná nastavená, ale přitom je povolená hodnota třeba i 0, použijte isset()

4. Částečně správně- htmlspecialchars slouží k výpisu do stránky, addslashes k zápisu do databáze. Možná lepší než addslashes by bylo použít mysql_real_escape_string, jako jsem to udělal já ve svém příkladu.
gogy27
Profil
oka oka dakujem, ale stale mam nieco v tomto scripte zle preotze ak dam zle heslo ma normalne prihlasi :D a ked tam spravne heslo tak napise aktivacia este nebola vykonana vobec tomu nechapem

<?php

include_once ('config.php');

session_cache_expire(2);
$cache_expire = session_cache_expire();
session_start();



$login=$_POST['login'];
$passw=$_POST['heslo'];
$md5_passw=MD5($passw);

if ($login!="Login" && $passw!="Password" && $login!="" && $passw!="") {
         
  $query=mysql_query("SELECT * FROM uzivatelia WHERE nick='$login'");
          
        while ($qfetch=mysql_fetch_array($query)) {
          $db_login = $qfetch['nick'];
          $db_pass = $qfetch['heslo'];
          $db_id = $qfetch['id'];
        }
        
        
          if ($db_login==$login && $db_pass==$md5_passw) {
            $_SESSION['login'] = 1;
            $_SESSION['nick'] = $db_login;
            $_SESSION['id'] = $db_id;
          }  
          else {
          echo '<script>alert("Zadali ste zle heslo!")</script>';
          echo '<script>window.location.replace("index.php");</script>';
        }

if ($login =="" && $passw=="") {
echo '<script>alert("Zadali ste zlé meno alebo heslo!")</script>';
          echo '<script>window.location.replace("index.php");</script>';
}


$query1=mysql_query("SELECT * FROM uzivatelia WHERE nick='$login'") or die (mysql_error());
while ($fetch=mysql_fetch_array($query1)) {
          $db_aktivovany = $fetch['aktivovany'];
          }
          
if ($db_aktivovany == 0) {
echo '<script>alert("Aktivacia nebola vykonana!")</script>';
          echo '<script>window.location.replace("index.php?clanek=aktiv");</script>';
}
else {
            header("Location: main.php");
}
          }
?>          
SwimX
Profil
gogy27
nepoučitelný :)) takle by to šlo?
<?php

include_once ('config.php');

session_cache_expire(2);
$cache_expire = session_cache_expire();
session_start();

$login = mysql_real_escape_string($_POST["login"]);
$heslo = md5($_POST["heslo"]);

if (!empty($login) && !empty($heslo)) {
  $sql = "SELECT * FROM uzivatelia WHERE nick='$login' AND heslo='$heslo' AND aktivovany=1"; //edit středník
  $query=mysql_query($sql);
          
    $qfetch=mysql_fetch_array($query)
          $db_login = $qfetch['nick'];
          $db_pass = $qfetch['heslo'];
          $db_id = $qfetch['id'];
        
        
          if (!empty($db_login)) { // edit: překlep
            $_SESSION['login'] = 1;
            $_SESSION['nick'] = $db_login;
            $_SESSION['id'] = $db_id;
          }  
          else {
          echo '<script>alert("Zadali ste zle heslo!")</script>';
          echo '<script>window.location.replace("index.php");</script>';
        }
  }
?>      
gogy27
Profil
mno trosku jj nepoucitelny ;)
3 chybycky sa tam nasli ale newa opravil som :) btw: kde mam dat
header("Location: main.php"); tam jak je if (!epmty($db_login)) {
$_SESSION['login'] = 1;
$_SESSION['nick'] = $db_login;
$_SESSION['id'] = $db_id;
}
toto?
SwimX
Profil
gogy27
3 chybycky sa tam nasli ale newa opravil som :)
2 sem našel, třetí nevidím.
if (!epmty($db_login)) { 
$_SESSION['login'] = 1; 
$_SESSION['nick'] = $db_login; 
$_SESSION['id'] = $db_id; 
}

todle se stane pokud to najde nějaký záznam => pokud jedobře zadané heslo a zároveň aktivovaný uživatel.
kdy ho chceš přesměrovat na main.php?
gogy27
Profil
takze ak aktivacia nebola vykonana hodit ho do Aktivacia nebola vykonana "index.php?clanek=aktiv" a ak je spravny nick heslo a aktivacia bola vykonana hodit ho na main.php
SwimX
Profil
gogy27
tak to bude chtít úpravu:
<?php

include_once ('config.php');

session_cache_expire(2);
$cache_expire = session_cache_expire();
session_start();

$login = mysql_real_escape_string($_POST["login"]);
$heslo = md5($_POST["heslo"]);

if (!empty($login) && !empty($heslo)) {
  $sql = "SELECT * FROM uzivatelia WHERE nick='$login' AND heslo='$heslo'"; //edit středník
  $query=mysql_query($sql);
          
    $qfetch=mysql_fetch_array($query); // středníky škaredý
          $db_login = $qfetch['nick'];
          $db_pass = $qfetch['heslo'];
          $db_id = $qfetch['id'];
          $db_akt = $qfetch['aktivovany'];
        
        
          if (!empty($db_login) && $db_akt == 1) { 
           // správné heslo a aktivovaný
            $_SESSION['login'] = 1;
            $_SESSION['nick'] = $db_login;
            $_SESSION['id'] = $db_id;
          }  
          elseif (!empty($db_login) && $db_akt == 0) {
          // správné heslo NEaktivovaný
           header("location: ");
          }
          else {
          //špatné heslo
           header("location: ");
        }
  }
?>  
gogy27
Profil
mno uz mi to fachci :) som rad inac ta chyba je tu $qfetch=mysql_fetch_array($query) taktiez chyba ;
Toto téma je uzamčeno. Odpověď nelze zaslat.