Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Dwa skrypty(Wysyłanie komunikatu oraz zmiana hasła)
Forum PHP.pl > Forum > Przedszkole
adrianozo
Witam wszystkich. Od jakiegoś czasu nie mogę uporać się z dwoma funkcjami panelu administracyjnego. Pierwszym z nich jest skrypt komunikatu administratora.

Chodzi o to, że po zaznaczeniu pola checked nie zmienia się wartość w bazie danych na 1. Poza tym brakuje mi tutaj czegoś takiego, że jeśli wartość w bazie równa się 1 to checked jest zaznaczony.

Struktura bazy:

  1. CREATE TABLE IF NOT EXISTS `komunikat` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `tresc` longtext collate utf8_polish_ci NOT NULL,
  4. `poziom` text collate utf8_polish_ci NOT NULL,
  5. `adres` text collate utf8_polish_ci NOT NULL,
  6. `numer` text collate utf8_polish_ci NOT NULL,
  7. PRIMARY KEY (`id`)
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;


Skrypt:

http://wklej.org/id/388541/

Drugim skryptem, z którym mam problem to zmiana hasła administratora. Z tym skryptem według mnie będzie trudniej, bo o ile pierwsza część wykonuje się prawidłowo to, gdy nie występują błędy w pierwszej części formularz przechodzi do drugiego formularza, ale co teraz się dziej. Pokazują się oby dwa formularze. Zamiast tylko drugi to pokazuje się i pierwszy i drugi. A gdy tutaj złe dane się wpisze to powraca do pierwszego formularza, a chciałbym, żeby w tym drugim można było poprawić dane i kontynuować skrypt czyli zmienić hasło w bazie.

Struktura bazy:

  1. CREATE TABLE IF NOT EXISTS `admin` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `loginek` text collate utf8_polish_ci NOT NULL,
  4. `email` text collate utf8_polish_ci NOT NULL,
  5. `haslo` text collate utf8_polish_ci NOT NULL,
  6. `accessik` int(1) NOT NULL DEFAULT '0',
  7. `klucz` varchar(40) collate utf8_polish_ci NOT NULL,
  8. PRIMARY KEY (`id`)
  9. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=2 ;


Skrypt:

http://wklej.org/id/388542/

Proszę o pomoc bo już nie wiem co jest nie tak.
Z góry dziękuje smile.gif
Za pomoc oczywiście "POMÓGŁ" smile.gif
Pozdrawiam.
Armstrong
Co do pierwszego tylko podpowiem:

porównaj linię 19 z 35 i zobacz czym się różni.

A co do zaznaczenia to linia:

49 zmień na:
$pobierztresc = mysql_query("SELECT tresc, poziom FROM komunikat WHERE id='1'");

i linię 56 z isset($poziom) na isset($tresc['poziom']) <-- nie wiem po co ale jest rano, więc może się to okazać konieczne.

oraz:

59 z $poziom na: $tresc['poziom');

co do drugiego nie mam już czasu... Może później.
adrianozo
To tak. Działać działa ale sypie błędem:

