Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie rekordów z bazy
Forum PHP.pl > Forum > PHP
renault12
Witam

Mam mały problem któy wygląda nastepujaco:
Chciałbym usuwac newsy ktore dodaje a w sposob jaki usuwac to taki aby na stronie glownej zaraz po wczytaniu newsa pojawial sie obok kazdego link "usun", napisalem sam jakis kod ale mam z nim problem poniewaz do wszystkich newsow jakie sie wyswietlaja ten link ma taki sam odsylacz np. "index?usun=27" i tak kazdy news, a chodzi mi o to zeby bylo chronologicznie, co innego jest gdy zapętlam to, wtedy pod kazdym postem wyswietlaja sie wszystkie linki a chodzi zeby do jednego newsa byl tylko jeden i to mu odpowiadajacy a tak nie jest : /

Oto kawalek kodu od poczatku wczytywania newsow:

  1. <?
  2. $wyn = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 40")
  3. or die('Błąd zapytania');
  4. if(mysql_num_rows($wyn) > 0) {
  5. while($s = mysql_fetch_assoc($wyn)) {
  6. echo "<font color='blue'><b><font size='3'>".$s['tytul']."</font></b></font>";
  7. echo "<br/>";
  8. echo "<font size='1.5'>Napisany w ".$s['czas'].", przez ".$s['userr']."</font>";
  9. echo "<br/>";
  10. echo "<br/><font size='2.5'><text align='left'>".$s['newsy']."";
  11. echo "<br/>";
  12. $edytt = mysql_query("SELECT user_name FROM users WHERE ranga='1'");
  13. while ($e = mysql_fetch_assoc($edytt)) {
  14. $tp = $e['user_name'];
  15. }
  16. if ($tp == $uss) {
  17. if ($e['ranga'] = 1) {
  18. if(isset($_GET['usun'])) {
  19. mysql_query("DELETE FROM `news` WHERE `id` = '".$_GET['usun']."'");
  20. header ("index.php");
  21. }
  22. $rezultat = mysql_query("SELECT * FROM `news` limit 1") or die("Błąd 2");
  23. $i = 0;
  24. while ($record = mysql_fetch_array($rezultat, MYSQL_ASSOC)) {
  25. ?> <p align="right"> <? echo "<a href=\"index.php?usun=".$record['id']."\">Usuń</a>";
  26. $i++;
  27. }
  28. ?> </p></p> <?
  29. }
  30. echo "<br/>";
  31. echo "<br/></font>";
  32. }
  33. echo "</table>";
  34. }
  35. }



Mam wielką prośbę do osoby która wyrazi troche checi na przerobienie tego kodu tak aby spelniala moje oczekiwania tzn. do kazdego newsa poprostu pod nim odnosnik usuwajacy go.
Będę bardzo wdzieczny.
Kshyhoo
Daj w pętli jakiś kod, który będzie ładował opcje usunięcia, np.:
  1. <form action='index.php?go=usun_news&id=".$dane['id']." 'class='pl' method='post'><input type='hidden' name='del' value='TAK'><input type='checkbox' name='usun_news' value='checked'> <input style='color: red;' type='submit' value='Usuń ' title='Musisz zaznaczyć chekbox, żeby usunąć!'></form>

Potem przesyłasz dane postem, odbierasz w pliku i kasujesz...
renault12
hmm miałbym do Ciebie prosbe jakbys napisal mi te pare linijek co zalatwilo by tę sprawe bo za nic sobie nie dam rady, robie to co mowisz ale jak robie to wychodzi jak zwykle :/
Kshyhoo
Musisz dokleić ten kod, gdzie ładujesz newsy. Trochę niebezpieczny ten Twój pomysł, bo w jakiś sposób musisz autoryzować dostęp do funkcji usuwania.
renault12
  1. <?
  2. $wyn = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 40")
  3. or die('Błąd zapytania');
  4. if(mysql_num_rows($wyn) > 0) {
  5. while($s = mysql_fetch_assoc($wyn)) {
  6. echo "<font color='blue'><b><font size='3'>".$s['tytul']."</font></b></font>";
  7. echo "<br/>";
  8. echo "<font size='1.5'>Napisany w ".$s['czas'].", przez ".$s['userr']."</font>";
  9. echo "<br/>";
  10. echo "<br/><font size='2.5'><text align='left'>".$s['newsy']."";
  11. ?> <form action='index.php?go=usun_news&id=".$dane['id']." 'class='pl' method='post'><input type='hidden' name='del' value='TAK'><input type='checkbox' name='usun_news' value='checked'>
  12. <input style='color: red;' type='submit' value='Usuń ' title='Musisz zaznaczyć chekbox, żeby usunąć!'></form>
  13. <? }
  14. } ?>


No i tak to wygląda, stoje w miejscu z tym.
Kshyhoo
Nie możesz tego wklejać "na żywca". To kod wyjęty z instrukcji echo, więc trzeba pokombinować z ' i ". Wybacz, ale nikt gotowca Ci nie podsunie, musisz nauczyć się myśleć sam. Wklej wpierw kawałek kodu, np. szkielet formularza i zobacz, jak się zachowa. Potem dodawaj po kawałku kod, eliminuj błędy. Jak dołączysz cały kod i pozbędziesz się błędów, wrzuć swój w instrukcję if, gdzie dołączysz kod do usuwania danych z bazy, bo nie możesz wykonać całości kodu na raz.
Thorang Hoog
W swoim kodzie umieszconym na stronie w linijce 22
  1. $rezultat = mysql_query("SELECT * FROM `news` limit 1") or die"Błąd 2");

wczytujesz jedynie ostatni wpis
dodaj :
  1. $rezultat = mysql_query("SELECT * FROM `news` WHERE id = ".$i." limit 1") or die("Błąd 2");


A tak wogóle po co wczytywać znowu te same dane gdy już wczytałeś numery id wyświetlanych newsów tongue.gif

I tak na boku kod jest nie odporny na ataki choćby w linijce 19
  1. mysql_query("DELETE FROM `news` WHERE `id` = '".$_GET['usun']."'");

Wstawiasz dane z tablicy _GET bezpośrednio do zapytania SQL musisz mieć mocne zaufanie do użytkowników tongue.gif
renault12
Też głupi że na to nie wpadłem, troche tam zmieniłem jeszcze i działa.
O bezpieczeństwo pomartwię się potem, pierw zrobie szkielet zeby to mniej wiecej smigalo jako tako.

Mam jeszcze jedno pytanie booo w momencie kiedy klikam na link do usuwania stronka sie odswieza link znika post zostaje ale po nastepnym odswiezeniu juz posta nie ma. Co zrobic aby przy jednym odswiezaniu wykasowalo newsa i tego linka? Wstawiam w różne miejsca
  1. include ("index.php");
ale wywala mi VHCS error jakiś.
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.