Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Edycja danych
Forum PHP.pl > Forum > Przedszkole
solandsol12
Witam,

mam pewien problem,a mianowicie:

stworzyłem panel logowania dla zarejestrowanych użytkowników z możliwością edycji swoich danych. Problem tkwi w tym, że edycja loginu jest bezproblemowa, ale jeżeli zmienię w tym samym czasie Login i Hasło to zmieni się tylko Login, a hasło pozostanie domyślne, natomiast jeżeli wejdę do panelu i zmienię samo hasło, a login pozostawię bez zmian, to hasło zmieni się na nowe. Nie wiem co z tym począć. Proszę o pomoc. Oto kawałek kodu PHP, odpowiedzialny za powyższe czynności:

  1. <?php
  2. $login_zmien = $_POST[login_zmien];
  3. if (strlen($_POST['login_zmien'])>=5) {
  4. mysql_query("UPDATE `uzytkownicy` SET `login` = '$login_zmien' WHERE `login`= '$login'") or die('Wystąpił błąd!');
  5. header('Locatio: ../login.php?wyloguj=1');
  6. }
  7.  
  8. else if($_POST[login_zmien]){
  9. echo 'Twój login jest za krótki !';
  10. }
  11.  
  12. if (strlen($_POST['haslo_zmien'])>=5) {
  13. $haslo_zmien = md5($_POST[haslo_zmien]);
  14. mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login'") or die('Wystąpił błąd!');
  15. header('Locatio: ../login.php?wyloguj=1');
  16. }
  17.  
  18. else if ($_POST[haslo_zmien]) {
  19. echo 'Wybrane hasło jest za krótkie';
  20. }
  21.  
  22. ?>


Pozdrawiam.
melkorm
przyczyną jest to że przy zmianie loginu pierw zmieniasz login przypuśćmy z test na test2 gdzie login = test w drugim kroku zaś zmieniasz hasło z hasło na hasło1 gdzie login = test a jak widzisz powyżej zmieniłeś login i już usera o loginie "test" nie posiadasz w bazie smile.gif tylko usera o loginie test2.

możesz zamienić kolejnością te 2 zapytania i powinno działać bez problemu tongue.gif
solandsol12
Zadziałało, lecz mam jeszcze jeden problem, ponieważ dodałem teraz do tego wszystkiego pole e-mail o kodzie:

  1. <?php
  2. if (strlen($email_zmien)>10) {
  3. $email_zmien = $_POST[email_zmien];
  4. mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login'") or die('Wyst?pi? b??d!');
  5. echo '<META HTTP-EQUIV="Refresh" CONTENT="1,URL=dane.php">';
  6. }
  7.  
  8. else if ($_POST[email_zmien]) {
  9. echo 'Podany e-mail jest za krótki !<br/>';
  10. }
  11. ?>


Nie wiem dlaczego gdy zmienię e-mail na mniejszy niż 10 znaków to nie pokazuje mi komunikatu o błędzie, tylko po prostu zakańcza sesje, natomiast jeżeli zmienię na e-mail większy niż 10 znaków to go zapisuje.
ArekJ
Daj tak:

  1. <?php
  2. if (strlen($email_zmien)>1) {
  3. $email_zmien = $_POST[email_zmien];
  4. mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login'") or die('Wyst?pi? b??d!');
  5. echo '<META HTTP-EQUIV="Refresh" CONTENT="1,URL=dane.php">';
  6. }
  7.  
  8. else if ($_POST[email_zmien]) {
  9. echo 'Podany e-mail jest za krótki !<br/>';
  10. }
  11. ?>
