Registrace, Přihlášení za pomocí MySQL

Programovacie jazyky, rady, poradňa...
$HD_DaDo_Ts
Medium Expert
Medium Expert
Príspevky: 85
Registrovaný: 24 aug 2010, 11:08

Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa $HD_DaDo_Ts »

Zdravím,
Tohle není moje práce ale když to jdu použít tak to trochu předělám třeba zápis do SQL a funguje podle mých představ. Jelikož slyším různě na internetu po různých fórech že hledají Registrace a Přihlašovací stránky k tomu tak to aspoň sem dám a odlákám tak pár spamerů. Možná že nějací zde budou.

Registrace [registrace.php]:

Kód: Vybrať všetko

<?php
 echo '<h1>Registrace</h1>';

   $submit = $_POST['submit'];

   // Data tabulky
   $nick = strtolower(strip_tags($_POST['nick']));
   $skype = strip_tags($_POST['skype']);
   $icq = strip_tags($_POST['icq']);
   $mail = strip_tags($_POST['mail']);
   $date = date("Y-m-d");
      //Strip tag který zakazuje tagy $uznick  = strip_tags($_POST['uznick']);
      // md5 která zasifruje heslo $passone = md5($_POST['passone']);
      //$passone = md5(strip_tags($_POST['passone']));
      //$nick = striplower($_POST['skype']);

   $passone = $_POST['passone'];
   $passtwo = $_POST['passtwo'];


      if ($submit)
      {
        //echo "$nick, $skype, $icq, $mail";
        //echo $nick."<br>".$skype."<br>".$icq."<br>".$mail.

        $pripojeni = mysql_connect("127.0.0.1","root","heslo");
        mysql_select_db("web");

        $nickcheck = mysql_query("SELECT nick FROM uzivatele WHERE nick='$nick'");
        $vysl = mysql_num_rows($nickcheck);

        if ($vysl!=0)
        {
           die("Nick už je používán někým jiným !");
        }

         if ($nick&&$skype&&$icq&&$mail&&$passone&&$passtwo)// kontrola vyplněných políček
         {

                 if ($passone==$passtwo)
                   {
                     if (strlen($nick)>25||strlen($skype)>25||strlen($icq)>25||strlen($mail)>25)
                     {
                      echo "Délka políček je max. 25 !";
                     }
                     else
                     {
                       if (strlen($passone)>25||strlen($passone)<6)
                       {
                         echo "Heslo musí mít minimalne 6 a macimalne 25 znaku !";
                       }
                        else
                        {
                                     // Sifra hesel
                                     $passone = md5($passone);// Sifrovani hesla
                                     $passtwo = md5($passtwo);// Sifrovani hesla
                                     //registrace uzivatele
                                     

                                      
                                      $queryregister = mysql_query(" INSERT INTO uzivatele VALUES ('','$nick','$skype','$icq','$mail','$passone','$date')");
                                      
                                      die ("Nyní jste byl zaregistrován do systeém. Dekujeme !");

                        }
                     }
                   }
                   else
                    echo "Nesedí oba hesla !";
         }
         else
          echo "Vyplňtě <b>všechna</b> políčka !!";

      }

?>



<html>
 <head>
  <title>Register</title>
 </head>
    <body>
     <form action='registrace.php' method='POST'>
      <table>
       <tbody>
         <tr>
           <td>Nick</td>
           <td><input type='text' name='nick' value='<?php echo $nick; ?>'>
         </tr>

         <tr>
           <td>Skype</td>
           <td><input type='text' name='skype' value='<?php echo $skype; ?>'>
         </tr>

         <tr>
           <td>ICQ</td>
           <td><input type='text' name='icq' value='<?php echo $icq; ?>'>
         </tr>
         
         <tr>
           <td>E-Mail</td>
           <td><input type='text' name='mail' value='<?php echo $mail; ?>'>
         </tr>
         
         <tr>
           <td>Heslo 1</td>
           <td><input type='password' name='passone'>
         </tr>

         <tr>
           <td>Heslo 2</td>
           <td><input type='password' name='passtwo'>
         </tr>
         
         <tr>
           <td>Reg</td>
           <td><input type='submit' name='submit' value='Registrovat'>
         </tr>
       </tbody>
      </table>
     </form>
    </body>
</html>
Přihlášení [login.php]:

Kód: Vybrať všetko

<?php

  session_start();

  $nick = $_POST['nick'];
  $pass = $_POST['pass'];
  
