Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z formularzem php i mysql
Forum PHP.pl > Forum > PHP
stusu
Witam... mam problem. Zrobiłem stronę ze skryptem rejestracji i logowania (korzystając z dostępnych na forach skryptów, bo dopiero zaczynam zabawę z php) chcę dodać podstronę na której każdy użytkownik zobaczy swoje dane w formularzu i będzie mógł je zmienić (po za loginem i nickiem)
  1. <?php
  2.  
  3. if($_SESSION['logged']==false)
  4. {
  5. echo 'Nie masz dostępu do tej częœci witryny.';
  6. }
  7. else
  8. {
  9. $login = $_SESSION['login'];
  10. $nick = $_SESSION['nick'];
  11.  
  12. echo 'Zmień swoje dane:';
  13. // tworzymy prosty formularz
  14. echo <br /><br /><form action="index.php" method="POST">
  15. Login: <br />
  16. <input type="text" name="login" value="$login" disabled="disabled"><br />
  17. Nick: <br />
  18. <input type="text" name="nick" value="$nick" disabled="disabled"><br />
  19.  
  20. }
  21. ?>


To jest tylko kawałek kodu... co mam jak mam zmienić kod żeby w formularzu na stronie wyświetlały mi się nick i login zamiast $nick i $login (wiem że coś skopałem, ale nie wiem co)
tehaha
przede wszystkim zapomniałeś dać na samym początku session_start(), więc skrypt nie odczytuje danych z tablicy $_SESSION
MateuszS
  1. echo '<br /><br /><form action="index.php" method="POST">
  2. Login: <br />
  3. <input type="text" name="login" value="'.$login.'" disabled="disabled"><br />
  4. Nick: <br />
  5. <input type="text" name="nick" value="'.$nick.'" disabled="disabled"><br />';
  6.  

Spróbuj tak.
stusu
tehaha pisałem że jest to fragment kodu sesje startowałem wcześniej ;p....
MateuszS dzięki działa (taki mały błąd :/)

No dobrze w formularze wskakuje mi login i nick zalogowanego użytkownika, ale za każdym razem gdy próbuje zapisać zmiany otrzymuje komunikat że muszę uzupełnić wszystkie pola a są uzupełnione... po za tym co mam wpisać zamiast "$query = "INSERT INTO `users` (`pass`, `email`) VALUES ('$pass', '$email')";" żeby wprowadzić zmiany do bazy danych?

  1. <?php
  2.  
  3. if($_SESSION['logged']==false)
  4. {
  5. echo 'Nie masz dostępu do tej części witryny.';
  6. }
  7. else
  8. {
  9. $login = $_SESSION['login'];
  10. $nick = $_SESSION['nick'];
  11. $pass = $_SESSION['nick'];
  12. $email = $_SESSION['email'];
  13.  
  14. echo 'Zmień swoje dane:';
  15. // tworzymy prosty formularz
  16. echo '<br /><br /><form action="useredit.php" method="POST">
  17. Login: <br />
  18. <input type="text" name="login" value="'.$login.'" disabled="disabled"><br />
  19. Nick: <br />
  20. <input type="text" name="nick" value="'.$nick.'" disabled="disabled"><br />
  21. Hasło: <br />
  22. <input type="password" name="pass" value="'.$pass.'"><br />
  23. Powtórz hasło: <br />
  24. <input type="password" name="pass" value="'.$pass.'"><br />
  25. Email: <br />
  26. <input type="text" name="email" value="'.$email.'"><br />
  27. <input type="submit" name="zapisz" value="Zapisz">
  28. </form>';
  29.  
  30. if(isset($_POST['zapisz']))
  31. {
  32.  
  33. $pass = $_POST['pass'];
  34. $vpass = $_POST['vpass'];
  35. $email = $_POST['email'];
  36.  
  37. if(empty($pass) || empty($vpass) || empty($email)) echo 'Wpisz wszystkie pola!';
  38. else
  39. {
  40. // filtrujemy dane
  41.  
  42.  
  43. $resultmail = mysql_query("SELECT * FROM users WHERE email='$email'");
  44.  
  45. if(mysql_num_rows($resultmail)!=0) echo 'Już istnieje konto z takim emailem!';
  46. else
  47. {
  48. if($pass != $vpass) echo 'Hasła się nie zgadzają!';
  49. else
  50. {
  51. // kodujemy hasło
  52. $pass = md5($pass);
  53. // tworzymy zapytanie
  54. $query = "INSERT INTO `users` (`pass`, `email`) VALUES ('$pass', '$email')";
  55.  
  56. // jeśli zapytanie wykona się poprawnie to zostanie wyświetlony stosowny komunikat
  57. if(mysql_query($query)) echo 'Dane zostały zmienione!';
  58. }
  59. }
  60. }
  61. }
  62. }
  63. ?>