solandsol12
Dalej to samo, zauważyłem jeszcze jedną rzecz, a mianowicie gdy wpiszę w haśle jedną literke, np. s to zapisuje mi ją w bazie danych jako hasło.
melkorm
  1. <?php
  2. if (strlen($email_zmien)>10) {
  3. $email_zmien = $_POST[email_zmien];
  4. ?>


Pierw przypisujesz zmienną później ją sparwdzasz nie na odwrót - zmień to tongue.gif
solandsol12
Niestety nic to nie dało.
melkorm
Oka ... dlaczego updejtujesz pole hasło jeżeli zmieniasz e-mail ?

  1. <?php
  2. $email_zmien = $_POST['email_zmien'];
  3. if (strlen($email_zmien) > 10) {
  4. mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login'") or die('Wyst?pi? b??d!'); // zmien to zapytanie na poprawne!
  5. echo '<META HTTP-EQUIV="Refresh" CONTENT="1,URL=dane.php">';
  6. }
  7.  
  8. else if ($_POST['email_zmien']) {
  9. echo 'Podany e-mail jest za krótki !<br/>';
  10. }
  11. ?>
solandsol12
Niestety dalej nie pokazuje komunikatu , że e-mail jest za krótki.
Lion_87
Cytat
else if ($_POST['email_zmien']) {
echo 'Podany e-mail jest za krótki !<br/>';
}


a niemozesz tak

  1. <?php
  2. if (strlen($email_zmien) < 10) {
  3. echo 'Podany e-mail jest za krótki !<br/>';
  4. }
  5. ?>
Petermechanic
<?php
  1. <?php
  2. $email_zmien = $_POST['email_zmien'];
  3. if (strlen($email_zmien) > 10) {
  4. mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login'") or die('Wyst?pi? b??d!'); // zmien to zapytanie na poprawne!
  5. echo '<META HTTP-EQUIV="Refresh" CONTENT="1,URL=dane.php">';
  6. }
  7.  
  8. else{
  9. echo 'Podany e-mail jest za krótki !<br/>';
  10. }
  11. ?>
solandsol12
Dalej to samo.
melkorm
daj przed warunkiem :

  1. <?php
  2. var_dump(strlen($_POST['email_zmien']));
  3. ?>


I pokaż nam co wyświetliło :]
solandsol12
Wyświetliło : int(0) .

Pozdrawiam.
melkorm
Jeżeli coś wpisujesz i wyświetla int(0) to wtedy nie zlicza, pokaż formularz od e-mail'a.
solandsol12
Nie mam jak sprawdzić ile po wysłaniu formularza będzie mieć znaków dane pole, ponieważ jak wysyłam to zakańcza mi sesję i wylogowuje, a nie pokazuje błędu o nieprawidłowej ilości znaków w polu email
melkorm
var_dump blokuje bodajże zmiane headera ale nie wiem czy w tym przypadku tongue.gif

No ale wyświetliło Tobie int(0) .. więc jak dasz w pole post'a od maila coś to ci pokaże ile znaków wpisałeś ... .

Pokaż ten formularz! tongue.gif
solandsol12
Oto formularz:

  1. <form action="dane.php" method="post">
  2. Login: <input type="text" name="login_zmien" value="'.$_SESSION['login'].'"><br/><br/>
  3. Hasło: <input type="password" name="haslo_zmien"><br/><br/>
  4. E-mail: <input type="text" name="email_zmien" value="'.$email_wyswietl.'"><br/><br/>
  5. <input type="submit" value="zmień">
  6. </form>
melkorm
  1. <?php
  2. $email_zmien = $_POST['email_zmien'];
  3. if (strlen($email_zmien)>10) {
  4. mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login'") or die('Wyst?pi? b??d!');
  5. echo '<META HTTP-EQUIV="Refresh" CONTENT="1,URL=dane.php">';
  6. }
  7.  
  8. else if ($_POST['email_zmien']) {
  9. echo 'Podany e-mail jest za krótki !<br/>';
  10. }
  11. ?>

  1. <form action="" method="post">
  2. <input type="text" name="email_zmien" value="aaaaaaaa">
  3. <input type="submit">
  4. </form>


Wrzuciłem na localhost dokładnie tak jak powyżej i zadziałało - wyświetla błąd iż e-mail jest zakrótki.
solandsol12
Jak usunąłem te dwie linijki:

  1. Login: <input type="text" name="login_zmien" value="'.$_SESSION['login'].'"><br/><br/>
  2. Hasło: <input type="password" name="haslo_zmien"><br/><br/>


