Skocz do zawartości
Michael2318

[PHP/MySQL] Edycja profilu by Michael2318

Polecane posty

Michael2318

Pokażę teraz jak w prosty sposób zrobić edycję profilu.

A więc zaczynajmy

U mnie plik nazywa się profile.php.

Najpierw łączymy się z bazą i dodajemy dwie zmienne, które sprawdzać będą czy user jest zalogowany oraz czy w linku istnieje dopisek: viewprofile_id=X - jeśli tak to zmienne zwrócą TRUE, jeśli nie to zwrócą FALSE.

<?php 
mysql_connect('localhost','root','password') 

       or die('Nieudane połaczenie z baza danych...'); 

mysql_select_db('database_name') 

       or die('Nie udało się wybrać bazy danych...'); 
session_start(); 
$session_logged_in = (isset($_SESSION['nazwa'])) ? TRUE : FALSE; 
$profile = (isset($_GET['viewprofile_id'])) ? TRUE : FALSE;

Teraz jeśli któraś z powyższych zmiennych zwróci false to wypluwamy błąd o tym:

if ( !$profile ) 
{ 
   echo "Link jest niepoprawny!"; 
   exit; 
} 

if ( !$session_logged_in ) 
{ 
   echo "Nie jesteś zalogowany!"; 
   exit; 
}

Jeśli z kolei powyższe zmienne zwróciły TRUE i w linku viewprofile_id=X - X jest równe ID usera, który edytuje dany profil (czyli po polsku, jeśli user jest właścicielem danego profilu) to wykonujemy zapytanie pobierające nam dane o tym userze. Tutaj tez na wszelki wypadek sprawdzamy czy podane w linku ID w ogóle istnieje, jeśli nie to zwracamy błąd:

if ( $session_logged_in && $profile && $_GET['viewprofile_id'] == $_SESSION['nazwa'] ) 
{ 
   $profile_id = intval($_GET['viewprofile_id']); 
   $sql = "SELECT * FROM `users` WHERE id = ".$profile_id.""; 
   $result = mysql_query($sql) 
       or die(mysql_error()); 
   $num = mysql_num_rows($result); 
   if ( $num == 0 ) 
   { 
       echo "Link jest niepoprawny!"; 
       exit; 
   }

W przeciwnym razie, jeśli wszystko jest ok, wyświetlamy formularz:

   else 
   { 
       $row = mysql_fetch_assoc($result); 
       if ( !isset($_POST['submit']) ) 
       { 
           $body = '<form action="profile.php?viewprofile_id='.$profile_id.'" method="post"> 
           Nick: <input type="post" name="username" maxlength="25" value="'.$row['username'].'"><br> 
           E-Mail: <input type="post" name="email" value="'.$row['email'].'"><br> 
           Obecne hasło <span style="font-weight: bold; color: red;">*</span> <input type="password" name="obecne_haslo"><br> 
           Nowe hasło <span style="font-weight: bold; color: red;">*</span> <input type="password" name="nowe_haslo"><br> 
           Powtórz nowe hasło <span style="font-weight: bold; color: red;">*</span> <input type="password" name="powtorz_nowe_haslo"><br> 
           <input type="submit" name="submit" value="Zapisz zmiany"> 
           </form><br><br> 
           <span style="font-weight: bold; color: red;">*</span> - Uzupełnij tylko jeśli chcesz zmienić hasło.'; 
           echo $body; 
       }

Następnie są te same warunki, które są w poradniku dot. rejestracji, więc tutaj już mniej szczegółowo, zawsze można zerknąć do tamtego poradnika i zobaczyć co za co odpowiada:

Jeśli pola: login i email nie są puste oraz pola z hasłami również są uzupełnione to updatujemy to do bazy:

           $login = mysql_escape_string($_POST['username']); 
           $email = mysql_escape_string($_POST['email']); 
           $password = md5($_POST['obecne_haslo']); 
           $first_password = md5($_POST['nowe_haslo']); 
           $second_password = md5($_POST['powtorz_nowe_haslo']); 
           if ( !empty($login) && !empty($email) && md5($login) !== $first_password && $password == $row['password'] && !empty($_POST['nowe_haslo']) && !empty($_POST['powtorz_nowe_haslo']) && $first_password == $second_password && filter_var($email, FILTER_VALIDATE_EMAIL) && strlen($login) > 3 && strlen($_POST['nowe_haslo']) > 5 && preg_match( "/^[a-zA-Z0-9_ ]+$/" , $login) ) 
           { 
               $sql = "SELECT * FROM `users` WHERE id != ".$_SESSION['nazwa']." AND (email = '".$email."' OR username = '".$login."')"; 
               $result = mysql_query($sql) 
                   or die("Nie udalo sie pobrac danych"); 
               $num = mysql_num_rows($result); 
               if ( $num == 0 ) 
               { 
                   $sql = "UPDATE `users` SET username = '".$login."', password = '".$first_password."', email = '".$email."' WHERE id = ".$_SESSION['nazwa'].""; 
                   $result = mysql_query($sql) 
                       or die("Nie udalo sie zaktualizowac usera"); 
                   echo 'Profil został zaktualizowany!'; 
                   exit; 
               } 
               else 
               { 
                   echo "Wpisany login lub email jest juz w uzyciu! Podaj inny!"; 
                   exit; 
               } 
           }

Jeśli z kolei uzupełnione są tylko pola: login i email, a hasła zostały puste to ich nie zmieniamy:

           else if ( !empty($login) && !empty($email) && empty($_POST['nowe_haslo']) && empty($_POST['obecne_haslo']) && empty($_POST['powtorz_nowe_haslo']) && filter_var($email, FILTER_VALIDATE_EMAIL) && strlen($login) > 3 && preg_match( "/^[a-zA-Z0-9_ ]+$/" , $login) ) 
           { 
               $sql = "SELECT * FROM `users` WHERE id != ".$_SESSION['nazwa']." AND (email = '".$email."' OR username = '".$login."')"; 
               $result = mysql_query($sql) 
                   or die("Nie udalo sie pobrac danych"); 
               $num = mysql_num_rows($result); 
               if ( $num == 0 ) 
               { 
                   $sql = "UPDATE `users` SET username = '".$login."', email = '".$email."' WHERE id = ".$_SESSION['nazwa'].""; 
                   $result = mysql_query($sql) 
                       or die("Nie udalo sie zaktualizowac usera"); 
                   echo 'Profil został zaktualizowany!'; 
                   exit; 
               } 
               else 
               { 
                   echo "Wpisany login lub email jest juz w uzyciu! Podaj inny!"; 
                   exit; 
               } 
           }

Potem już są właśnie te warunki o których pisałem - żywcem wzięte z rejestracji, więc ich nie opisuję. Na końcu jest tylko warunek, że jeśli warunek z góry dot. właściciela profilu się nie spełni to wypluje błąd o tym:

           else if ( empty($login) || empty($email) ) 
           { 
               echo "Uzupełnij wszystkie pola!"; 
               exit; 
           } 
           else if ( !(empty($_POST['nowe_haslo']) && empty($_POST['obecne_haslo']) && empty($_POST['powtorz_nowe_haslo'])) && !(!empty($_POST['nowe_haslo']) && !empty($_POST['obecne_haslo']) && !empty($_POST['powtorz_nowe_haslo'])) ) 
           { 
               echo "Uzupełnij pola z hasłami!"; 
               exit; 
           } 
           else if ( !(strlen($login) > 3 && !empty($_POST['nowe_haslo']) && strlen($_POST['nowe_haslo']) > 5) ) 
           { 
               echo "Nick lub haslo jest za krotkie. Haslo musi zawierac min. 6 znakow, natomiast nick 4 znaki"; 
               exit; 
           } 
           else if ( !(strlen($login) > 3) ) 
           { 
               echo "Nick jest za krotki. Nick musi zawierac min. 4 znaki."; 
               exit; 
           } 
           else if ( !empty($_POST['nowe_haslo']) && md5($login) == $first_password ) 
           { 
               echo "Haslo nie moze byc takie samo jak login!"; 
               exit; 
           } 
           else if ( !empty($_POST['nowe_haslo']) && !empty($_POST['powtorz_nowe_haslo']) && $first_password !== $second_password ) 
           { 
               echo "Wpisane hasla nie zgadzaja sie!"; 
               exit; 
           } 
           else if ( !filter_var($email, FILTER_VALIDATE_EMAIL) ) 
           { 
               echo "Wpisany email jest niepoprawny!"; 
               exit; 
           } 
           else if ( !preg_match( "/^[a-zA-Z0-9_ ]+$/" , $login) ) 
           { 
               echo "Znaki w loginie sa niedozwolone! Mozesz uzywac tylko malych i duzych liter (bez polskich znakow!), spacji, cyfr."; 
               exit; 
           } 
       } 
   }        
} 
else 
{ 
   echo "Próbujesz edytować nie swój profil!"; 
   exit; 
} 
?>

Tyle.

Autor poradnika: Michael2318

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Karaś

Aha, czyli jak chce się zapoznać z pełną wersją poradnika to musze Ci najpierw postawić piwo?

i-dont-want-to-live-on-this-planet-anymore-11372-400x250.jpg

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Michael2318

Nie zależy mi na piwach tylko na statystykach ile osób korzysta z moich rozwiązań.

Nie musisz stawiać, odpal googla i poszukaj podobnego rozwiązania.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Domiss

Ale to już jest ich problem a nie michaela :)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość
Temat jest zablokowany i nie można w nim pisać.
×
×
  • Utwórz nowe...