MateuszS
Nigdzie nie widzę u ciebie pola (inputa) vpass, tylko dwa pass. Żeby wyedytować musisz użyć UPDATE

  1. UPDATE tabela SET wartosc=bla AND wartosc2=sada //itd
  2. WHERE id=idusera
  3.  
  4. //taki pseudokod
stusu
W tej chwili wygląda to tak:
  1. <?php
  2.  
  3. if($_SESSION['logged']==false)
  4. {
  5. echo 'Nie masz dostępu do tej częœci witryny.';
  6. }
  7. else
  8. {
  9. $login = $_SESSION['login'];
  10. $nick = $_SESSION['nick'];
  11. $pass = $_SESSION['nick'];
  12. $email = $_SESSION['email'];
  13. $id = $_SESSION['id'];
  14.  
  15. echo 'Zmień swoje dane:';
  16. // tworzymy prosty formularz
  17. echo '<br /><br /><form action="useredit.php" method="POST">
  18. Login: <br />
  19. <input type="text" name="login" value="'.$login.'" disabled="disabled"><br />
  20. Nick: <br />
  21. <input type="text" name="nick" value="'.$nick.'" disabled="disabled"><br />
  22. Hasło: <br />
  23. <input type="password" name="newpass" value="'.$pass.'"><br />
  24. Powtórz hasło: <br />
  25. <input type="password" name="newvpass" value="'.$pass.'"><br />
  26. Email: <br />
  27. <input type="text" name="newemail" value="'.$email.'"><br />
  28. <input type="submit" name="zapisz" value="Zapisz">
  29. </form>';
  30.  
  31. if(isset($_POST['zapisz']))
  32. {
  33.  
  34. $newpass = $_POST['newpass'];
  35. $newvpass = $_POST['newvpass'];
  36. $newemail = $_POST['newemail'];
  37.  
  38. if(empty($newpass) || empty($newvpass) || empty($newemail)) echo 'Wpisz wszystkie pola!';
  39. else
  40. {
  41. // filtrujemy dane
  42.  
  43.  
  44. $resultmail = mysql_query("SELECT * FROM users WHERE email='$newemail'");
  45.  
  46. if(mysql_num_rows($resultmail)!=0) echo 'Już istnieje konto z takim emailem!';
  47. else
  48. {
  49. if($newpass != $newvpass) echo 'Hasła się nie zgadzają!';
  50. else
  51. {
  52. // kodujemy hasło
  53. $newpass = md5($newpass);
  54. // tworzymy zapytanie
  55. $query = "UPDATE users SET pass='$newpass' email='$newemail' WHERE id='$id'";
  56.  
  57. // jeœli zapytanie wykona się poprawnie to zostanie wyœwietlony stosowny komunikat
  58. if(mysql_query($query)) echo 'Dane zostały zmienione!';
  59. }
  60. }
  61. }
  62. }
  63. }
  64. ?>


Ale dalej nie działa... za każdym razem wyświetla że hasła się nie zgadzają (co jest nie możliwe)
MateuszS
1. Zapomniałeś o AND w zapytaniu (zobacz na moj przyklad)
2. Problem leży tu

  1. //jedna zmienna przefiltrowales drugiej juz nie, ustaw te filtracje pozniej

stusu
Dodałem AND i

i teraz nie wyświetla się żaden błąd, a mimo to zmiany nie zapisują się w bazie.
MateuszS
no to zastosuj samo

  1. $newvpass=trim(strip_tags($newvpass));
  2. $newpass=trim(strip_tags($newpass));