z formularza to działa, hmmm
melkorm
z tego co widze po session wyświetlasz tego forma z echo -.-? zrób to normalnei w HTML'u ... i daj w value poprostu:
  1. <?php echo $_SESSION['login'] ?>


bo jak wkleiłem te dwa inputy do siebie to działało ;]
solandsol12
Czy mógłbym podać cały kod, bo nie wiem, coś źle mi wychodzi.
melkorm
możesz chyba że jest strasznie długi to wrzuć na phpfi.com ;p
solandsol12
Albo może lepiej: podaj jak możesz poprawiony kod, bo już sam nie wiem co jest źle.
melkorm
  1. <?php
  2. $email_zmien = $_POST['email_zmien'];
  3. if (strlen($email_zmien)>10) {
  4. mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login'") or die('Wyst?pi? b??d!');
  5. echo '<META HTTP-EQUIV="Refresh" CONTENT="1,URL=dane.php">';
  6. }
  7.  
  8. else if ($_POST['email_zmien']) {
  9. echo 'Podany e-mail jest za krótki !<br/>';
  10. }
  11. ?>
  12.  
  13. <form action="dane.php" method="post">
  14. Logi: <input type="text" name="login_zmien" value="<?php echo $_SESSION['login'] ?>"><br/><br/>
  15. Hasło: <input type="password" name="haslo_zmien"><br/><br/>
  16. Mail: <input type="text" name="email_zmien" value="<?php echo $_SESSION['mail'] ?>">
  17. <input type="submit">
  18. </form>


Jeżeli to nei zadziała to daj cały kod .... . winksmiley.jpg
solandsol12
  1. <?php
  2.  
  3. include("../config.php");
  4.  
  5. // zmiana loginu
  6.  
  7. $login_zmien = $_POST[login_zmien];
  8. if (strlen($_POST['login_zmien'])>=5) {
  9. mysql_query("UPDATE `uzytkownicy` SET `login` = '$login_zmien' WHERE `login`= '$login'") or die('Wystąpił błąd!');
  10. header('Locatio: ../login.php?wyloguj=1');
  11. }
  12.  
  13. else if($_POST[login_zmien]){
  14. echo 'Twój login jest za krótki !';
  15. }
  16.  
  17. // zmiana hasła
  18.  
  19. if (strlen($_POST['haslo_zmien'])>1) {
  20. $haslo_zmien = md5($_POST['haslo_zmien']);
  21. mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login_zmien'") or die('Wystąpił błąd!');
  22. header('Locatio: ../login.php?wyloguj=1');
  23. }
  24.  
  25. else if ($_POST['haslo_zmien']) {
  26. echo 'Wybrane hasło jest za krótkie';
  27. }
  28.  
  29. // zmiana emaila
  30.  
  31. $email_zmien = $_POST['email_zmien'];
  32. if (strlen($email_zmien)>10) {
  33. mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login'") or die('Wyst?pi? b??d!');
  34. echo '<META HTTP-EQUIV="Refresh" CONTENT="1,URL=dane.php">';
  35. }
  36.  
  37. else if ($_POST['email_zmien']) {
  38. echo 'Podany e-mail jest za krótki !<br/>';
  39. }
  40.  
  41. if ($_SESSION['login']) {
  42. ?>
  43.  
  44. Twoje dan: <br/><br/>
  45.  
  46. <form action="dane.php" method="post">
  47. Log: <input type="text" name="login_zmien" value="<?php echo $_SESSION['login'] ?>"><br/><br/>
  48. Hasło: <input type="password" name="haslo_zmien"><br/><br/>
  49. Mail: <input type="text" name="email_zmien">
  50. <input type="submit">
  51. </form>
  52. </form>
  53.  
  54. <br/><br/>
  55. <a href="glowna.php">wróć</a>
  56. <?php
  57. }
  58.  
  59. else {
  60. echo 'Nie jestes zalogowany !';
  61. }
  62.  
  63. ?>