if ($nick&&$pass)
{
  $connect = mysql_connect("127.0.0.1","root","vertrigo") or die("Nepodarilo se pripojit k MySQl");
  mysql_select_db("web") or die("Nepodařilo se najít DB");
  
  $line = mysql_query("SELECT * FROM uzivatele WHERE nick='$nick'");

  $numrows = mysql_num_rows($line);
  
  if ($numrows!=0)
  {
     // cod pro prihlaseni
     while ($row = mysql_fetch_assoc($line))
     {
       $dbname = $row['nick'];
       $dbpass = $row['pass'];
     }
     
     if ($nick==$dbname&&md5($pass)==$dbpass)
     {
       echo "Jsi prihlasen :) <a href='uzivatel.php'> Administrace </a>";
       $_SESSION['nick']=$nick;
     }
     else
         echo "Nesprávné heslo !";



  }
  else
     die("Tento uživatel neexituje !");


}
else
    die ("Zasej Nick a Heslo !");
?>
Uživatelský panel [uzivatel.php]:

Kód: Vybrať všetko

<?php

session_start();

   if ($_SESSION['nick'])
     echo "Vítej, ".$_SESSION['nick']."!<br><a href='logout.php'>Odhlaseni</a>";
else
     die("Musiš se přihlásit ! <a href='index.php'>Prihlasit !</a>");
?>
Odhlášení [logout.php]:

Kód: Vybrať všetko

<?php
  session_start();
  
  session_destroy();
  
  echo "Byl jsi úspěšně odhlášen. <a href='index.php'>Klikni</a> na login .";
?>
Ještě pro začátečníky aby si nelámali hlavu v PHPMyAdmin a nesnažili si udělat špatné tabulky tak jsem já osobně pro vás udělal tyto. Mám je odskoušené a nehrozí že by měli nějakou chybu.

Kód: Vybrať všetko