stusu
No niestety dalej nic...
MateuszS
Pokaż jak twój kod teraz wygląda bo się pogubiłem.
stusu
  1. <?php
  2.  
  3. if($_SESSION['logged']==false)
  4. {
  5. echo 'Nie masz dostępu do tej częœci witryny.';
  6. }
  7. else
  8. {
  9. $login = $_SESSION['login'];
  10. $nick = $_SESSION['nick'];
  11. $pass = $_SESSION['nick'];
  12. $email = $_SESSION['email'];
  13. $id = $_SESSION['id'];
  14.  
  15. echo 'Zmień swoje dane:';
  16. // tworzymy prosty formularz
  17. echo '<br /><br /><form action="useredit.php" method="POST">
  18. Login: <br />
  19. <input type="text" name="login" value="'.$login.'" disabled="disabled"><br />
  20. Nick: <br />
  21. <input type="text" name="nick" value="'.$nick.'" disabled="disabled"><br />
  22. Hasło: <br />
  23. <input type="password" name="newpass" value="'.$pass.'"><br />
  24. Powtórz hasło: <br />
  25. <input type="password" name="newvpass" value="'.$pass.'"><br />
  26. Email: <br />
  27. <input type="text" name="newemail" value="'.$email.'"><br />
  28. <input type="submit" name="zapisz" value="Zapisz">
  29. </form>';
  30.  
  31. if(isset($_POST['zapisz']))
  32. {
  33.  
  34. $newpass = $_POST['newpass'];
  35. $newvpass = $_POST['newvpass'];
  36. $newemail = $_POST['newemail'];
  37.  
  38. if(empty($newpass) || empty($newvpass) || empty($newemail)) echo 'Wpisz wszystkie pola!';
  39. else
  40. {
  41. // filtrujemy dane
  42. $newvpass=trim(strip_tags($newvpass));
  43. $newpass=trim(strip_tags($newpass));
  44. $newemail = trim(strip_tags($newemail));
  45.  
  46.  
  47. $resultmail = mysql_query("SELECT * FROM users WHERE email='$newemail'");
  48.  
  49. if(mysql_num_rows($resultmail)!=0) echo 'Już istnieje konto z takim emailem!';
  50. else
  51. {
  52. if($newpass != $newvpass) echo 'Hasła się nie zgadzają!';
  53. else
  54. {
  55. // kodujemy hasło
  56. $newpass = md5($newpass);
  57. // tworzymy zapytanie
  58. $query = "UPDATE users SET pass='$newpass' AND email='$newemail' WHERE id='$id'";
  59.  
  60. // jeœli zapytanie wykona się poprawnie to zostanie wyœwietlony stosowny komunikat
  61. if(mysql_query($query)) echo 'Dane zostały zmienione!';
  62. }
  63. }
  64. }
  65. }
  66. }
  67. ?>


Po zmianie danych powinien się wyświetlić komunikat, a się nie wyświetla i nic się nie dzieje.
MateuszS
  1.  
  2. $query = "UPDATE users SET pass='$newpass' AND email='$newemail' WHERE id='$id'";
  3. $s = mysql_query($query) or die(mysql_error());
  4. if($s) echo 'Dane zostały zmienione!';

Teraz powinno wywalić Ci błąd w przypadku błędu w zapytaniu. Może też zmienna $id nie ma wartości?
stusu
Access denied for user 'www-data'@'localhost' (using password: NO)
hmm łączenie z bazą jest w porządku, bo bez problemu się loguję... nie rozumiem o co mu chodzi:p
MateuszS
Pewnie nie ustawiłeś połączenia lub podałeś złe dane ;P

  1. $connect = mysql_connect('localhost','username','password') or die(mysql_error());
  2. $db = mysql_select_db('nazwabazy', $connect) or die(mysql_error());