melkorm
ponieważ zawsze robisz update loginu .... i zawsze następuje zniszczenie sessji i wylogowanie ... .
solandsol12
A jak to zmienić?
melkorm
Dane z sessji możesz porównać z danymi wpisywanymi przes usera czyli np :

warunek :
  1. <?php
  2. (strlen($_POST['login_zmien'])>=5)
  3. ?>

zmienić na:
  1. <?php
  2. (strlen($_POST['login_zmien'])>=5 && $_POST['login_zmien'] != $_SESSION['login'])
  3. ?>


oczywiście to wiele nei da bo przy zmianie loginu i maila zmien isię tylko login .. ale łatwo w Twoim przypadku to zmienić:

  1. <?php
  2. $zmiana = false;
  3. $login_zmien = $_POST['login_zmien'];
  4. if ((strlen($_POST['login_zmien'])>=5 && $_POST['login_zmien'] != $_SESSION['login'])) {
  5. mysql_query("UPDATE `uzytkownicy` SET `login` = '$login_zmien' WHERE `login`= '$login'") or die('Wystąpił błąd!');
  6. $zmiana = true;
  7. }
  8. else if($_POST['login_zmien']){
  9. echo 'Twój login jest za krótki !';
  10. }
  11.  
  12. // zmiana hasła
  13.  
  14. if (strlen($_POST['haslo_zmien'])>1) {
  15. $haslo_zmien = md5($_POST['haslo_zmien']);
  16. mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login_zmien'") or die('Wystąpił błąd!');
  17. $zmiana = true;
  18. }
  19. else if ($_POST['haslo_zmien']) {
  20. echo 'Wybrane hasło jest za krótkie';
  21. }
  22.  
  23. // zmiana emaila
  24.  
  25. $email_zmien = $_POST['email_zmien'];
  26. if (strlen($email_zmien)>10) {
  27. mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login'") or die('Wyst?pi? b??d!');
  28. echo '<META HTTP-EQUIV="Refresh" CONTENT="1,URL=dane.php">';
  29. }
  30. else if ($_POST['email_zmien']) {
  31. echo 'Podany e-mail jest za krótki !<br/>';
  32. }
  33.  
  34. if($zmiana) {
  35. header('Location &nbsp: ../login.php?wyloguj=1');
  36. }
  37. ?>
solandsol12
Niestety teraz gdy chcę zmienić sam e-mail to w bazie się on nie zmienia, a hasło wtedy zmienia się na pustkę w bazie i wyskakuje napis: Twój login jest za krótki !

Oto kod:

  1. <?php
  2.  
  3. include("../config.php");
  4.  
  5. // zmiana loginu
  6. $zmiana = false;
  7. $login_zmien = $_POST['login_zmien'];
  8. if ((strlen($_POST['login_zmien'])>=5 && $_POST['login_zmien'] != $_SESSION['login'])) {
  9. mysql_query("UPDATE `uzytkownicy` SET `login` = '$login_zmien' WHERE `login`= '$login'") or die('Wystąpił błąd!');
  10. $zmiana = true;
  11. }
  12. else if($_POST['login_zmien']){
  13. echo 'Twój login jest za krótki !';
  14. }
  15.  
  16. // zmiana hasła
  17.  
  18. if (strlen($_POST['haslo_zmien'])>1) {
  19. $haslo_zmien = md5($_POST['haslo_zmien']);
  20. mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login_zmien'") or die('Wystąpił błąd!');
  21. $zmiana = true;
  22. }
  23. else if ($_POST['haslo_zmien']) {
  24. echo 'Wybrane hasło jest za krótkie';
  25. }
  26.  
  27. // zmiana emaila
  28.  
  29. $email_zmien = $_POST['email_zmien'];
  30. if (strlen($email_zmien)>10) {
  31. mysql_query("UPDATE `uzytkownicy` SET `email` = '$email_zmien' WHERE `login`= '$login_zmien'") or die('Wyst?pi? b??d!');
  32. echo '<META HTTP-EQUIV="Refresh" CONTENT="1,URL=dane.php">';
  33. }
  34. else if ($_POST['email_zmien']) {
  35. echo 'Podany e-mail jest za krótki !<br/>';
  36. }
  37.  
  38. if($zmiana) {
  39. header('Location &nbsp: ../login.php?wyloguj=1');
  40. }
  41.  
  42. if ($_SESSION['login']) {
  43. ?>
  44.  
  45. Twoje dan: <br/><br/>
  46.  
  47. <form action="dane.php" method="post">
  48. Log: <input type="text" name="login_zmien" value="<?php echo $_SESSION['login'] ?>"><br/><br/>
  49. Hasło: <input type="password" name="haslo_zmien"><br/><br/>
  50. Mail: <input type="text" name="email_zmien">
  51. <input type="submit">
  52. </form>
  53. </form>
  54.  
  55. <br/><br/>
  56. <a href="glowna.php">wróć</a>
  57. <?php
  58. }
  59.  
  60. else {
  61. echo 'Nie jestes zalogowany !';
  62. }
  63.  
