Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP+sql]Wiadomosci nie usuwaja sie
Forum PHP.pl > Forum > Przedszkole
marcio
Witam mam taka funkcje lecz po kliknieciu na link usun wiadomosc nie usuwa sie dlaczego tak sie dziej moze zle jest zapytanie?
  1. <?php
  2. public function Pokaz_ksiege($liczba=50) {
  3. switch ($_GET['id']) {
  4.  
  5. case 'usun':
  6. if($db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) { 
  7. mysql_select_db($this->pasy['baza']);
  8. $ask = ("delete from ksiega where id=".$id."");
  9. mysql_query($ask, $db);
  10. break;
  11.  }
  12. }
  13.  
  14. if($db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) {
  15. mysql_select_db($this->pasy['baza']);
  16.  
  17. $query = ("select * from ksiega_gosci");
  18.  $wynik = mysql_query($query, $db) or die(mysql_error());
  19. $num = mysql_num_rows($wynik);
  20. $ile = ceil($num/50);
  21.  $strona = $_GET['strona'];
  22. $zap = ("select * from ksiega_gosci order by id desc limit ".$strona*$liczba.",".$liczba);
  23.  $ris = mysql_query($zap, $db) or die(mysql_error());
  24. $id = $_GET['id'];
  25.  
  26. while($tab = mysql_fetch_assoc($ris)) {
  27. if($tab['ip'] == $_SERVER['REMOTE_ADDR']) {
  28.  
  29. echo('<table border="1" width="55%" bgcolor="#4E4E68" align="center"><tr><td width="50%">Dodal: '.stripslashes($tab['nick']).'</td><td width="50%">Dnia:'.$tab['data'].'</td></tr>
  30. <tr><td>'.stripslashes($tab['message']).'</td>
  31. <td><a href="?strona='.$strona.'&id=usun">usun</a></td>
  32. </tr>
  33. </table></form>');
  34. }
  35.  
  36. else {
  37. echo('<table border="1" width="55%" bgcolor="#4E4E68" align="center"><tr><td width="50%">Dodal: '.stripslashes($tab['nick']).'</td><td width="50%">Dnia:'.$tab['data'].'</td></tr>
  38. <tr><td>'.stripslashes($tab['message']).'</td></tr></table></form>');
  39.  }
  40. }
  41. }
  42.  
  43. else {
  44. echo('<script>alert("Nie ma wpisow");</script>');
  45. }
  46.  
  47. if(is_numeric($strona) && !empty($strona) && $strona > 0) {
  48.  
  49. echo('<center><a href="?strona='.($strona-1).'">Poprzednia</a>|');
  50.  }
  51.  
  52.  
  53. if(is_numeric($strona) && !empty($strona) && $strona < $ile) {
  54.  
  55. echo('<a href="?strona='.($strona+1).'">Nastepna</a></center>');
  56.  }
  57.  
  58. else {
  59.  
  60. echo('<center><a href="?strona='.($strona+1).'">Nastepna</a>|');
  61.  }
  62. }
  63. ?>
nevt
register_globals się kłania... zamiast
  1. <?php
  2. switch ($_GET['id']) {
  3. ?>

wstaw
  1. <?php
  2. $id=$_GET['id'];
  3. switch ($id) {
  4. ?>

powodzenia.
Liko
Marcio: O w mordę...trochę sobie skopałeś ten kod.

1. Dlaczego w każdej instrukcji "case" chcesz się łączyć z DB? Wystarczy raz na początku skryptu (nawet przed wywołaniem metody).
2. Używasz $_GET['id'], aby rozpoznać akcję, a później chcesz wg. wartości w zmiennej $id usunąć wpis
Kod
$ask = ("delete from ksiega where id=".$id."");
. Lecz powiedz mi skąd Ci się wzięła ta zmienna? Nigdzie jej w funkcji nie masz zdeklarowanej...chyba, że gdzieś wcześniej w klasie. Może musisz użyć $this->id?

nevt: Co Ty bredzisz...jak byś zauważył, Marcio używa $_GET['id], aby rozpoznać akcję, a nie numer ID...
nevt
kolego Liko
Cytat
nevt: Co Ty bredzisz...jak byś zauważył, Marcio używa $_GET['id], aby rozpoznać akcję, a nie numer ID...

co jest oczywiście bardzo logiczne... a dlaczego nie $_GET['action'] questionmark.gif skoro ten kod się nie wykonuje, to być może warunek w SWITCH nigdy nie jest spełniony... chciałem tylko wskazać to miejsce jako potencjalną przyczynę problemu... a że $id nie jest nigdzie wcześniej zainicjowana, to jakoś sam łaskawie zauważyłeś... poza tym w dalcszej części kodu mamy:
  1. <?php
  2. $ris = mysql_query($zap, $db) or die(mysql_error());
  3.  $id = $_GET['id'];
  4. ?>
co zdecydowanie wskazuje, jakie jest właściwe przeznaczenie $_GET['id'] - no i kto tu bredzi i nie czyta kodu questionmark.gif

a wracając do tematu marcio, musisz sprawdzić, czy nie ma jakichś problemów z zapytaniem, uprawnieniami, itp... wstaw na chwilę w kodzie:
  1. <?php
  2. $ask = "delete from ksiega where id=$id";
  3. mysql_query($ask, $db);
  4. $error = mysql_error();
  5. echo "<br />id = ($id)<br />ask = ($ask)<br />error = ($error)<br />";
  6. ?>

i po chwili będziesz wiedział gdzie jest problem... powodzenia... a jak nie będziesz wiedział to wklej wyniki na forum i jakoś je zinterpretujemy...
marcio
ok popoludniu to sprawdze bo teraz jestem na kompie od mamy a tam nie ma serva biggrin.gif.
Cytat
Marcio: O w mordę...trochę sobie skopałeś ten kod

W jakim sensie??

A tak btw to te id w switchu zmienilem na action juz wczoraj odrazu po podaniu kodu tu na forum a dlatego ze zmienne id kolizowaly ze soba tak mi sie zdaje bo te $id z zapytania to id wiadomosci i na jej podstawie ma usunac wiadomosc a sam o tym zapomnialem wiec zmienilem na action ale i tak jak dobrze pamietam to nie dzialalo.
Potem jak juz to sprawdze, to napisz czy dziala czy nie
nevt
widzę, że dobrze kombinujesz... podpowiem - w linku wywołującym kasowanie powinieneś przekazać oba parametry:
  1. <?php
  2. echo '<a href="?strona='.$strona.'&action=usun&id='.$id.'">usun</a>';
  3. ?>

i wtedy na początku skryptu robisz:
  1. <?php
  2. $id = $_GET['id'];
  3. $action = $_GET['action'];
  4. if($action == 'usun')
  5. {
  6. // tutaj usuwasz wpis...
  7. }
  8. ?>

powodzenia
marcio
@NEVT kurde nie potrafie nic wykombinowac nie wiem czemu url dobrze wyglada wyswietla sie dobre id i wszystko jest on taki
  1. <?php
  2. <a href=&#092;"http://localhost/qwe.php?strona=&action=usun&id=182\"</a>
  3. ?>

Zmienna strona na poczatku nie ma zadnej wartosci wiec jest dobrze dopiero jak sie da na nastepna albo poprzednia przybiera wartosc i tak powinno byc, zmienna id tez ma dobra wartosc.
Tam gdzie jest zmienna action to mam takiego switch'a:
  1. <?php
  2. switch ($_GET['action']) {
  3.  
  4. case 'usun':
  5. if($db = mysql_connect($this->pasy['host'], $this->pasy['login'], $this->pasy['haslo'])) { 
  6. mysql_select_db($this->pasy['baza']);
  7. $ask = ("delete from ksiega where id=".$id."");
  8. mysql_query($ask, $db);
  9. break;
  10.  }
  11. }
  12. ?>

a link jaki podaje tak wyglada:
  1. <?php
  2. <a href="?strona='.$strona.'&action=usun&id='.$tab['id'].'">usun</a>
  3. ?>

i jest ok ale sie nie usuwa.Myslalem ze jak jest switch to juz if'a nie trzeba dawac bo on zastepuje if'a i teraz juz nie wiem co mam tam dopisac, jesli bylbys taki dobry przed swietami pokazalbys mi jak ma to wygladac na moim kodzie to sie tego naucze raz na zawsze?
nevt
po prostu brakuje ci w środku tego swich() - przed zbudowaniem zapytania do bazy linijki:
$id = $_GET['id'];
i powinno działać...
webdice
  1. <?php
  2. $ask = "delete from ksiega where id=" . $_GET['id'];
  3. ?>


Nie zapominaj o sql injection.
marcio
OMG ale ze mnie debil poprostu zle napisalem zapytanie napisalem:
  1. <?php
  2. $ask = ("delete from ksiega where id=".$_GET['id']);
  3. ?>

Zamiast:
  1. <?php
  2. $ask = ("delete from ksiega_gosci where id=".$_GET['id']);
  3. ?>

Wpisalem nazwe bazy zamiast nazwe tabeli pomieszalo mi sie ale dzieki za pomoc.
@webdicepl czy mozesz powiedziec jak te zapytanie moge uchronic przed sql injection bo wiem jak filtrowac dane z post i get ale czy to tak samo sie filtruje?Tzn czy mozesz pokazac jak to zabezpiczyc i jak w tym zapytaniu mozna zrobic sql injection?

P.S mam ustwaic ze zmienna $_GET['id '] ma byc int?
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.