stusu
Dane są na 100% ok... logowanie działa...
MateuszS
Skoro wywala błąd to nie są OK ;P Pokaż jak łączysz się z bazą i czy includujesz plik połączenia.
stusu
  1. <?php
  2.  
  3. // rozpoczęcie buforowania (jest to potrzebne by nie mieć błędów typu headers already sent)
  4.  
  5. // start sesji
  6.  
  7. // połšczenie z mysql
  8. $connect = mysql_connect('mysql.cba.pl', '***', '***') or die('Nieudane polaczenie z baza danych...');
  9.  
  10. // wybór bazy danych
  11. $db = mysql_select_db('***_cba_pl')
  12. or die('Nie udalo sie wybrac bazy danych...');
  13.  
  14. ?>
  15.  
  16. <html>
  17.  
  18. <head>
  19. </head>
  20.  
  21. <body>
  22.  
  23. <center>
  24. <div id="top">
  25. <div id="NAGLOWEK"><img src="banner.jpg" alt="banner" width="600" height="130" align="center" /></div>
  26. <div id="MENU">
  27. menu
  28.  
  29. </div>
  30. <div id="INFORMACJE">
  31.  
  32. <?php
  33.  
  34. include("logowanie.php");
  35.  
  36. ?>
  37.  
  38. </div>
  39. <div id="TRESC">
  40.  
  41. <?php
  42.  
  43. if($_SESSION['logged']==false)
  44. {
  45. echo 'Nie masz dostępu do tej częœci witryny.';
  46. }
  47. else
  48. {
  49. $login = $_SESSION['login'];
  50. $nick = $_SESSION['nick'];
  51. $pass = $_SESSION['nick'];
  52. $email = $_SESSION['email'];
  53. $id = $_SESSION['id'];
  54.  
  55. echo 'Zmień swoje dane:';
  56. // tworzymy prosty formularz
  57. echo '<br /><br /><form action="useredit.php" method="POST">
  58. Login: <br />
  59. <input type="text" name="login" value="'.$login.'" disabled="disabled"><br />
  60. Nick: <br />
  61. <input type="text" name="nick" value="'.$nick.'" disabled="disabled"><br />
  62. Hasło: <br />
  63. <input type="password" name="newpass" value="'.$pass.'"><br />
  64. Powtórz hasło: <br />
  65. <input type="password" name="newvpass" value="'.$pass.'"><br />
  66. Email: <br />
  67. <input type="text" name="newemail" value="'.$email.'"><br />
  68. <input type="submit" name="zapisz" value="Zapisz">
  69. </form>';
  70.  
  71. if(isset($_POST['zapisz']))
  72. {
  73.  
  74. $newpass = $_POST['newpass'];
  75. $newvpass = $_POST['newvpass'];
  76. $newemail = $_POST['newemail'];
  77.  
  78. if(empty($newpass) || empty($newvpass) || empty($newemail)) echo 'Wpisz wszystkie pola!';
  79. else
  80. {
  81. // filtrujemy dane
  82. $newvpass=trim(strip_tags($newvpass));
  83. $newpass=trim(strip_tags($newpass));
  84. $newemail = trim(strip_tags($newemail));
  85.  
  86.  
  87. $resultmail = mysql_query("SELECT * FROM users WHERE email='$newemail'");
  88.  
  89. if(mysql_num_rows($resultmail)!=0) echo 'Już istnieje konto z takim emailem!';
  90. else
  91. {
  92. if($newpass != $newvpass) echo 'Hasła się nie zgadzają!';
  93. else
  94. {
  95. // kodujemy hasło
  96. $newpass = md5($newpass);
  97. // tworzymy zapytanie
  98. $query = "UPDATE users SET pass='$newpass' AND email='$newemail' WHERE id='$id'";
  99.  
  100. $s = mysql_query($query) or die(mysql_error());
  101. if($s) echo 'Dane zostały zmienione!';
  102. }
  103. }
  104. }
  105. }
  106. }
  107. ?>
  108. </div>
  109.  
  110.  
  111. <div id="STOPKA">Stopka serwisu
  112. </div>
  113. </div>
  114. </center>
  115.  
  116. </body>
MateuszS
Zamiast mysql.cba.pl daj localhost, może zadziała i gwiazdkuj dane do bazy w poście bo ktoś ci kawał zrobi ;P
stusu
tak od razu wyskakuje mi informacja: "Nieudane polaczenie z baza danych..."

Nie widziałeś gdzieś może całego skryptu który by pozwalał na edycję danych o użytkowniku (bo tracę powoli cierpliwość)
jezoo
a spróbuj zastosować PDO, np:
  1. $dsn = "mysql:dbname=".$DB_NAME."; host=".$DB_HOST;
  2. try{
  3. $db = new PDO($dsn,$DB_USER,$DB_PASSWD);
  4. $this->db->beginTransaction();
  5. }catch(PDOException $e){
  6. echo $e->getMessage();
  7. }
  8. // ja stosuje do INSERT,DELETE,UPDATE
  9. $db->exec("TWOJE ZAPYTANIE");
  10. try {
  11. $db->commit();
  12. echo "OK";
  13. }catch(PDOException $e){
  14. echo $e->getMessage();
  15. }

i taka mała rada, postaraj się oddzielić HTML od PHP bo w tedy kod jest czytelniejszy i szybciej błąd znajdziesz.
druga sprawa, serwis CBA może mieć msqli_connect a nie mysql_connect czyli zamiast mysql daj mysqli.
stusu
Przy msqli_connect w ogóle nie łączy się z bazą... a ten kod który mi napisałeś jest dla mnie nie zrozumiały (dopiero zaczynam zabawę z php), czy mógłbyś mi wyjaśnić łopatologicznie co odpowiiada za co itd.
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.