melkorm
  1. <?php
  2.  
  3. include("../config.php");
  4. $zmiana = false;
  5. $login = $_SESSION['login'];
  6. // zmiana hasła
  7. if (strlen($_POST['haslo_zmien'])>1) {
  8.    $haslo_zmien = md5($_POST['haslo_zmien']);
  9.    mysql_query("UPDATE `uzytkownicy` SET `haslo` = '$haslo_zmien' WHERE `login`= '$login'") or die('Wystąpił błąd!');
  10.    $zmiana = true;
  11. }
  12. elseif($_POST['haslo_zmien']) {
  13.    echo 'Wybrane hasło jest za krótkie';
  14. }
  15.  
  16. // zmiana emaila
  17.  
  18. $email_zmien = $_POST['email_zmien'];
  19. if (strlen($email_zmien)>10) {
  20. mysql_query("UPDATE `uzytkownicy` SET `email` = '$email_zmien' WHERE `login`= '$login'") or die('Wyst?pi? b??d!');
  21.    echo '<META HTTP-EQUIV="Refresh" CONTENT="1,URL=dane.php">';
  22. }
  23. else if ($_POST['email_zmien']) {
  24.    echo 'Podany e-mail jest za krótki !<br/>';
  25. }
  26.  
  27. // zmiana loginu
  28.  
  29. $login_zmien = $_POST['login_zmien'];
  30. if ($_POST['login_zmien'] != $_SESSION['login']) {
  31.    if(strlen($_POST['login_zmien'])>=5) {
  32.        mysql_query("UPDATE `uzytkownicy` SET `login` = '$login_zmien' WHERE `login`= '$login'") or die('Wystąpił błąd!');
  33.        $zmiana = true;
  34.    }
  35.    else {
  36.        echo 'Twój login jest za krótki !';
  37.    }
  38. }
  39.  
  40. if($zmiana) {
  41.    header('Location &nbsp: ../login.php?wyloguj=1');
  42. }
  43.  
  44. if ($_SESSION['login']) {
  45. ?>
  46.  
  47. Twoje da: <br/><br/>
  48.  
  49. <form action="dane.php" method="post">
  50. Lo: <input type="text" name="login_zmien" value="<?php echo $_SESSION['login'] ?>"><br/><br/>
  51. Hasło: <input type="password" name="haslo_zmien"><br/><br/>
  52. Mail: <input type="text" name="email_zmien">
  53. <input type="submit">
  54. </form>
  55. </form>
  56.  
  57. <br/><br/>
  58. <a href="glowna.php">wróć</a>
  59. <?php
  60. }
  61.  
  62. else {
  63. echo 'Nie jestes zalogowany !';
  64. }
  65.  
  66. ?>


Powinno działać ;p
solandsol12
Działa smile.gif, wielkie dzięki !
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.