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

Napotkałem problemik dotyczacy usuwania rekordow z bazy danych.
Otóż mam taki kod:
  1. <?
  2. $start = $_GET['start'];
  3. $na_stronie = 8;
  4. $wykonaj=mysql_query("SELECT * FROM images");
  5. $znaleziono=mysql_num_rows($wykonaj);
  6. if($znaleziono>$na_stronie) {
  7. print '<center>Strona ';
  8. for($i=0; $i<ceil($znaleziono/$na_stronie); $i++)
  9. print '<a href="galeria.php?start='.($i*$na_stronie).'">'.($i+1).'</a> | ';
  10. }
  11. print '</center>';
  12.  
  13. $query = "SELECT * FROM images LIMIT ".($start).",".$na_stronie."";
  14. $result = mysql_query ($query);
  15. while ($row = mysql_fetch_assoc($result))
  16. {
  17. $obraz = $row['tn_filename'];
  18. $obrazduzy = $row['filename'];
  19. ?>
  20. <div id="mejn"> <?
  21. $uss = $_SESSION['user_name'];
  22. $edytt = mysql_query("SELECT user_name FROM users WHERE ranga='1'");
  23. while ($e = mysql_fetch_assoc($edytt)) {
  24. $tp = $e['user_name'];
  25. }
  26. if ($tp == $uss) {
  27. if ($e['ranga'] = 1) {
  28. if(isset($_GET['usun'])) {
  29. mysql_query("DELETE FROM `images` WHERE `idx` = '".$_GET['usun']."'");
  30. header ("usuwanie.php");
  31. }
  32. $rezultat = mysql_query("SELECT * FROM `images` WHERE idx = ".$row['idx']." limit 1") or die("Błąd 2");
  33. $i = 0;
  34. while ($record = mysql_fetch_array($rezultat, MYSQL_ASSOC)) {
  35. ?> <center><font size="2"> <? echo "<a href=\"galeria.php?usun=".$record['idx']."\"> - Usuń - </a>"; ?> </font></center> <?
  36. $i++;
  37. }
  38. }
  39. }
  40. echo "<a href='galleria/images/".$obrazduzy."'><img src='galleria/images/".$obraz."' border='0' />"; ?> </div>
  41. <?
  42. }
  43. ?>


W tym kodzie mam zawarte stronnicowanie, ktore dobrze chodzi, lecz jest problem w kodzie gdzie zaczyna sie usuwanie rekordów. Nad obrazkiem jest link usun i przypisany do niego id ktore wyglada mniej wiecej tak po najechaniu na niego myszka "http://blablabla.blabla.pl/blabla/galeria.php?usun=7". W momencie kiedy go naciskam, wraca do strony galeria.php i nic sie nie dzieje, nie usuwa sie zaden wpis do bazy danych.

Prosze o pomoc winksmiley.jpg
Fifi209
Pierwszy rzut oka:
  1. mysql_query("DELETE FROM `images` WHERE `idx` = '".$_GET['usun']."'");
  2. header ("usuwanie.php");
  3. }


header('Location: usuwanie.php');

i czemu jak wstawiasz liczby to dajesz w apostrofy ? lubisz generować dodatkowe zadania bazie w postaci konwertowania stringa na int?
renault12
1. Zmieniłem kod na taki jak kazałeś lecz dalej nie usuwa z bazy rekordow
2. Po nacisnieciu nie przenosi na podana strone : /
3.A dodawanie z apostrofami koliduje z czyms ? tzn . moze zaszkodzic rekordom etc.?
Fifi209
Cytat(renault12 @ 27.01.2010, 20:32:19 ) *
1. Zmieniłem kod na taki jak kazałeś lecz dalej nie usuwa z bazy rekordow

Nic nie kazałem, tylko wskazałem jeden z błędów który akurat rzucił mi się w oczy.
Cytat(renault12 @ 27.01.2010, 20:32:19 ) *
2. Po nacisnieciu nie przenosi na podana strone : /

Czyżby: headers already sent?
Cytat(renault12 @ 27.01.2010, 20:32:19 ) *
3.A dodawanie z apostrofami koliduje z czyms ? tzn . moze zaszkodzic rekordom etc.?

Koliduje z wydajnością winksmiley.jpg

Zrób sobie w php warunek:
  1. if ('1' === 1)
  2. echo 'ok';
  3. else
  4. echo 'oj cos nie tak';