CREATE TABLE  `web`.`uzivatele` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nick` VARCHAR( 25 ) NOT NULL ,
`skype` VARCHAR( 25 ) NOT NULL ,
`icq` VARCHAR( 25 ) NOT NULL ,
`mail` VARCHAR( 25 ) NOT NULL ,
`pass` VARCHAR( 25 ) NOT NULL ,
`date` VARCHAR( 25 ) NOT NULL
) ENGINE = MYISAM
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa audiotrack »

to je riadny mišmaš, načo tam máš toto?

Kód: Vybrať všetko

                                     $passone = md5($passone);// Sifrovani hesla
                                     $passtwo = md5($passtwo);// Sifrovani hesla
keď predtým je kontrola že hesla sú rovnaké? Stačí $passtwo = $passone = md5($passone);
pri prihlásení absolútne žiadna kontrola vstupov, taká sql injection diera, že sa ti prihlásim ako admin behom pár minút
Viac sa mi pozerať nechce, ale toto je veľmi zlý kód
$HD_DaDo_Ts
Medium Expert
Medium Expert
Príspevky: 85
Registrovaný: 24 aug 2010, 11:08

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa $HD_DaDo_Ts »

no... je v tom diera vidím... kontroloval som to teraz je tam diera ale znovu to písať nebudem
Ernestos
Light Expert
Light Expert
Príspevky: 48
Registrovaný: 05 mar 2009, 16:34

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa Ernestos »

to je co za hlupost ??? ked dam login.php jedine co tam mam je "Zasej Nick a Heslo !" :-D to akoze ziadny prihlasovaci formular tam neni ??? zisiel by sa :-P
Kofan
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 67
Registrovaný: 06 okt 2010, 17:35

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa Kofan »

Tu sa pocita s tym, ze si ten formular dorobis, co by to bolo, keby ti všetko ponukol jak na tacni?!

//autoeditácia príspevku (25 Nov 2010, 19:11)
Mam jedno vylepsenie...
Namiesto toho:

Kód: Vybrať všetko

 $line = mysql_query("SELECT * FROM uzivatele WHERE nick='$nick'");

  $numrows = mysql_num_rows($line);
  
  if ($numrows!=0)
  {
     // cod pro prihlaseni
     while ($row = mysql_fetch_assoc($line))
     {
       $dbname = $row['nick'];
       $dbpass = $row['pass'];
     }
     
     if ($nick==$dbname&&md5($pass)==$dbpass)
by som dal

Kód: Vybrať všetko

 $line = mysql_query("SELECT * FROM uzivatele WHERE nick='$nick AND pass='$pass' ");

  $numrows = mysql_num_rows($line);
  
  if ($numrows!=0)
  {
   // .... zbytok kodu
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa audiotrack »

trošku ti tam ušli apostrofy v tom query, takže tvoje vylepšie akurát tak hodí parse error
Kofan
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 67
Registrovaný: 06 okt 2010, 17:35

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa Kofan »

ale inac je to dobre?
lama2d
VIP
VIP
Príspevky: 1006
Registrovaný: 24 feb 2005, 14:54
Bydlisko: PostgreSQL

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa lama2d »

Tomu while tam nerozumiem - zbytočnosť :). Ináč ako spomínal audio, sql injection ako hrom. Hlavne to treba opraviť.
Kofan
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 67
Registrovaný: 06 okt 2010, 17:35

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa Kofan »

Mám tu jeden problémik....

Súbor login.php:

Kód: Vybrať všetko

<?php
session_start();
include ('../endora.php');
  if(! isset($_SESSION['meno'])) {
   if (isset($_POST['meno'])) {
  $meno = $_POST['meno'];
  $heslo = md5($_POST['heslo']);
   include('Databasa/db.php');
  $query = mysql_query("SELECT meno FROM trhov WHERE meno='$meno' AND heslo=$heslo");
   if( mysql_num_rows($query) == 1) {
  $_SESSION['meno'] = mysql_result($result,0,"meno");
  $_SESSION['pr_meno'] = mysql_result($result,0,"pr_meno");
echo "Ahoj";}
   } else { include ("login.html");
     }
      } else {
              $name = $_SESSION['meno'];
               echo "Vitajte $meno. Ak sa chcete odhlásiť kliknite <a href='logout.php' title='odhlásiť sa'>TU</a>";
              }

?>
A vôbec mi to neberie... Môžete mi pomôcť???
Mmartin
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2786
Registrovaný: 07 feb 2009, 12:49
Bydlisko: Bratislava

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa Mmartin »

Fuj! Ble! Argh! Taky otrasny kod som nevidel od svojej poslednej prace...
1) SQL ma funkciu md5? som nevedel...
2)mysql_numrows? nie nahodou mysql_num_rows?
boze, sprav si v tom poriadok, tie zatvorky su totalna katastrofa, v tom by sa nevyznal nikto...
Kofan
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 67
Registrovaný: 06 okt 2010, 17:35

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa Kofan »

diky za kritiku.... Tú som už asi dávno potreboval. :) :)
Kód si opravím a skúsim. Díky za pomoc.
P.S. Už tam nie je žiadna chyba?
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa audiotrack »

stale su tam tie chyby co ti napisal. Co si vlastne opravil? A kde?
Kofan
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 67
Registrovaný: 06 okt 2010, 17:35

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa Kofan »

Ci TERAZ tam nie su nejake chyby (okrem zátvoriek, samozrejme)....
Mmartin
Guru
Guru
Používateľov profilový obrázok
Príspevky: 2786
Registrovaný: 07 feb 2009, 12:49
Bydlisko: Bratislava

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa Mmartin »

No skus toto, neprechadzal som znak po znaku, ale aspon som ti to trosku upravil, aby si sa v tom aspon ty sam vyznal..

Kód: Vybrať všetko

<?php
session_start();
  include ('../endora.php');
  if(! isset($_SESSION['meno'])) {
    if(isset($_POST['meno'])) {
      $meno = htmlspecialchars(addslashes($_POST['meno']));
      $heslo = md5(htmlspecialchars(addslashes($_POST['heslo'])));
      include('Databasa/db.php');
      $sql = "SELECT meno FROM trhov WHERE meno='$meno' AND heslo='$heslo'";
      $result = mysql_query($sql);
        if(mysql_num_rows($result)) {
          $_SESSION['meno'] = mysql_result($result,0,"meno");
          $_SESSION['pr_meno'] = mysql_result($result,0,"pr_meno");
          echo("Ahoj");
        }
    }else
      include ("login.html");
  }else{
      $meno = $_SESSION['meno'];
      echo("Vitajte $meno. Ak sa chcete odhlásiť kliknite <a href='logout.php' title='odhlásiť sa'>TU</a>");
  }

?>
Kofan
Light Expert
Light Expert
Používateľov profilový obrázok
Príspevky: 67
Registrovaný: 06 okt 2010, 17:35

Re: Registrace, Přihlášení za pomocí MySQL

Príspevok od používateľa Kofan »

Velmi vrele diky......
Napísať odpoveď