Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php i mysql] problem z skryptem rejestracji i logowania
Forum PHP.pl > Forum > Przedszkole
terabit
Witam, w poniższym skrypcie wszystko dział mi poprawnie z wyjątkiem wysyłania e-maila do użytkownika. Bardzo proszę o pomoc, co zrobić aby to zadziałało. ( kod z strony: http://algorytmy.pl/?id=1000 )
ps. nie działa i na localhoscie i na serwerze w bytehost

rejestracja.php
Kod
<?
$mysql_host = "localhost";
$mysql_login = "root";
$mysql_haslo = "";
$mysql_baza = "mysql";
$mysql_tabela = "logowanie";
$twoj_adres = "mariusz91@gmail.com";

$opcja = trim($_REQUEST["opcja"]);

if ($opcja=="test") {

  // **************************************************
  // ********** 1. sprawdzenie danych i dodanie uzytkownika
  // **************************************************

  $login = htmlspecialchars(stripslashes(trim($_POST["login"])), ENT_QUOTES);
  $haslo = htmlspecialchars(stripslashes(trim($_POST["haslo"])), ENT_QUOTES);
  $email = htmlspecialchars(stripslashes(trim($_POST["email"])), ENT_QUOTES);
  $imie = htmlspecialchars(stripslashes(trim($_POST["imie"])), ENT_QUOTES);

  if (strlen($login)<3 or strlen($login)>50
      or !eregi("^[a-zA-Z0-9_.]+$",$login)) { $blad++;
    echo "<span style=\"color:red;\">Login musi mieć od 3 do 50 znaków
    bez polskich liter i spacji!</span><br />";
  } else {
    if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
      if (mysql_select_db($mysql_baza)) {
       $wynik=mysql_query("SELECT * FROM $mysql_tabela WHERE login='$login'");
      } else echo "Nie można połączyć się z bazą";
      mysql_close($baza);
    } else echo "Nie można połączyć się z serwerem MySQL";
    if (mysql_num_rows($wynik)<>0) { $blad++;
      echo "<span style=\"color:red;\">Login już został przez kogoś użyty!.
      Zaproponuj inny!</span><br />";
    }
  }

  if (strlen($haslo)<6 or strlen($haslo)>50
     or !eregi("^[a-zA-Z0-9]+$",$haslo)) { $blad++;
    echo "<span style=\"color:red;\">Hasło musi mieć od 6 do 50 znaków
    bez polskich liter i spacji!</span><br />";
  }

  if (!eregi("^[0-9a-z_.-]+@([0-9a-z-]+.)+[a-z]{2,4}$",$email)) { $blad++;
    echo "<span style=\"color:red;\">E-mail nie został
    podany prawidłowo!</span><br />";
  }

  if ($blad==0) {
    $kod = uniqid(rand());
    $haslo = md5($haslo); // zaszyfrowanie hasla
    if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
      if (mysql_select_db($mysql_baza)) {
        $wynik = mysql_query("INSERT INTO $mysql_tabela
        VALUES('$login', '$haslo', '$kod', 1, NOW(), '$email', '$imie')");
      } else echo "Nie można połączyć się z bazą";
      mysql_close($baza);
    } else echo "Nie można połączyć się z serwerem MySQL";

    if ($wynik) {
$list="
Aby potwierdzic rejestracje kliknij w ciagu 48 godzin na adres:
http://mariuszw.info/re/rejestracja.php?opcja=potwierdz&kod=$kod
Jezeli nie chcesz sie rejestrowac, zignoruj ten list.
";
      mail($email, "Rejestracja", $list, "From: <$twoj_adres>");
      echo "<p>Aby dokończyć proces rejestracji odbierz e-mail</p>";
    }
  } else $opcja="";
}

