Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Zadanie zaliczeniowe przedmiot
Forum PHP.pl > Forum > Przedszkole
Sinolop
Witam Serdecznie,
Dostałem zadanie zaliczeniowe na przedmiot Aplikacje Internetowe i co tutaj dużo mówić, kompletnię sobie z nim nie radzę.

Jego treść
Cytat
Wykonaj prosty skryptu z logowaniem dla 2 użytkowników: admin i użytkownik (admin pełne uprawnienia, user 'widzi' tylko swoje zadania).

Skrypt ma 2 zadania:

a. Dodawanie do bazy danych zadań do wykonania:

1. Dodaj zadanie
pola: tytuł zadania (najlepiej z podpowiedzią, czyli dopisane, sklep, strona www, itp), treść pełna, termin (kalendarz), kto wykonuje (admin lub user do wyboru), kwota, % zrobionego zadania,

2. Wyświetl zadania - pokazuje zaraz po zalogowaniu się tabelka z zadaniami wg daty dodania z sortowaniem wg daty zakończenia oraz zadania niedokończone zawsze na górze.
Możliwe opcje: edycja, usunięcie, zakończenie zadania (daje 100%), przycisk: dodaj 1 dzień, dodaj 10%.

Całość najlepiej na PHP 5.4 i wyższym, mile widzialny system Smarty (http://www.smarty.net/)


  1. <?php session_start();
  2. require_once('db.php');
  3. error_reporting(E_ALL ^ E_NOTICE);
  4. ?>
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  8. <link href="css/style.css" rel="stylesheet" type="text/css" />
  9. <title></title>
  10. <meta name="description" content="" />
  11. <meta name="keywords" content="" />
  12. </head>
  13.  
  14. <body>
  15.  
  16. <?php if ($_SESSION['auth'] == TRUE) {
  17. echo "Witaj $_SESSION[user] <br />" ;
  18.  
  19.  
  20. }
  21. else {
  22. echo '<meta http-equiv="refresh" content="1; URL=index.php">';
  23. echo '<p style="padding-top:10px;color:white";><strong>Próba nieautoryzowanego dostępu...</strong><br />trwa przenoszenie do formularza logowania</p>';
  24. }
  25.  
  26. $data = date;
  27. $tytul = mysql_real_escape_string(htmlspecialchars($_POST['tytul']));
  28. $tresc = mysql_real_escape_string(htmlspecialchars($_POST['tresc']));
  29. $uzytkownik = mysql_real_escape_string(htmlspecialchars($_POST['uzytkownik']));
  30. $kwota = mysql_real_escape_string(htmlspecialchars($_POST['kwota']));
  31.  
  32. if(isset($_POST['submit']))
  33. {
  34. if(!$tytul) || (!$tresc ) || (!$tresc ) || (!$uzytkownik) || (!$kwota)
  35. {
  36. echo "Nazwa lub treść są puste";
  37. }
  38. else{
  39. $zapytanie = mysql_query("INSERT INTO `zadania` (`id_zad`, `tytul_zadania`, `tresc_pelna`, `termin`, `użytkownik`, `kwota`) VALUES ('', '$tytul', '$tresc', '$data', '$uzytkownik', '$kwota' )");
  40. }
  41.  
  42. if($zapytanie)
  43. {
  44. echo "zadanie dodane poprawnie ";
  45. }else{
  46. echo "zadanie nie zostalo dodane ";
  47. }
  48. }
  49. ?>
  50.  
  51. <form action="" method="post">
  52. <input type="text" name="tytul" value="tytul" /> <br />
  53. <input type="text" name="tresc" value="tresc" /> <br />
  54. <input type="text" name="uzytkownik" value="uzytkownik" /> <br />
  55. <input type="text" name="kwota" value="kwota" /> <br />
  56.  
  57. <input type="submit" name="submit" value="Dodaj" />
  58. </form>
  59.  
  60.  
  61. </body>
  62.  
  63. </html>

Przy próbie dodania nowego zadania mam błąd Parse error: syntax error, unexpected '||' (T_BOOLEAN_OR) in C:\xampp\htdocs\zadanie\dodaj.php on line 42
gitbejbe
jeśli masz problem z takimi rzeczami to nie wróżę Tobie szybkiego zaliczenia...

Na resztę kodu nie patrzyłem, nie mam nawet zamiaru - a raczej nerwów.

w Linijce 42 - masz problem z nawiasami(nie wiem jak ty to wymyśliłeś ale jesteś dobry), powinno być:

if(!$tytul || !$tresc || !$tresc || !$uzytkownik || !$kwota)

Do nauki !
jarek0203
  1. if(!$tytul) || (!$tresc ) || (!$tresc ) || (!$uzytkownik) || (!$kwota)


if (warunek) // w nawiasie podajemy warunek do sprawdzenia
To powinno wyglądać tak:

  1. if ((!$tytul) || (!$tresc ) || (!$tresc ) || (!$uzytkownik) || (!$kwota))


Teraz powinno dziaćsmile.gif
kujol
To zastąp:

  1. if (! $tytul ) || (!
  2. $tresc ) || ( ! $tresc ) ||
  3. ( ! $uzytkownik ) || (!
  4. $kwota )


Tym:

  1. if (empty( $tytul AND $tresc AND $tresc AND $uzytkownik AND $kwota ))
gitbejbe
@kujol To żeś też dorzucił do pieca...
kujol
Nie pójdzie to? z isset() działa normalnie smile.gif
Kshyhoo
Że też nie widziałem tego wcześniej. Nie odrabiamy roboty za kogoś. Ucz się. Zamykam.

Chociaż zmieniam zdanie, tylko dlatego, że masz zalążek kodu...

Przykład użycia if wraz z lub:
  1. if($_POST['liczba1'] == 1 || $_POST['liczba2'] == 2)
com
Kshyhoo takie pytanie od kiedy && to lub? tongue.gif
Kshyhoo
A ja wkleiłem &&, poprawiam wink.gif Co nie zmienia zasady użycia ;p
com
a kto tu mówi o zmianie zasady użycia? biggrin.gif
Cytat
Przykład użycia if wraz z lub:


Bardziej chodziło mi o to, bo jedno drugiemu przeczyło wink.gif

Cytat
mile widzialny system Smarty (http://www.smarty.net/)


Naprawdę jeszcze was tego uczą?!
Sinolop
Dzięki za szybką odpowiedź,Kshyhoo nie chcę żeby ktoś za mnie odrabiał pracę, szanuję każdego czas i więdzę, chcę tylko nakierowania i drobnej pomocy jeśli naprawdę zatrzymam się w zadaniu.Wiem że na tym forum jest dużo specjalistów którzy pracują zawodowo. A co do smarty , nie wiem czy go wg użyje w tym skrypcie.

Dodawanie zadań mi działa, jednak mam problem z
Cytat
Możliwe opcje: edycja, usunięcie, zakończenie zadania (daje 100%), przycisk: dodaj 1 dzień, dodaj 10%.
Usunięcie zadania rozumiem że ma wyglądać tak że tworzę formularz i klient podaje id zadania do usunięcia? Czy jest taka możliwość żeby wyświetlić wszystkie zadania które są w tabeli zadania i obok zadań opcję edytuj usuń zakończenie zadania i przyciski dodaj 1 dzień i 1 dodaj 10 % ale żeby te opcję odwoływały się właśnie to tego zadania, tzn. tworzę zadanie i od razu mam te opcję.Mam nadzieję że wyjaśniłem w miarę dokładnie.
mar1aczi
Cytat(Sinolop @ 19.02.2014, 16:53:06 ) *
Czy jest taka możliwość żeby wyświetlić wszystkie zadania które są w tabeli zadania i obok zadań opcję edytuj usuń zakończenie zadania i przyciski dodaj 1 dzień i 1 dodaj 10 % ale żeby te opcję odwoływały się właśnie to tego zadania, tzn. tworzę zadanie i od razu mam te opcje.

Tak, jest to możliwe. Wybierasz (select) wszystkie zadania z tabeli, a wypisując listę, przy "tworzeniu" opcji edytuj/usuń itp. posługujesz się id zadania. Na podstawie id wiadomo, które zadanie ma zostać usunięte/poprawione(czyli zwiększasz status wykonania czy ustawiasz, że zakończone).
emillo91
Cytat(Sinolop @ 18.02.2014, 22:17:55 ) *
if(!$tytul) || (!$tresc ) || (!$tresc ) || (!$uzytkownik) || (!$kwota)
{

A dlaczego dałeś 2x zmienną $tresc??
Sinolop
Rozumiem że edytuj , usuń mają być w osobnych plikach i ma być odnośnik do nich? Przykładowo edytuj
  1. $zapytanie = mysql_query("UPDATE `zadania` SET `tytul_zadania`= '$tytul', `tresc_pelna`= '$tresc', `termin`= '$termin', `użytkownik`= '$uzytkownik', `kwota`= '$kwota' WHERE id_zad='$id'");
do tego formularz który aktualizuje dane, a jak zrobić przycisk który dodaje procent wykonania oraz dzień?

Mam również pytanie co do uprawnień a mianowicie w treści jest
Cytat
(admin pełne uprawnienia, user 'widzi' tylko swoje zadania
jak mogę to zrealizować? Napisałem tak
  1. <?php session_start();
  2. require_once('db.php');
  3. ?>
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <link href="css/style.css" rel="stylesheet" type="text/css" />
  8. <title></title>
  9. <meta name="description" content="" />
  10. <meta name="keywords" content="" />
  11. </head>
  12.  
  13. <body>
  14.  
  15. <?php
  16. /* jeżeli nie wypełniono formularza - to znaczy nie istnieje zmienna login, hasło i sesja auth
  17.   * to wyświetl formularz logowania
  18.   */
  19. if (!isset($_POST['login']) && !isset($_POST['password']) && $_SESSION['auth'] == FALSE) {
  20. ?>
  21.  
  22. <form name="form-logowanie" action="index.php" method="post">
  23. Login: <input type="text" name="login" /><br />
  24. Hasło: <input type="password" name="password" />
  25. <input type="submit" name="zaloguj" value="Zaloguj" />
  26. </form>
  27.  
  28. <?php
  29. }
  30. /* jeżeli istnieje zmienna login oraz password i sesja z autoryzacją użytkownika jest FALSE to wykonaj
  31.   * skrypt logowania
  32.   */
  33. elseif (isset($_POST['login']) && isset($_POST['password']) && $_SESSION['auth'] == FALSE) {
  34.  
  35. // jeżeli pole z loginem i hasłem nie jest puste
  36. if (!empty($_POST['login']) && !empty($_POST['password'])) {
  37.  
  38. // dodaje znaki unikowe dla potrzeb poleceń SQL
  39. $login = mysql_real_escape_string($_POST['login']);
  40. $password = mysql_real_escape_string($_POST['password']);
  41.  
  42. // szyfruję wpisane hasło za pomocą funkcji md5()
  43. $password = md5($password);
  44.  
  45. /* zapytanie do bazy danych
  46.   * mysql_num_rows - sprawdzam ile wierszy odpowiada zapytaniu mysql_query
  47.   * mysql_query - pobierz wszystkie dane z tabeli user gdzie login i hasło odpowiadają wpisanym danym
  48.   */
  49. $sql = mysql_num_rows(mysql_query("SELECT * FROM `user` WHERE `login` = '$login' AND `password` = '$password'"));
  50.  
  51. // jeżeli powyższe zapytanie zwraca 1, to znaczy, że dane zostały wpisane poprawnie i rejestruję sesję
  52. if ($sql == 1) {
  53.  
  54. // zmienne sesysje user (z loginem zalogowanego użytkownika) oraz sesja autoryzacyjna ustawiona na TRUE
  55. $_SESSION['user'] = $login;
  56. $_SESSION['auth'] = TRUE;
  57.  
  58. // przekierwuję użytkownika na stronę z ukrytymi informacjami
  59. echo '<meta http-equiv="refresh" content="1; URL=hide.php">';
  60. echo '<p style="padding-top:10px";><strong>Proszę czekać...</strong><br />trwa logowanie i wczytywanie danych</p>';
  61. }
  62.  
  63. // jeżeli zapytanie nie zwróci 1, to wyświetlam komunikat o błędzie podczas logowania
  64. else {
  65. echo '<p style="padding-top:10px;color:red";>Błąd podczas logowania do systemu<br />';
  66. echo '<a href="index.php">Wróć do formularza</a></p>';
  67. }
  68. }
  69.  
  70. // jeżeli pole login lub hasło nie zostało uzupełnione wyświetlam błąd
  71. else {
  72. echo '<p style="padding-top:10px;color:red";>Błąd podczas logowania do systemu<br />';
  73. echo '<a href="index.php">Wróć do formularza</a></p>';
  74. }
  75. }
  76.  
  77. // jeżeli sesja auth jest TRUE to przekieruj na ukrytą podstronę
  78. elseif ($_SESSION['auth'] == TRUE && !isset($_GET['logout'])) {
  79. echo '<meta http-equiv="refresh" content="1; URL=hide.php">';
  80. echo '<p style="padding-top:10px"><strong>Proszę czekać...</strong><br />trwa wczytywanie danych</p>';
  81. }
  82.  
  83. // wyloguj się
  84. elseif ($_SESSION['auth'] == TRUE && isset($_GET['logout'])) {
  85. $_SESSION['user'] = '';
  86. $_SESSION['auth'] = FALSE;
  87. echo '<meta http-equiv="refresh" content="1; URL=index.php">';
  88. echo '<p style="padding-top:10px"><strong>Proszę czekać...</strong><br />trwa wylogowywanie</p>';
  89. }
  90. ?>
  91.  
  92. </body>
  93.  
  94. </html>

Po zalogowaniu admin przekierowany jest na stronę hide.php w której ma prawa dodawać,usuwać,edytować zadania a user ma tylko widzieć zadania, jak to zrealizować w tym przypadku ?
mar1aczi
Najprościej: w tabeli users dajesz kolumnę privilages i ustawiasz w niej np. 1 jeśli admin, 2 jeśli zwykły użytkownik. Podczas logowania "sprawdzasz" tą kolumnę. W zależności od uprawnień wyświetlasz albo wszystkie zadania albo tylko dla zalogowanego użytkownika.
Sinolop
Z prawami dostępu zrobiłem tak że przygotowałem 2 wersje strony zależnie od użytkownika, tak wydało mi się prościej, tzn sprawdzam tylko zmienną sesyjną i na jej podstawie wybieram stronę z edycją lub bez niej.(Nie wiem czy sposób mar1aczi nie jest bardziej profesjonalny). Problem mam z przyciskiem który będzie dodawał 10 % wykonania oraz dodawał 1 dzień przycisk: dodaj 1 dzień, dodaj 10% tak jest w treści.
KR2615
Cytat(mar1aczi @ 19.02.2014, 22:26:16 ) *
Najprościej: w tabeli users dajesz kolumnę privilages i ustawiasz w niej np. 1 jeśli admin, 2 jeśli zwykły użytkownik. Podczas logowania "sprawdzasz" tą kolumnę. W zależności od uprawnień wyświetlasz albo wszystkie zadania albo tylko dla zalogowanego użytkownika.

Jeszcze prościej, pole admin typu BOOLEAN i warunek
  1. if($user[admin]) { echo "Link do edycji"; }

Cytat(Sinolop @ 19.02.2014, 23:23:59 ) *
Z prawami dostępu zrobiłem tak że przygotowałem 2 wersje strony zależnie od użytkownika, tak wydało mi się prościej, tzn sprawdzam tylko zmienną sesyjną i na jej podstawie wybieram stronę z edycją lub bez niej.(Nie wiem czy sposób mar1aczi nie jest bardziej profesjonalny). Problem mam z przyciskiem który będzie dodawał 10 % wykonania oraz dodawał 1 dzień przycisk: dodaj 1 dzień, dodaj 10% tak jest w treści.

A po co dwie wersje? Jak wspomniałem powyżej, dla elementów które mają się pokazywać adminowi dodać powyższy warunek. Do edycji i usuniecia nie potrzeba dodatkowych plików, wystarczy w URLu coś typu ?action=edit a potem w zależności co pojawia się w $_GET[action] wykonywać odpowiednie akcje, oczywiście sprawdzając wcześniej, czy user ma uprawnienia admina.
Sinolop
Niezabardzo rozumiem jak usunięcie wykonać za pomocą linku(link przecież też będzie się odwoływał do pliku z zapytaniem).Mam takie pytanie, kiedy pobieram wszystkie rekordy z bazy, w moim wypadku zadania, czy możliwe jest żeby od razu obok konkretnego zadania były opcję edytuj, usuń, dodaj dzień, dodaj % wykonania Nie proszę o gotowy kod, tylko o wskazówkę jak to zrobić. Chodzi o to żeby link generował się przy wyświetleniu tabeli.
Kshyhoo
W linku misi być zawarta fraza, np.: edytuj=10, gdzie 10 to ID rekordu. Musisz tak spreparować link, żeby to ID się tam znalazło.
Potem odbierasz z $_GET to ID i przekazujesz do skryptu.
c4ash
Cytat(Sinolop @ 20.02.2014, 13:49:01 ) *
Niezabardzo rozumiem jak usunięcie wykonać za pomocą linku(link przecież też będzie się odwoływał do pliku z zapytaniem).

Dajesz przykladowo tak:
  1. <a href="pokazzadanie.php?akcja=skasuj&&id=ID_ZADANIA">Skasuj zadanie</a>





Cytat(Sinolop @ 20.02.2014, 13:49:01 ) *
Mam takie pytanie, kiedy pobieram wszystkie rekordy z bazy, w moim wypadku zadania, czy możliwe jest żeby od razu obok konkretnego zadania były opcję edytuj, usuń, dodaj dzień, dodaj % wykonania Nie proszę o gotowy kod, tylko o wskazówkę jak to zrobić. Chodzi o to żeby link generował się przy wyświetleniu tabeli.

Laczac wczesniejsze z tym:
  1. $akcja = $_GET[akcja];
  2. $linkId = $_GET[id];
  3.  
  4. if ($akcja == 'show') {
  5. //zapytanie do bazy pokazujace wszystkie zadania
  6. //robisz to w petli, np. while
  7. $zapytanieDoBazy = mysql_query("SELECT ....") or die(mysql_error());
  8. $r = mysql_fetch_array($zapytanieDoBazy);
  9. while ($r['id'] > 0) {
  10. //wyswietlasz zadania
  11. echo $r['id_zadania'].'<br />Cos tam jeszcze co chcesz.....';
  12. //a pod spodem przykladowo pare klikow takich jak ponizej
  13. echo '<a href=pokazzadanie.php?akcja=edytuj&&id='.$r['id'].'">Edytuj</a>';
  14. }
  15. }
  16. elseif ($akcja == 'edytuj') {
  17. //akcja dla edycji
  18. $pobranieDanychDoEdycji = mysql_query("SELECT `id`,`...` FROM `...` WHERE `id` = '$linkId'");
  19. }
  20. elseif ($akcja == 'skasuj') {
  21. //akcja dla usuniecia
  22. }

Powyzsze mozesz zastapic instrukcja switch, wybor wedle uznania.
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.