Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Komunikat administratora
Forum PHP.pl > Forum > Przedszkole
adrianozo
Witam wszystkich użytkowników.
Napisałem sobie skrypcik komunikatu administratora. Ma on działać tak: Jeśli nie ma rekordu w bazie to go dodaje, a jeśli jest to go edytuje i to działa. Dodałem do tego checkboxa, że jeśli checkbox jest zaznaczony to do bazy do kolumny poziom daje 1, a jeśli go odznaczę to daje 0. I z tym mam problem. Gdy stworzyłem komunikat bez zaznaczania checkbox jest ok treść się pojawia w bazie i poziom 0, gdy teraz zaznaczę checkbox też jest ok, treść się edytuje i poziom wchodzi na 1, ale gdy ponownie odznaczę checkbox to poziom się zmienia na 0, ale dodaje mi nowy rekord, a nie powinien bo dałem WHERE `id`='1'. Nie wiem co się dzieje.

komunikat.php:
  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. }
  10. if(isset($_GET['wpis']) && !empty($_GET['wpis']))
  11. {
  12. if($_GET['wpis']==1 && (isset($_POST['nadaj'])))
  13. {
  14. $zapytanie = "INSERT INTO `komunikat` (`tresc`, `poziom`) VALUES ('".$tresc."', '1')";
  15. $idzapytania = mysql_query($zapytanie);
  16. }
  17. elseif(!isset($_POST['nadaj']))
  18. {
  19. $zapytanie = "INSERT INTO `komunikat` (`tresc`, `poziom`) VALUES ('".$tresc."', '0')";
  20. $idzapytania = mysql_query($zapytanie);
  21. }
  22. }
  23. if(isset($_GET['wpis']) && !empty($_GET['wpis']))
  24. {
  25. if($_GET['wpis']==2 && (isset($_POST['nadaj'])))
  26. {
  27. $zapytanie = "UPDATE `komunikat` SET `tresc`= '".$tresc."', `poziom`= '1' WHERE `id`='1'";
  28. $idzapytania = mysql_query($zapytanie);
  29. }
  30. elseif(!isset($_POST['nadaj']))
  31. {
  32. $zapytanie = "UPDATE `komunikat` SET `tresc`= '".$tresc."', `poziom`= '0' WHERE `id`='1'";
  33. $idzapytania = mysql_query($zapytanie);
  34. }
  35. }
  36. if(mysql_num_rows(mysql_query("SELECT id FROM komunikat WHERE id='1'"))==1)
  37. {
  38. $pobierztresc = mysql_query("SELECT tresc FROM komunikat WHERE id='1'");
  39. $tresc = mysql_fetch_assoc($pobierztresc);
  40. echo '<form action="index.php?page=komunikat&wpis=2" method="post">
  41. <input type="hidden" name="send" value="2"><br />Treść<br />
  42. <br /><textarea name="tresc" cols="50" rows="10" id="textarea">'.stripslashes($tresc['tresc']).'</textarea><br /><br />
  43. Nadaj komunikat: <input type="checkbox" name="nadaj" value="nadane" /><br /><br />
  44. <input name="Zapisz" type="submit" value="Zapisz" />
  45. <input name="wyczysc" type="reset" value="Wyczyść" />
  46. </form><br /><a style="text-decoration: none;" href="index.php?page=paneladmina">Wróć do Panelu Administratora</a><br /><br />';
  47. }
  48. else
  49. {
  50. echo '<form action="index.php?page=komunikat&wpis=1" method="post">
  51. <input type="hidden" name="send" value="1"><br />Treść<br />
  52. <br /><textarea name="tresc" cols="50" rows="10" value="Nowa tresc" id="textarea">Tutaj będzie znajdował się komunikat administratora.</textarea>
  53. <br /><br />
  54. Nadaj komunikat: <input type="checkbox" name="nadaj" value="nadane" /><br /><br />
  55. <input name="Zapisz" type="submit" value="Zapisz" />
  56. <input name="wyczysc" type="reset" value="Wyczyść" />
  57. </form><br /><a style="text-decoration: none;" href="index.php?page=paneladmina">Wróć do Panelu Administratora</a><br /><br />';
  58. }
  59. if(isset($_POST['send']))
  60. {
  61. if($_POST['send'])
  62. {
  63. if($idzapytania)
  64. {
  65. echo '<font color="green"><strong>Komunikat został zapisany.</strong></font><br /><br />';
  66. }
  67. else
  68. {
  69. echo '<font color="red"><strong>Nie udało się zapisać komunikatu. Proszę spróbować za jakiś czas!</strong></font><br /><br />';
  70. }
  71. }
  72. }
  73. mysql_close($connect);
  74. ?>


Skrypt jednocześnie edytuje pierwszy rekord i dodaje nowy o tej samej treści sad.gif

A gdy zmieniam na poziom na 1 to tylko edytuje pierwszy rekord.
nitr0
Wg mnie, ale moge się mylić.

To Twóje warunki sa spełnione 2 razy i wykonywane są dwa polecenia:

  1. elseif(!isset($_POST['nadaj']))
  2. {
  3. $zapytanie = "INSERT INTO `komunikat` (`tresc`, `poziom`) VALUES ('".$tresc."', '0')";
  4. $idzapytania = mysql_query($zapytanie);
  5. }

oraz
  1. elseif(!isset($_POST['nadaj']))
  2. {
  3. $zapytanie = "UPDATE `komunikat` SET `tresc`= '".$tresc."', `poziom`= '0' WHERE `id`='1'";
  4. $idzapytania = mysql_query($zapytanie);
  5. }


Jest dodawany nowy wpis i aktualizowany stary.


A, i, formatuj kod! Bo musiałem sobie przekleić i potabulować żeby coś z tego załapać. winksmiley.jpg


Dodaj sobie w tych dwóch miejscach jakieś kontrolne warości, np echo "insert 2"; i potem echo "update 2"; czy coś, zobaczysz co kiedy jest wykonywane.
adrianozo
Mhmmm... Teraz pytanie co tu wymyślić smile.gif
nitr0
A gdybyś dodał do elseif warunek, że wpis=1 lub 2 ?

  1. <?php
  2.  
  3. elseif(!isset($_POST['nadaj']) && ($_GET['wpis']==1))
  4.  
  5. //....
  6.  
  7. elseif(!isset($_POST['nadaj']) && ($_GET['wpis']==2))
  8.  
  9. ?>


?
Kshyhoo
Co do zaznaczania, kiedyś coś podobnego spłodziłem. Może Ci się przyda...
Musisz zrobić coś na zasadzie:
W formularzu:
  1. <?php
  2. <input type="checkbox" name="box" value="1" <?=($box==1)?' checked="checked" ':''?> />
  3. ?>

Po zatwierdzeniu formularza (przeładowaniu):
  1. <?php
  2. if ($_POST['box'] == 1) { $box = 1; } else { $box = 0; }
  3. ?>

W bazie danych:
  1. enum('0','1')


PS. ja pisałem Ci już 2 razy, inni zwracają również uwagę, więc może weź sobie to do serca, uszanuj nasze prośby, czas i chęć pomocy i w końcu zastosuj odpowiednie formatowanie dla swojego skryptu - przecież to nic trudnego ani pracochłonnego a jest bardzo pomocne...
adrianozo
Wielkie dzięki smile.gif
Działa jak trzeba smile.gif Pomógł leci
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.