if ($opcja=="") {

  // **************************************************
  // ********** 2. formularz zakładania konta
  // **************************************************

echo <<<KONIEC
<form action="rejestracja.php" method="post">
<input type="hidden" name="opcja" value="test" />
<table>
<tr>
  <td>login:*</td>
  <td><input type="text" name="login" value="$login" /></td>
</tr>
<tr>
  <td>hasło:*</td>
  <td><input type="password" name="haslo" value="$haslo" /></td>
</tr>
<tr>
  <td>e-mail:*</td>
  <td><input type="text" name="email" value="$email" /></td>
</tr>
<tr>
  <td>imie i nazwisko:</td>
  <td><input type="text" name="imie" value="$imie" /></td>
</tr>
<tr>
  <td> </td>
  <td><input type="submit" value=" OK, rejestruję się!" /></td>
</tr>
</table>
</form>
KONIEC;
}


if ($opcja=="potwierdz") {
  // **************************************************
  // ********** 3. potwierdzenie rejestracji, uaktywnienie uzytkownika
  // **************************************************

  $kod = htmlspecialchars(stripslashes(trim($_GET["kod"])), ENT_QUOTES);
  if ($kod<>"") {
    if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
      if (mysql_select_db($mysql_baza)) {
        $wynik = mysql_query("DELETE FROM $mysql_tabela
          WHERE data<=DATE_SUB(NOW(),INTERVAL 2 DAY) and status=1");
        $wynik = mysql_query("UPDATE $mysql_tabela
          SET status='5', data=NOW() WHERE kod='$kod' and status=1");
        $wynik = mysql_query("SELECT * FROM $mysql_tabela
          WHERE kod='$kod' and status=5");
      } else echo "Nie można połączyć się z bazą";
      mysql_close($baza);
    } else echo "Nie można połączyć się z serwerem MySQL";
    if (mysql_num_rows($wynik)==1) {
      $dane = mysql_fetch_array($wynik);
      echo "<p>Dziękujemy. Rejestracja została zakończona poprawnie.</p>";
    }
  }
  if ($kod=="" or mysql_num_rows($wynik)<>1) {
    echo "<p>Rejestracja nie może zostać dokończona -
    sprawdź czy link jest poprawny!</p>";
  }
}



if ($opcja=="przypomnij") {

  // **************************************************
  // ********** 4. formularz przypominania danych
  // **************************************************

echo <<<KONIEC
<p>Wpisz login użyty podczas rejestracji.
Po chwili otrzymasz mailem nowe hasło.</p>
<form action="rejestracja.php" method="post">
<input type="hidden" name="opcja" value="wyslijhaslo" />
<table>
<tr>
  <td>login:</td>
  <td><input type="text" name="login" value="$login" /></td>
</tr>
<tr>
  <td> </td>
  <td><input type="submit" value=" przypomnij " /></td>
</tr>
</table>
</form>
KONIEC;
}


function haslo() {
  $min = 6; $max = 12;
  for($i=0;$i<rand($min,$max);$i++) {
    $znak=chr(rand(48,122));
    if (eregi("[0-9a-zA-Z]",$znak)) $haslo .= $znak;
    else $i--;
  }
  return $haslo;
}


if ($opcja=="wyslijhaslo") {

  // **************************************************
  // ********** 5. zmiana hasla i wyslanie go do uzytkownika
  // **************************************************

  $login = htmlspecialchars(stripslashes(trim($_POST["login"])), ENT_QUOTES);
  $hasloczytelne = haslo();
  $haslo = md5($hasloczytelne);
  if ($login<>"") {
    if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
      if (mysql_select_db($mysql_baza)) {
        $wynik = mysql_query("UPDATE $mysql_tabela
        SET haslo='$haslo' WHERE login='$login' and status=5");
        $wynik = mysql_query("SELECT * FROM $mysql_tabela
           WHERE login='$login' and status=5");
      } else echo "Nie można połączyć się z bazą";
      mysql_close($baza);
    }
    if (mysql_num_rows($wynik)==1) {
      $dane = mysql_fetch_array($wynik);
      $email = $dane["email"];
      $list="Oto przypominane haslo: $hasloczytelne";
      mail($email, "Przypomnienie hasla", $list,"From: <$twoj_adres>");
      echo "<p>Hasło zostało wysłane mailem...</p>";
    } else {
      echo "<p>Użytkownik o podanym loginie nie istnieje!</p>";
    }
  }
}
?>


zmiana.php
Kod
<?
session_start();

$mysql_host = "localhost";
$mysql_login = "root";
$mysql_haslo = "";
$mysql_baza = "mysql";
$mysql_tabela = "logowanie";

$opcja = trim($_REQUEST["opcja"]);


if ($opcja=="zmien" and $_SESSION["zalogowany"]=="tak") {
  $haslo = htmlspecialchars(stripslashes(trim($_POST["haslo"])), ENT_QUOTES);
  $imie = htmlspecialchars(stripslashes(trim($_POST["imie"])), ENT_QUOTES);

  if (strlen($haslo)<6 or strlen($haslo)>50
     or !eregi("^[a-zA-Z0-9]+$",$haslo)) { $blad++;
    echo "<span style=\"color:red;\">Hasło musi mieć od 6 do 50 znaków
    bez polskich liter i spacji!</span><br />";
  }

  if ($blad==0) {
    $kod = uniqid(rand());
    $haslo = md5($haslo); // zaszyfrowanie hasla

    if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
      if (mysql_select_db($mysql_baza)) {
        $wynik = mysql_query("UPDATE $mysql_tabela
        SET haslo='$haslo', imie='$imie' WHERE login='{$_SESSION["login"]}'");
      } else echo "Nie można połączyć się z bazą";
      mysql_close($baza);
    } else echo "Nie można połączyć się z serwerem MySQL";
    if ($wynik) {
      echo "Dane zostały zmienione";
      $_SESSION["imie"]=$imie;
    }
  } else echo "Dane nie zostały zmienione!";
}


if ($_SESSION["zalogowany"]=="tak") {

    if ($baza = mysql_connect($mysql_host, $mysql_login, $mysql_haslo)) {
      if (mysql_select_db($mysql_baza)) {
        $wynik=mysql_query("SELECT * FROM $mysql_tabela WHERE
          login='{$_SESSION["login"]}'");
        if (mysql_num_rows($wynik)==1) {
          $dane=mysql_fetch_array($wynik);

echo <<<KONIEC
<form action="zmiana.php" method="post">
<input type="hidden" name="opcja" value="zmien" />

<table>
<tr>
  <td align="right">hasło: </td>
  <td><input type="password" name="haslo" /></td>
</tr>
<tr>
  <td align="right">imie i nazwisko: </td>
  <td><input type="text" name="imie" value="{$dane["imie"]}" /></td>
</tr>
<tr>
  <td colspan="2" align="right">
  <input type="submit" value="zmien" /></td>
</tr>
</table>
</form>
KONIEC;
        }
      } else echo "Nie można połączyć się z bazą";
      mysql_close($baza);
    } else echo "Nie można połączyć się z serwerem MySQL";

}

?>
Olimpia_ona
1. Czy w ogóle na serwerze działa wysyłanie maili? Napisz najprostszy skrypt z samą funkcją mail() i wyślij do siebie maila.
2. Jeśli działa wysyłanie maili to pytanie, czy w ogóle wyświetla się napis: echo "<p>Aby dokończyć proces rejestracji odbierz e-mail</p>";
3. Jeśli ten napis się wyświetla to wyświetl też $email i sprawdź, czy wszystko z adresem jest ok.
terabit
1.
<?
mail("mariusz91@gmail.com", "temat listu", "tresc listu");
?>

sprawdzałem i e-maili nie dostałem, ani na o2 ani na gmail, czyli raczej funkcja mail() nie działa, no chyba ze ten skrypt jest zły biggrin.gif

2.
tak wyswietla sie - echo "<p>Aby dokończyć proces rejestracji odbierz e-mail</p>";


Czyli chyba musiałbym to sprawdzić na innym serwerze
devnul
phpmailer i uzyj zewnetrznego serwera smtp
terabit
Ok dzieki za pomoc, i tak na tym serwerze tej stronki nie bede mial, a sprawdzilem na innym i wszystko działa
Pozdrawiam.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.