Notice: Undefined index: poziom in /a/b/c/d/e/komunikat.php on line 10

  1. <?php
  2. if(!$_SESSION['access'] || !$_SESSION['login'])
  3. {
  4. header('Location: index.php');
  5. }
  6. include('include/db.php');
  7. if(isset($_POST['tresc']))
  8. {
  9. $poziom = strip_tags(htmlspecialchars(mysql_real_escape_string($_POST['poziom'])));
  10. }
  11. if(isset($_GET['wpis']) && !empty($_GET['wpis']))
  12. {
  13. if($_GET['wpis']==1)
  14. {
  15. if($_POST['poziom'] == 0)
  16. {
  17. $zapytanie = "INSERT INTO `komunikat` (`tresc`, `poziom`) VALUES ('".$tresc."', '1')";
  18. $idzapytania = mysql_query($zapytanie);
  19. }
  20. else
  21. {
  22. $zapytanie = "INSERT INTO `komunikat` (`tresc`, `poziom`) VALUES ('".$tresc."', '0')";
  23. $idzapytania = mysql_query($zapytanie);
  24. }
  25. }
  26. }
  27. if(isset($_GET['wpis']) && !empty($_GET['wpis']))
  28. {
  29. if($_GET['wpis']==2)
  30. {
  31. if($poziom == 1)
  32. {
  33. $zapytanie = "UPDATE `komunikat` SET `tresc`= '".$tresc."', `poziom`= '1' WHERE `id`='1'";
  34. $idzapytania = mysql_query($zapytanie);
  35. }
  36. else
  37. {
  38. $zapytanie = "UPDATE `komunikat` SET `tresc`= '".$tresc."', `poziom`= '0' WHERE `id`='1'";
  39. $idzapytania = mysql_query($zapytanie);
  40. }
  41. }
  42. }
  43. if(mysql_num_rows(mysql_query("SELECT id FROM komunikat WHERE id='1'"))==1)
  44. {
  45. $pobierztresc = mysql_query("SELECT tresc, poziom FROM komunikat WHERE id='1'");
  46. $tresc = mysql_fetch_assoc($pobierztresc);
  47. echo '<form action="index.php?page=komunikat&wpis=2" method="post">
  48. <input type="hidden" name="send" value="2"><br />Treść<br />
  49. <br /><textarea name="tresc" cols="50" rows="10" id="textarea">'.stripslashes($tresc['tresc']).'</textarea><br /><br />
  50. Nadaj komunikat:
  51. <input type="checkbox" name="poziom" value="1"';
  52. if(isset($tresc['poziom']))
  53. {
  54. ?>
  55. <?=($tresc['poziom']==1)?' checked="checked" ':''?>
  56. <?php
  57. }
  58. echo '<br /><br /><input name="Zapisz" type="submit" value="Zapisz" />
  59. <input name="wyczysc" type="reset" value="Wyczyść" />
  60. </form><br /><a style="text-decoration: none;" href="index.php?page=paneladmina">Wróć do Panelu Administratora</a><br /><br />';
  61. }
  62. else
  63. {
  64. echo '<form action="index.php?page=komunikat&wpis=1" method="post">
  65. <input type="hidden" name="send" value="1"><br />Treść<br />
  66. <br /><textarea name="tresc" cols="50" rows="10" value="Nowa tresc" id="textarea">Tutaj będzie znajdował się komunikat administratora.</textarea>
  67. <br /><br />
  68. Nadaj komunikat:
  69. <input type="checkbox" name="poziom" value="1"';
  70. ?>
  71. <?=($poziom==1)?' checked="checked" ':''?>
  72. <?php
  73. echo '<br /><br /><input name="Zapisz" type="submit" value="Zapisz" />
  74. <input name="wyczysc" type="reset" value="Wyczyść" />
  75. </form><br /><a style="text-decoration: none;" href="index.php?page=paneladmina">Wróć do Panelu Administratora</a><br /><br />';
  76. }
  77. if(isset($_POST['send']))
  78. {
  79. if($_POST['send'])
  80. {
  81. if(isset($idzapytania))
  82. {
  83. if($idzapytania === TRUE)
  84. {
  85. echo '<font color="green"><strong>Komunikat został zapisany.</strong></font><br /><br />';
  86. }
  87. else
  88. {
  89. echo '<font color="red"><strong>Nie udało się zapisać komunikatu. Proszę spróbować za jakiś czas!</strong></font><br /><br />';
  90. }
  91. }
  92. }
  93. }
  94. mysql_close($connect);
  95. ?>
selecton
Co do problemu pierwszego:
w lini 10 masz if(isset($poziom)) a nie widzę wcześniej deklaracji zmiennej $poziom. Ten kawałek kodu się nigdy nie wykona.
Dalej w lini 19 jest: if($_POST['poziom'] == 1) problem w tym, że gdy checkbox jest niezaznaczony to wogóle się nie wysyła w POST. sprawdzaj czy isset i czy równe jest równe 1.
Zmienna poziom w bazie: `poziom` text collate utf8_polish_ci NOT NULL,
jest typou text. Czy jest to konieczne jeśli przechowuje zmienną Bool? Pozatym jeśli to tekst to porównuj jak string == "1" a nie == 1 (taka drobna uwaga)