To nie jest to samo winksmiley.jpg
renault12
No masz z tymi apostrofami racje.
Ale odswieze prosbe na temat usuwanie tych rekordow : P

mam tutaj kod który dziala do usuwania newsow :

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


Prawie taki sam jest ten ktory podalem na gorze, lecz tamten nie dziala.
Fifi209
Cytat(renault12 @ 27.01.2010, 21:08:25 ) *
No masz z tymi apostrofami racje.
Ale odswieze prosbe na temat usuwanie tych rekordow : P

  1. if ($e['ranga'] = 1) {


Teraz mi się rzuciło w oczy, ma być chyba podwójny znak równości.
renault12
No masz racje, juz poprawilem kod.

A co do tego usuwania to nie wiem co jest bo przy wcisnieciu "usun" przenosi i nie usuwa. Jak wpisuje naprzyklad
  1. echo $record['idx'];
wypisuje mi id w bazie naprzyklad "9". Adres odnosnika jest dobry rowniez. Nie wiem, widac to jakby nie wykonywalo akcji usuwania z bazy co do tego idzie nie wykrywa nacisniecia przycisku usun a powinno.
Fifi209
Pokaż mi przerobiony kod, według moich zaleceń i podpowiedzi.
renault12
  1. <div id="mainContent">
  2. <?
  3. if(isset($_GET['usun'])) {
  4. mysql_query("DELETE FROM `images` WHERE `idx` = '".$record['idx']."'");
  5. }
  6. $start = $_GET['start'];
  7. $na_stronie = 8;
  8. $wykonaj=mysql_query("SELECT * FROM images");
  9. $znaleziono=mysql_num_rows($wykonaj);
  10. if($znaleziono>$na_stronie) {
  11. print '<center>Strona ';
  12. for($i=0; $i<ceil($znaleziono/$na_stronie); $i++)
  13. print '<a href="galeria.php?start='.($i*$na_stronie).'">'.($i+1).'</a> | ';
  14. }
  15. print '</center>';
  16.  
  17. $query = "SELECT * FROM images LIMIT ".($start).",".$na_stronie."";
  18. $result = mysql_query ($query);
  19. while ($row = mysql_fetch_assoc($result))
  20. {
  21. $obraz = $row['tn_filename'];
  22. $obrazduzy = $row['filename'];
  23. ?>
  24. <div id="mejn"> <?
  25. $uss = $_SESSION['user_name'];
  26. $edytt = mysql_query("SELECT user_name FROM users WHERE ranga=1");
  27. while ($e = mysql_fetch_assoc($edytt)) {
  28. $tp = $e['user_name'];
  29. if ($tp == $uss) {
  30. if(isset($_GET['usun'])) {
  31. mysql_query("DELETE FROM `images` WHERE `idx` = '".$_GET['usun']."'");
  32. }
  33. $rezultat = mysql_query("SELECT * FROM `images` WHERE idx = ".$row['idx']." limit 1") or die("Błąd 2");
  34. while ($record = mysql_fetch_array($rezultat, MYSQL_ASSOC)) {
  35. ?> <center><font size="2">
  36. <?
  37. echo $record['idx']; //(wyświetla prawidłowo)
  38. echo "<a href=\"galeria.php?usun=".$record['idx']."\"> - Usuń - </a>"; ?> </font></center> <?
  39. }
  40. }
  41. }
  42. echo "<a href='galleria/images/".$obrazduzy."'><img src='galleria/images/".$obraz."' border='0' />";
  43. ?> </div>
  44. <?
  45. }
  46. ?>
  47. </div>
  48. <br class="clearfloat" />
  49. <div id="footer">
  50. <p><center><font size="-2">? Copyright 2010 by Johny</p></center></font>
  51. </div>
  52. </div>
  53. </body>
  54. </html>
Fifi209
A coś się tak uparł, że to usuwanie etc. musi być w jednym pliku? O wiele prościej jest to rozbić na kilka plików - łatwiej edytować i kod nie jest tak zagmatwany.
szamburdsz
Wystarczy, ze zrobisz tak:
  1. mysql_query("DELETE FROM images WHERE idx = '$record[idx]'");
renault12
Zmieniłem i też zdjecie sie nie usuwa.
Co do rozbicia to nie wiem zabardzo jak to zrobic, poniewaz nie chce mi przypisywac zmiennej do usuwania przy odpowiednim obrazku po kolei.
Prosze o pomoc

Zauważyłem takze gdy usuwam warunek if i w ogole pozostawiam ta czesc kodu w takim stanie:
  1. mysql_query("DELETE FROM `images` WHERE `idx` = '".$_GET['usun']."'");

Obrazek usuwa się po wejściu, lecz teraz co jest źle w tym ifie?
  1. if(isset($_GET['usun'])) {
  2. mysql_query("DELETE FROM `images` WHERE `idx` = '".$_GET['usun']."'");
  3. }
Fifi209
Zamiast sprawdzać isset czy zmienna istnieje, sprawdź czy nie jest pusta empty
renault12
Yhm, też nie działa ani !empty ani empty.
szamburdsz
Sprawdź na początku wartość $_GET['usun']
  1. echo $_GET['usun'];

warunek masz prawidłowy
  1. if(isset($_GET['usun']))
  2. {
  3.  
  4. }
renault12
Gdziekolwiek wstawie to nie wyswietla sie wartosc usun.
szamburdsz
A czy wartość $_GET['usun'] pojawia się w adresie przeglądarki internetowej?

http://galeria.php?usun=wartosc

po kliknięciu w link Usuń
renault12
tak, zgodnie z id obrazka
szamburdsz
a masz register_globals na off w konfiguracji serwera?
renault12
Używam cba.pl jako hosting a oni chyba mają to właczone.
szamburdsz
Dla sprawdzenia czy dziala ci $_GET wrzuc taki pliczek test.php
  1. <?php
  2. if(isset($_GET['test']))
  3. {
  4. echo 'OK';
  5. }
  6. ?>
  7. <a href"test.php?test">TEST</a>

Ale nie wierzę, że nie działa bo na cba działa php bez problemów.
renault12
O dziwo nic sie nie dzieje, sprawdz sam http://szybkiezaproszenialockerz.cba.pl/test/test.php
szamburdsz
Masz jakies krzaki na poczatku pliku. Usun spacje i entery na samym poczatku
renault12
usunięte
szamburdsz
Mój bład. Popraw:

<a href="test.php?test">TEST</a>
renault12
tez nie zauwazylem. Teraz dziala.
szamburdsz
Czyli działa.
Daj teraz listing twojego pliku, zobacze co jest nie tak.
renault12
Jako listing chodzi ci o zawartosc pliku czy adres strony ?

Oto ta zawartosc:
  1. <?
  2. $start = $_GET['start'];
  3. $na_stronie = 8;
  4. $wykonaj=mysql_query("SELECT * FROM images");
  5. $znaleziono=mysql_num_rows($wykonaj);
  6. if($znaleziono>$na_stronie) {
  7. print '<center>Strona ';
  8. for($i=0; $i<ceil($znaleziono/$na_stronie); $i++)
  9. print '<a href="galeria.php?start='.($i*$na_stronie).'">'.($i+1).'</a> | ';
  10. }
  11. print '</center>';
  12.  
  13. $query = "SELECT * FROM images LIMIT ".($start).",".$na_stronie."";
  14. $result = mysql_query ($query);
  15. while ($row = mysql_fetch_assoc($result))
  16. {
  17. $obraz = $row['tn_filename'];
  18. $obrazduzy = $row['filename'];
  19. ?>
  20. <div id="mejn"> <?
  21. $uss = $_SESSION['user_name'];
  22. $edytt = mysql_query("SELECT user_name FROM users WHERE ranga=1");
  23. while ($e = mysql_fetch_assoc($edytt)) {
  24. $tp = $e['user_name'];
  25. if ($tp == $uss) {
  26. if(isset($_GET['usun'])) {
  27. mysql_query("DELETE FROM `images` WHERE `idx` = '".$_GET['usun']."'");
  28. }
  29. $rezultat = mysql_query("SELECT * FROM `images` WHERE idx = ".$row['idx']." limit 1") or die("Błąd 2");
  30. while ($record = mysql_fetch_array($rezultat, MYSQL_ASSOC)) {
  31. ?> <center><font size="2">
  32. <?
  33. echo $_GET['usun'];
  34. echo $record['idx']; //(wyświetla prawidłowo)
  35. echo "<a href=\"galeria.php?usun=".$record['idx']."\"> - Usuń - </a>"; ?> </font></center> <?
  36. }
  37. }
  38. }
  39. echo "<a href='galleria/images/".$obrazduzy."'><img src='galleria/images/".$obraz."' border='0' />";
  40. ?>
szamburdsz
popraw
  1. echo "<a href=\"galeria.php?usun=".$record['idx']."\"> - Usuń - </a>"; ?> </font></center> <?
  2. na
  3. echo '<a href="galeria.php?usun='.$record['idx'].'"> - Usuń - </a>'; ?> </font></center> <?


I dobrze jakbys dal linka jakiegos do strony abym mogl zobaczyc

I daj na sam poczatek
  1. <?php
  2. if(isset($_GET['usun']))
  3. {
  4. echo 'OK';
  5. }
  6. ?>
szamburdsz
Zobacz teraz

  1. <?php
  2. $start = $_GET['start'];
  3. $na_stronie = 8;
  4. $wykonaj = mysql_query("SELECT * FROM images");
  5. $znaleziono = mysql_num_rows($wykonaj);
  6. if($znaleziono>$na_stronie)
  7. {
  8. echo '<center>Strona ';
  9. for($i=0; $i<ceil($znaleziono/$na_stronie); $i++)
  10. echo '<a href="galeria.php?start='.($i*$na_stronie).'">'.($i+1).'</a> | ';
  11. }
  12. echo '</center>';
  13.  
  14. $query = "SELECT * FROM images LIMIT ".($start).",".$na_stronie."";
  15. $result = mysql_query ($query);
  16. while ($row = mysql_fetch_assoc($result))
  17. {
  18. $obraz = $row['tn_filename'];
  19. $obrazduzy = $row['filename'];
  20. ?> <div id="mejn"> <?php
  21. $uss = $_SESSION['user_name'];
  22. $edytt = mysql_query("SELECT user_name FROM users WHERE ranga=1");
  23. }
  24.  
  25. while ($e = mysql_fetch_assoc($edytt))
  26. {
  27. $tp = $e['user_name'];
  28. }
  29.  
  30. if($tp == $uss)
  31. {
  32. if(isset($_GET['usun']))
  33. {
  34. mysql_query("DELETE FROM `images` WHERE `idx` = '".$_GET['usun']."'");
  35. }
  36. $rezultat = mysql_query("SELECT * FROM `images` WHERE idx = ".$row['idx']." limit 1") or die("Błąd 2");
  37. while ($record = mysql_fetch_array($rezultat, MYSQL_ASSOC))
  38. {
  39. ?> <center><font size="2"> <?php
  40. echo $_GET['usun'];
  41. echo $record['idx']; //(wyświetla prawidłowo)
  42. echo '<a href="galeria.php?usun='.$record['idx'].'"> - Usuń - </a>'; ?> </font></center> <?
  43. }
  44. }
  45.  
  46. echo "<a href='galleria/images/".$obrazduzy."'><img src='galleria/images/".$obraz."' border='0' />";
  47. ?>
  48.  


A bład masz w tej lini
  1. echo '<a href="galeria.php?usun='.$record['idx'].'"> - Usuń - </a>'; ?> </font></center> <?

Musisz jeszcze dododac start

  1. echo '<a href="galeria.php?start='.$start.'&usun='.$record['idx'].'"> - Usuń - </a>'; ?> </font></center> <?
renault12
Dzieki wielkie! Działa
piwo dla ciebie ;]

Mam jeszcze jeden problem dotyczacy usuwania pliku z serwera, kod opiera sie na zmiennej i unlinku wrzuconego w warunek ten sam gdzie jest usuwanie z bazy, lecz pliki sie nie usuwaja. Dzieki "echo" zwraca poprawna lokalizacje pliku ale ni usuwa sie, czemu? Oto kod
  1. if(isset($_GET['usun'])) {
  2. mysql_query("DELETE FROM `images` WHERE `idx` = '".$_GET['usun']."'");
  3. ?>
  4. <?
  5. $obraz2 = 'gallery/images/'.$obraz.'';
  6. echo $obraz2;
  7. unlink($obraz2);
  8. }
szamburdsz
Jeżeli zmienna $obraz przechowuje wyłącznie nazwę pliku bez rozszerzenia to rozwiązanie wygląda następująco:
  1. $obraz2 = 'gallery/images/'.$obraz.'.jpg';

No i musisz mieć prawa modyfikacji CHMOD do katalogu image na serwerze. A jeżeli jest inaczej to muszę znać więcej szczegółów.
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.