Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql]panel administracyjny
Forum PHP.pl > Forum > Przedszkole
Oscar_83
Mam problem ponieważ gdy klikam na jakiegoś zawodnika to usuwa mi z najniższym id, wiem że coś musiałem namieszać z przekazywaniem jakie id ma być skasowane, lecz nie mogę dojśc co jest nie tak, prosiłbym o pomoc:
index.php
  1. <?php
  2. $_SESSION['username'] = $_POST['user'];
  3. $_SESSION['userpass'] = $_POST['pass'];
  4. $_SESSION['authuser'] = 0;
  5. //sprawdź użytkownika i hasło
  6. if (($_SESSION['username'] == '***') and
  7.  ($_SESSION['userpass'] == '***')) {
  8.  $_SESSION['authuser'] = 1;
  9.  } else {
  10.  echo "Przepraszam, ale nie masz uprawień do tej strony!";
  11.  exit();
  12.  }
  13.  
  14. $polaczenie = mysql_connect("localhost", "root", "krasnal") or die("Sprawdź połączenie z serwerem");
  15. mysql_select_db('tabele',$polaczenie) or die (mysql_error());
  16. mysql_query('SET NAMES latin2');
  17. ?>
  18. <html>
  19. <head>
  20. <title>Baza zawodników</title>
  21. <style type="text/css">
  22. TD{color:#353535;font-family:verdana"}
  23. TH{color:#FFFFFF;font-family:verdana;background-color:#336699}
  24. </style>
  25. </head>
  26. <body>
  27. <table border="0" width="600" cellspacing="1" cellpadding="3" bgcolor="#353535" align="center">
  28.  <tr>
  29.  <td bgcolor="#FFFFFF" colspan="2" align="center">
  30.  Zawodnicy <a href="zawodnicy2.php?action=add&id=">[DODAJ]</a>
  31.  </td>
  32.  </tr>
  33. <?php
  34. //pobieranie zawodników do edycji
  35.  $zawodsql = "SELECT * FROM zawodnicy";
  36.  $result = mysql_query($zawodsql)
  37.  or die ("Błędne zapytanie: " . mysql_error ());
  38.  while ($row = mysql_fetch_array($result)){
  39. ?>
  40.  <tr>
  41.  <td bgcolor="#FFFFFF" width="50%">
  42.  <?php echo $row['imie'];
  43.  echo "&nbsp";
  44.  echo $row['nazwisko']; ?>
  45.  </td>
  46.  <td bgcolor="#FFFFFF" width="50%" align="right">
  47.  <a href="zawodnicy2.php?action=edit&id=<?php
  48. echo $row['id'];?>">[EDYTUJ]</a>
  49.  <a href="delete.php?type=zawodnicy&id=<?php
  50. echo $row['id'];?>">[USUŃ]</a>
  51.  </td>
  52.  </tr>
  53.  <?php
  54.  }
  55.  ?>
  56. </table>
  57. </body>
  58. </html>

i plik delete.php
  1. <?php
  2. $polaczenie = mysql_connect("localhost", "root", "krasnal")
  3. or die ("Nie udało się połączyć: " . mysql_error());
  4. mysql_select_db('tabele',$polaczenie)
  5. or die (mysql_error());
  6. //zmiana nazw type na odpowiednie teksty
  7. $convert['zawodnicy']= 'zawodnika';
  8. //skrypt usuwania
  9.  if(!isset($_GET['do']) || $_GET['do'] !=1) {
  10. ?>
  11.  <p align="center" style="color:#FF0000">
  12. Czy jesteś pewien, że chcesz usunąć <?php
  13. echo $convert[$_GET['type']]; ?>?<br>
  14. <a href="<?php echo $_SERVER['REQUEST_URI']; ?>&do=1">tak</a>
  15. lub <a href="index.php">lista</a>
  16.  </p>
  17. <?php
  18. } else
  19. {
  20. //wygenerowanie polecenia SQL
  21.  $sql = "DELETE FROM " . $_GET['type'] . "
  22. WHERE 'id' = 'id'
  23. LIMIT 1";
  24. $result = mysql_query($sql)
  25. or die ("Niepoprawne zapytanie: " . mysql_error());
  26. ?>
  27.  <p align="center" style="color:#FF0000">
  28.  Właśnie usunąłeś <?php echo $convert[$_GET['type']]; ?>
  29.  <a href="index.php">Lista</a>
  30.  </p>
  31. <?php
  32. }
  33. ?>


Czy ktoś może wie co ja tu namieszałem questionmark.gif
I jeszcze jedno, jak zapamiętać to moje hasło żeby po kliknięciu na końcu na "Lista" przeniosło mnie do stronki index.php (bo w chwili obecnej tylko wrzuca że nie mam dostępu (czyli nie pamięta nazwy użytkownika i hasła)

PS: dodam jeszcze że moja tabela z zawodnikami nazywa się "zawodnicy" i kolumna pierwsza "id" primary key

wydaje mi się że błąd był tu:
  1. <?php
  2. //wygenerowanie polecenia SQL
  3.  $sql = "DELETE FROM " . $_GET['type'] . "
  4. WHERE 'id' = 'id'
  5. LIMIT 1";
  6. $result = mysql_query($sql)
  7. or die ("Niepoprawne zapytanie: " . mysql_error());
  8. ?>

troche zmieniłem ale dalej nie działa poprawnie :/
teraz mam coś takiego:
  1. <?php
  2. $sql = "DELETE FROM " . $_GET['type'] . "
  3. WHERE " . $_GET['type'] . "= '" . $_GET['id']."'
  4. LIMIT 1";
  5. ?>

wyskakuje błąd:
Niepoprawne zapytanie: Nieznana kolumna 'zawodnicy' w where clause czyli zapytanie niedobre - faktycznie bo nie mam kolumny zawodnicy tylko tabela nazywa się zawodnicy a kolumna jest id, ale jak to zmienić żeby podawało takie id jak ja klikam??
barat
Chyba będzie tak smile.gif

  1. <?php
  2. $sql = "DELETE FROM " . $_GET['type'] . "
  3. WHERE id =".$_GET['id']."
  4. LIMIT 1";
  5. ?>
Oscar_83
hehe no i super smile.gif gra i buczy smile.gif)) dzięki bardzo!!! smile.gif a jakie oczywiste się wydaje smile.gif
teraz jest super smile.gif jeszcze tylko:
jak zapamiętać to moje hasło żeby po kliknięciu na końcu na "Lista" przeniosło mnie do stronki index.php (bo w chwili obecnej tylko wrzuca że nie mam dostępu (czyli nie pamięta nazwy użytkownika i hasła)
barat
W każdym pliku który będzie korzystał z Sesji, lub je tylko potem przekazywał dalej musisz na górze wkleić

session_start ();

Więcej - w pliku Delete powinieneś też sprawdzać czy użytkownik jest zalogowany, bo w obecnej chwili każdy może sobie wejść w plik delete.php i kasować co mu się podoba smile.gif
Wystarczy sprawdzać warunek, czy jest ustawiony użytkownik smile.gif
Oscar_83
Ustawiłem tak jak mi podpowiadałeś wszędzie session_start (); ale i tak potem jak klikam żeby powrócił do listy to i tak klika że nie mam dostępu.
PS: jakim warunkiem sprawdza się czy jest ktoś zalogowany? bo faktycznie można wejść bez logowania np do pliku delete.
barat
Obecnie masz spory bład ...

Najpierw ustawiasz username i userpass zgodne z $_POST i authuser na 0

Więc jak wracasz ze swojego skryptu delete, ustawiasz znowu sesje username i userpass, a ponieważ nie ma już danych $_Post to te sesje ustawiasz na puste więc nie ma sily by Cie zalogowało smile.gif

Musisz to przerobić ... najpierw sprawdzasz czy są dane $_POST i jeśli są to przypisujesz im dane username i userpas (pierwsza instrukcja if)
Potem sprawdzasz czy SESSION userpass i username istnieją (isset($_SESSION['userpass/username'])) i odpowiadają wzorcom i ustawiasz Authuser na 1 jeśli tak, a Authuser 0 jeśli nie (instrukcja if - else)
Na końcu sprawdzasz czy istnieje sesja Authuser i jeśli wynosi 1 to nic nie robisz:

if (isset($_SESSION['authuser']) && $_SESSION['authuser'] == 1) {
// nic nie rób
} else {

Przekierowujesz na stronę błędu lub wywalasz komunikat o błędzie i kończysz skrypt)

W pozostałych stronach sprawdzasz warunek ten co wyżej , możesz go wkleić do każdej strony (sprawdza czy jest authuser )
Oscar_83
Hmm pisałem to wszystko na podstawie książki - robiłem to 1 raz,
nie wiem jak się sprawdza czy są dane $_POST, ale faktycznie tak jak mówisz pierw ustawiam tu u siebie autuhser na 0, czyli faktycznie nie może mi to działać.

Do sprawdzania czy użytkownik się zalogował znalazłem w książce kod:
  1. <?php
  2. if ($_SESSION['authuser'] !={
  3.  echo "Przepraszamy ale nie masz uprawnień do zobaczenia tej strony!";
  4.  exit ();
  5. }
  6. ?>

ten kod chyba podobnie działa co i ten co Ty mi podałeś, powrzucam go.

na moje to ten pierwszy if to powinno być coś takiego:
  1. <?php
  2. if (($_POST['user'] !=0) and
  3.  ($_POST['pass'] !=0)) 
  4. {$_SESSION['username'] == $_POST['user']
  5. $_SESSION['userpass'] == $_POST['pass']
  6. }
  7. else {
  8. ?>

czy to coś takiego będzie?? dobrze kombinuje?? przerobione troszke
i tak samo do drugiego ifa
oki próbuje jak to będzie działało
barat
Wystarczy

!$_POST['user'] , !$_POST['pass'] czyli wykrzykniki przed ... nie masz sprawdzać czy coś jest różne od zera tylko czy te zmienne w ogóle istnieją smile.gif


Dobrze kombinujesz smile.gif
Oscar_83
teraz to już wogóle namieszałem tak że szok, jak zacząłem kombinować to na moje normalne hasło nie chce wchodzić, zakręciłem się mocno w tych ifach, co ja natworzyłem tu:
  1. <?php
  2. if (!$_POST['user'] and !$_POST['pass'])
  3. {$_SESSION['username'] == $_POST['user'];
  4. $_SESSION['userpass'] == $_POST['pass'];
  5. }
  6. if (isset($_SESSION['userpass/username'])) {
  7.  $_SESSION['authuser'] = 1;
  8. }
  9.  else {
  10.  $_SESSION['authuser'] = 0;
  11.  }
  12.  
  13.  if (($_SESSION['username'] == '***') and
  14.  ($_SESSION['userpass'] == '***')) {
  15.  $_SESSION['authuser'] = 1;
  16.  } else {
  17.  echo "Przepraszam, ale nie masz uprawień do tej strony!";
  18.  exit();
  19.  }
  20.  if (isset($_SESSION['authuser']) && $_SESSION['authuser'] == 1) {
  21. // nic nie rób
  22. } else {
  23. echo "Przepraszam, ale nie masz uprawień do tej strony!";
  24.  exit();
  25.  }
  26. ?>

nie wiem czy chociaż kawałek tego będzie dobry :/
barat
  1. <?php
  2. if ($_POST['user']) and
  3.  ($_POST['pass'])
  4. {$_SESSION['username'] == $_POST['user'];
  5. $_SESSION['userpass'] == $_POST['pass'];
  6. }
  7. if (isset($_SESSION['username'] && $_SESSION['userpass'])) {
  8. if($_SESSION['username'] == "zuku" && $_SESSION['userpass'] == "27k11") {
  9.  $_SESSION['authuser'] = 1;} else {$_SESSION['authuser'] = 0;}
  10. }
  11.  else {
  12.  $_SESSION['authuser'] = 0;
  13.  }
  14.  
  15.  
  16.  if (isset($_SESSION['authuser']) && $_SESSION['authuser'] == 1) {
  17. // nic nie rób
  18. } else {
  19. echo "Przepraszam, ale nie masz uprawień do tej strony!";
  20.  exit();
  21.  }
  22. ?>


Mogą być literówki smile.gif
Oscar_83
rozumiem że w 3 i 4 linii przed $_POST powinny być wykrzykniki tak?
wielkie dzięki za przeróbkę smile.gif
barat
Nie powinno być wykrzykników smile.gif

Tu sprawdzamy, czy $_POST zawierają dane (czyli bez wykrzykników) i jeśli tak , ustawiamy je w sesji
Oscar_83
troszeczke zmieniłem bo brakowało w 2 miejscach nawiasów no i teraz jest coś takiego:
  1. <?php
  2. if (($_POST['user']) and ($_POST['pass']))
  3. {$_SESSION['username'] == $_POST['user'];
  4. $_SESSION['userpass'] == $_POST['pass'];
  5. }
  6. if (isset($_SESSION['username']) && ($_SESSION['userpass'])) {
  7. if($_SESSION['username'] == "zuku" && $_SESSION['userpass'] == "27k11") {
  8.  $_SESSION['authuser'] = 1;} else {$_SESSION['authuser'] = 0;}
  9. }
  10.  else {
  11.  $_SESSION['authuser'] = 0;
  12.  }
  13.  
  14.  
  15.  if (isset($_SESSION['authuser']) && $_SESSION['authuser'] == 1) {
  16. // nic nie rób
  17. } else {
  18. echo "Przepraszam, ale nie masz uprawień do tej strony!";
  19.  exit();
  20.  }
  21. ?>

i niestety dalej nie działa, tzn nie mogę się zalogować wpisując prawidłowo hasło i login :/

Gdy skasowałem wszystko od 16 linii to myślałem już że jest wszystko oki bo zalogowało mnie a potem po delete wskoczyło normalnie znowu, ale okazało się że poprostu co by nie wpisał to wchodziło :/ więc dalej kombinuje
barat
sprawdź w 3 linii w w AND czy muszą być podwójne nawiasy - chyba nie smile.gif (to są te co dodałeś, a ja usunąłem tongue.gif)

Na razie piszę dla siebie trochę pokomplikowane cuś (też jestem początkujący) więc nie za bardzo mam czas sie wgłębić i pisze z głowy smile.gif

Na bank gdzieś mam przerobione przykłady z logowaniem na sesjach ... znajde to dam , ale pewnie szybciej sam na to wpadniesz smile.gif

Pisz od początku testowy skrypt ... po kolei,, kroczkami,
Najpierw niech wyłapie $_POST, ustawi password i username na to co było w post i wyświetli (echo) ... potem powoli dodawaj nowe ... smile.gif

Ja po prostu jak piszę, to właśnie co kilka kroczków na chwile wstukuje echo ostatniej lub jakiejś ważnej zmiennej i sprawdzam co zwraca smile.gif
Oscar_83
dodałem bo wywalało mi błąd ale teraz usunąłem i działa, lecz ciągle pisze że nie mam dostępu wpisując prawidłowe hasło, zmienie jeszcze ten drugi nawias który dodałem, może też niepotrzebnie.
Gdy usunąłem te drugie nawiasy to już była lipa - błędy - oki będę kombinował.

Wydaje mi się że ta linijka:
  1. <?php
  2. if($_SESSION['username'] == "zuku" && $_SESSION['userpass'] == "27k11")
  3. ?>

nie powinna być w { } tyle że samo zlikwidowanie {} nie pomoże trzeba by było to jakoś przekształcić.
Kicok
A nie prościej zrobić to w ten sposób:


1. Startujesz sesję
2. Sprawdzasz, czy $_SESSION['authuser'] jest ustawiona (isset" title="Zobacz w manualu PHP" target="_manual) i czy jest równa 1
> 3. Jeśli tak, to wyświetlasz treść strony dla zalogowanych

4. Jeśli nie, to sprawdzasz, czy wysłany został formularz:(empty" title="Zobacz w manualu PHP" target="_manual)
> 5. Jeśli nie, to przerzucasz użytkownika do strony z formularzem logowania (header" title="Zobacz w manualu PHP" target="_manual)
> 6. Jeśli tak, to sprawdzasz czy podane login i hasło się zgadzają:
>> 7. Jeśli nie, to wyświetlasz informacje, że podano złe dane podczas logowania
>> 8. Jeśli tak, to ustawiasz $_SESSION['authuser'] na 1 i przeładowujesz stronę, żeby cały kod - łącznie ze sprawdzaniem $_SESSION['authuser'] - wykonał się ponownie (header" title="Zobacz w manualu PHP" target="_manual)

Do tego jeszcze jakiś pliczek logout.php, który usunie zmienną sesyjną $_SESSION['authuser'] (unset" title="Zobacz w manualu PHP" target="_manual) i przekieruje na stronę główną, albo do formularza logowania (header" title="Zobacz w manualu PHP" target="_manual)
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.