Co do problemu 2:
Nie wiem dokładnie o co Ci chodzi. Strzelam, że ma być tak:
Jeśli ktoś popełnij błąd w pierwszym formularzu to ten formularz ma się pokazać jeszcze raz a jeśli niema błędów to ma się pokazać formularz drugi. A teraz jest problem z tym, że gdy niema błędu to się pokazuje formularz pierwszy i drugi? Czy tak?
Jeśli tak to zwróć uwagę jak działa Twój algorytm:
1. jeśli NIE WYSŁANO pierwszego forma to go wyświetl (linia 8)
2. w przeciwnym razie WYŚWIETL pierwszy form i sprawdź czy jest on poprawny (linia 17)
3. sprawdź czy WYSŁANO pierwszy form i czy nie było błędów. Jesli tak to wyświetl form drugi. (linia 58)
Tak te warunki są ułożone, że gdy wyślesz pierwszy form to wyświetli się on jeszcze raz (linia 19) a potem sprawdzenie będzie czy są błędy i jeśli nie to wyświetli się drugi form.
adrianozo
Pierwszy skrypt zrobiony.

Problem został w drugim skrypcie.

Teraz gdy nie ma błędu pokazuje się formularz drugi. Wypełniasz dane w drugim formularzu i jak wysyłasz i pokazują się błędy to pokazują się błędy oraz pierwszy formularz zamiast drugiego. To samo jest, gdy poprawnie dane wypełnisz. Pokazuje się pierwszy formularz, a nie pokazują się komunikaty, czy poprawnie dane wprowadzone, czy błędnie.

zmiana_hasla.php

  1. <?php
  2. if(!$_SESSION['access'] || !$_SESSION['login'])
  3. {
  4. header('Location: index.php');
  5. }
  6. include('include/db.php');
  7. $error = false;
  8. if(!isset($_POST['dalej']))
  9. {
  10. echo '<form action="index.php?page=zmien_haslo&wpis=1" method="post"><br />
  11. Podaj login:<br /><input type="text" name="loginek" /><br /><br />
  12. Podaj email:<br /><input type="text" name="email" /><br /><br />
  13. Podaj hasło:<br /><input type="password" name="haslo" /><br /><br />
  14. <input name="dalej" type="submit" value="Dalej"><br /><br />
  15. </form><a style="text-decoration: none;" href="index.php?page=paneladmina">Wróć do Panelu Administratora</a><br /><br />';
  16. }
  17. else
  18. {
  19. echo '<form action="index.php?page=zmien_haslo&wpis=2" method="post"><br />
  20. Podaj login:<br /><input type="text" name="loginek" /><br /><br />
  21. Podaj email:<br /><input type="text" name="email" /><br /><br />
  22. Podaj hasło:<br /><input type="password" name="haslo" /><br /><br />
  23. <input name="dalej" type="submit" value="Dalej"><br /><br />
  24. </form><a style="text-decoration: none;" href="index.php?page=paneladmina">Wróć do Panelu Administratora</a><br /><br />';
  25. $login = strip_tags(htmlspecialchars(mysql_real_escape_string($_POST['loginek'])));
  26. $haslo = strip_tags(htmlspecialchars(mysql_real_escape_string(md5(sha1($_POST['haslo'])))));
  27. if(empty($login) || empty($haslo) || empty($email))
  28. {
  29. echo 'Uzupełnij wszystkie pola.<br /><br />';
  30. $error = true;
  31. }
  32. else
  33. {
  34. $log = mysql_query("SELECT * FROM admin WHERE loginek='".$login."'");
  35. $log1 = mysql_num_rows($log);
  36. if($log1 === 0)
  37. {
  38. echo 'Podany login jest nieprawidłowy.<br /><br />';
  39. $error = true;
  40. }
  41. $ema = mysql_query("SELECT * FROM admin WHERE email='".$email."'");
  42. $ema1 = mysql_num_rows($ema);
  43. if($ema1 === 0)
  44. {
  45. echo 'Podany email jest nieprawidłowy.<br /><br />';
  46. $error = true;
  47. }
  48. $has = mysql_query("SELECT * FROM admin WHERE haslo='".$haslo."'");
  49. $has1 = mysql_num_rows($has);
  50. if($has1 === 0)
  51. {
  52. echo 'Podane hasło jest nieprawidłowe.<br /><br />';
  53. $error = true;
  54. }
  55. }
  56. }
  57. if((isset($_POST['dalej']))&&($error==false))
  58. {
  59. echo '<form action="index.php?page=zmien_haslo&wpis=3" method="post">
  60. <input type="hidden" name="login" value="'.$login.'"><br />
  61. Podaj stare hasło<br /><input type="password" name="haslos" /><br /><br />
  62. Podaj nowe hasło<br /><input type="password" name="haslo1" /><br /><br />
  63. Powtórz nowe hasło<br /><input type="password" name="haslo2" /><br /><br />
  64. <input name="zapisz" type="submit" value="Zapisz" /></form><br />
  65. <a style="text-decoration: none;" href="index.php?page=paneladmina">Wróć do Panelu Administratora</a><br /><br />';
  66. }
  67. if((isset($_POST['zapisz']))&&($error==false))
  68. {
  69. $haslos = strip_tags(htmlspecialchars(mysql_real_escape_string(md5(sha1($_POST['haslos'])))));
  70. $haslo1 = strip_tags(htmlspecialchars(mysql_real_escape_string(md5(sha1($_POST['haslo1'])))));
  71. $haslo2 = strip_tags(htmlspecialchars(mysql_real_escape_string(md5(sha1($_POST['haslo2'])))));
  72. if(empty($haslos) || empty($haslo1) || empty($haslo2))
  73. {
  74. echo 'Uzupełnij wszystkie pola.<br /><br />';
  75. $error = true;
  76. }
  77. elseif(!empty($haslos) || !empty($haslo1) || !empty($haslo2))
  78. {
  79. $has = mysql_query("SELECT * FROM admin WHERE haslo='".$haslos."'");
  80. $has1 = mysql_num_rows($has);
  81. if($has1 === 0)
  82. {
  83. echo 'Podane hasło jest nieprawidłowe.<br /><br />';
  84. $error = true;
  85. }
  86. if($haslo1 != $haslo2)
  87. {
  88. echo 'Podane hasła nie są identyczne.<br /><br />';
  89. $error = true;
  90. }
  91. }
  92. else
  93. {
  94. $zapytanie1 = 'UPDATE `admin` SET `haslo`= "'.$haslo2.'" WHERE `loginek`="'.$login.'"';
  95. $idzapytania1 = mysql_query($zapytanie1) or die(mysql_error());
  96. if($idzapytania1 === TRUE)
  97. {
  98. echo '<font color="green"><strong>Hasło zostało zmienione.</strong></font><br /><br />';
  99. $error = true;
  100. }
  101. else
  102. {
  103. echo '<font color="red"><strong>Nie udało się zmienić hasła.<br />Proszę spróbować za jakiś czas</strong></font><br /><br />';
  104. $error = true;
  105. }
  106. }
  107. }
  108. ?>
selecton
Troche niepotrzebnie to zagmatwałeś. Generalnie chcesz zrobić taki algorytm:
  1.  
  2. function isForm1Submitted() { return isset($_POST['zapisz'] ); }
  3. function getForm1() { return '<form...'; }
  4. function getForm1Errors() return null albo string z błędami }
  5.  
  6. function isForm2Submitted() { return isset($_POST['zapisz']); }
  7. function getForm2Errors() { return null albo string z błędami }
  8. function getForm2() {return '<form...'; }
  9. function saveForm2() { update table... }
  10.  
  11. if( isForm2Submitted() ) {
  12. $validation = getForm2Errors()
  13. if( $errors === null) {
  14. saveForm2();
  15. echo 'Hasło zostało zmienione';
  16. } else {
  17. echo getForm2();
  18. echo $errors;
  19. }
  20.  
  21.  
  22. } else {
  23.  
  24. if( isForm1Submitted() ) {
  25. $errors = getForm1Errors();
  26. if( $errors === null) {
  27. echo getForm2();
  28. } else {
  29. echo getForm1();
  30. echo $errors;
  31. }
  32.  
  33. } else {
  34. echo getForm1();
  35. }
  36. }
  37.  


To jest tylko szkic algorytmu - pokombinuj w tym kierunku.
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.