Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]wyszukiwanie z bazy mysql
Forum PHP.pl > Forum > Przedszkole
Kamil90
mam taki kod który wyszukuje mi kategorie z pliku tele.php:
  1. <?php
  2. foreach ($tele as $k => $w)
  3. {
  4.  echo '<div>' . str_replace('<', '&lt;', str_replace('>', '&gt;', $w)) . ' <a href="index.php?page=teledyski&amp;x=delete&amp;id=' . $k . '" title="Kasuj kategorię tyledysków" onclick="return confirm('Czy na pewno chcesz usunąć kategorię ' . str_replace('<', '&lt;', str_replace('>', '&gt;', str_replace('"', '&quot;', $w))) . '?');">[Kasuj kategorię]</a></div>';
  5. }
  6. ?>


Chciałbym go zmienić tak żeby wyszukiwał i wypisał mi kategorie z bazy mysql z tabeli "tele" ale tylko tam gdzie jest w polu segment nazwa "teledyski".
oto zrzut mojej tabeli:



Jak będzie wygłądał kod php? sad.gif
EarthCitizen
  1. <?php
  2. $sql = 'SELECT * FROM tele WHERE segment = "teledyski"';
  3. $wynik = mysql_query($sql);
  4.  
  5. if (mysql_num_rows($wynik)) {
  6.    while ($row = mysql_fetch_array($wynik)) {
  7.        echo $row['nazwa'] . '<br />';
  8.    }
  9. } else {
  10.    echo 'Brak danych';
  11. }
  12. ?>
Kamil90
dzięki EarthCitizen smile.gif kod działa ale wyświetla mi tylko to co znajduje się w dziale "nazwa" anie ma obok opcji "[Kasuj kategorię]", tak jak to się działo w tym fragmencie pętli foreach:
  1. <?php
  2. echo '<div>' . str_replace('<', '&lt;', str_replace('>', '&gt;', $w)) . ' <a href="index.php?page=teledyski&amp;x=delete&amp;id=' . $k . '" title="Kasuj kategorię tyledysków" onclick="return confirm('Czy na pewno chcesz usunąć kategorię ' . str_replace('<', '&lt;', str_replace('>', '&gt;', str_replace('"', '&quot;', $w))) . '?');">[Kasuj kategorię]</a></div>';
  3. ?>


ps. a tak apropo... Zna ktoś może dobrą książkę która opisuje wszystkie funkcje powiązane PHP z MySql?
EarthCitizen
No wysil się trochę smile.gif Naprawdę nie widzisz jak połączyć Twój skrypt z moim? Spróbuj przynajmniej smile.gif
Kamil90
połączyłem to w taki sposób:
  1. <?php
  2. $sql = 'SELECT * FROM tele WHERE segment = "teledyski"';
  3. $wynik = mysql_query($sql);
  4. $idwynik = mysql_query($sql);
  5. $id = mysql_fetch_array($idwynik);
  6.  
  7. if (mysql_num_rows($wynik))
  8. {
  9.   while ($row = mysql_fetch_array($wynik))
  10. {      
  11. echo '<div>' . $row['nazwa'] . ' <a href="index.php?page=filmiki&amp;x=delete&amp;id=' . $id['id'] . '" title="Kasuj kategorię tyledysków" onclick="return confirm('Czy na pewno chcesz usunąć kategorię ' . str_replace('<', '&lt;', str_replace('>', '&gt;', str_replace('"', '&quot;', $w))) . '?');">[Kasuj kategorię]</a></div>';
  12. '<br>';
  13. }
  14. }
  15. else
  16. {
  17.   echo 'Brak danych';
  18. }
  19. ?>

mam nadzieje że dobrze smile.gif
dołożyłem $idwynik i $id bo będę usuwał po id


nie rozumiem tego kodu który ma $w:
  1. <?php
  2. str_replace('<', '&lt;', str_replace('>', '&gt;', str_replace('"', '&quot;', $w)))
  3. ?>
EarthCitizen
No i dobrze, że nie rozumiesz, bo teraz już nie masz zmiennej $w i ten kod nie jest Ci prawdopodobnie potrzebny...

więc zamień
  1. <?php
  2. str_replace('<', '&lt;', str_replace('>', '&gt;', str_replace('"', '&quot;', $w)))
  3. ?>

na
  1. <?php
  2. $row['nazwa']
  3. ?>
Kamil90
ok, dokonam zmiany smile.gif
teraz się kłania zmiana "delete" z wyboru 'switch':
  1. case 'delete':
  2.  $h = fopen('../tele.php', 'wb');
  3.  unset($filmiki[$_GET['id']]);
  4.  fwrite($h, "<?phpr&#092;n$filmiki = " . parse_array($filmiki) . ";r\n?>");
  5.  fclose($h);
  6.  
  7.  mysql_query('delete from `stuff` where `category`='' . $_GET['id'] . ''');
  8.  
  9.  echo '<div style="margin-bottom: 20px;">Kategoria usunięta.</div>';
  10.  break;


ta linijka usuwa filmiki z tej kategorii która została usunieta więc myśle ze powinna zostać:
  1. <?php
  2. mysql_query('delete from `stuff` where `category`='' . $_GET['id'] . ''');
  3. ?>


i teraz za co się zabrać? hmmm...
EarthCitizen
Skoro operujesz teraz na bazie, a nie na pliku to chyba już widzisz 4 linijki, które tam nie pasują? Zapytanie zostaje...
Kamil90
zaraz coś zdziałam, a zapytanie sobie wezme z phpmyadmin smile.gif ciekawe czy mi się uda... Uczę się w Technikum Informatycznym i działamy na Pascalu i c++. Tutaj pojęcia są zupełnie inne, zdarza sie jednak że niektóre sa podobne np. petla while, warunek if... else.. itp
EarthCitizen
Hehe, tylko nie wyskocz tu z jakąś procedurą w PHP winksmiley.jpg
Kamil90
ułożyłem więc taki kod i w sumie to wszystko wygląda tak:
  1. <?php
  2. ..........
  3. case 'delete':
  4.  
  5.  
  6.  unset([$id['id']]);
  7.  mysql_query(DELETE FROM `tele` WHERE `id` = &#092;'' . $id['id'] . ''');
  8.  mysql_query('delete from `stuff` where `category`='' . $_GET['id'] . ''');
  9.  
  10.  echo '<div style="margin-bottom: 20px;">Kategoria usunięta.</div>';
  11.  break;
  12. }
  13.  
  14.  
  15. $sql = 'SELECT * FROM tele WHERE segment = "teledyski"';
  16. $wynik = mysql_query($sql);
  17. $idwynik = mysql_query($sql);
  18. $id = mysql_fetch_array($idwynik);
  19.  
  20. if (mysql_num_rows($wynik))
  21. {
  22.   while ($row = mysql_fetch_array($wynik))
  23. {      
  24. echo '<div>' . $row['nazwa'] . ' <a href="index.php?page=teledyski&amp;x=delete&amp;id=' . $id['id'] . '" title="Kasuj kategorię tyledysków" onclick="return confirm('Czy na pewno chcesz usunąć kategorię ' . $row['nazwa'] . '?');">[Kasuj kategorię]</a></div>';
  25. '<br>';
  26. }
  27. }
  28. else
  29. {
  30.   echo 'Brak danych';
  31. }
  32. ?>


i w sumie teraz wogole nie działa... sad.gif gdzieś zrobiłem błąd tutaj:
  1. <?php
  2. unset([$id['id']]);
  3.   mysql_query(DELETE FROM `tele` WHERE `id` = &#092;'' . $id['id'] . ''');
  4.   mysql_query('delete from `stuff` where `category`='' . $_GET['id'] . ''');
  5. ?>
EarthCitizen
usuń linijkę z unset... usuwasz zmienną, której później chcesz użyć a już jej nie ma smile.gif

i jeszcze:

  1. <?php
  2. // tu brakuje ' przed DELETE
  3. mysql_query(DELETE FROM `tele` WHERE `id` = "' . $id['id'] . '");
  4. ?>
Kamil90
niestety nie działa:( ale juz sie wyświetla:), spróbowałem też tak:
  1. <?php
  2. case 'delete':
  3.  
  4.  
  5.  mysql_query('DELETE FROM `tele` WHERE `id` ='' . $id['id'] . ''');
  6.  mysql_query('delete from `stuff` where `category`='' . $id['id'] . ''');
  7.  
  8.  echo '<div style="margin-bottom: 20px;">Kategoria usunięta.</div>';
  9.  break;
  10. }
  11.  
  12.  
  13. $sql = 'SELECT * FROM tele WHERE segment = "teledyski"';
  14. $wynik = mysql_query($sql);
  15. $idwynik = mysql_query($sql);
  16. $id = mysql_fetch_array($idwynik);
  17.  
  18. if (mysql_num_rows($wynik))
  19. {
  20.   while ($row = mysql_fetch_array($wynik))
  21. {      
  22. echo '<div>' . $row['nazwa'] . ' <a href="index.php?page=teledyski&amp;x=delete&amp;id=' . $id['id'] . '" title="Kasuj kategorię tyledysków" onclick="return confirm('Czy na pewno chcesz usunąć kategorię ' . $row['nazwa'] . '?');">[Kasuj kategorię]</a></div>';
  23. '<br>';
  24. }
  25. }
  26. else
  27. {
  28.   echo 'Brak danych';
  29. }
  30. ?>

i efekt podobny... A może coś jest nie tak z "$id['id']" ?
EarthCitizen
Wklej cały kod do linii
  1. <?php
  2. $sql = 'SELECT * FROM tele WHERE segment = "teledyski"';
  3. ?>
Kamil90
wkleiłem w tym miejscu i dalej to samo sad.gif , Klikam "Kasuj Kategorię" i nie usuwa:
  1. <?php
  2. case 'delete':
  3.  
  4. $sql = 'SELECT * FROM tele WHERE segment = "teledyski"';
  5.  mysql_query('DELETE FROM `tele` WHERE `id` ='' . $id['id'] . ''');
  6.  mysql_query('delete from `stuff` where `category`='' . $id['id'] . ''');
  7.  
  8.  echo '<div style="margin-bottom: 20px;">Kategoria usunięta.</div>';
  9.  break;
  10. }
  11.  
  12.  
  13. $sql = 'SELECT * FROM tele WHERE segment = "teledyski"';
  14. $wynik = mysql_query($sql);
  15. $idwynik = mysql_query($sql);
  16. $id = mysql_fetch_array($idwynik);
  17.  
  18. if (mysql_num_rows($wynik))
  19. {
  20.   while ($row = mysql_fetch_array($wynik))
  21. {      
  22. echo '<div>' . $row['nazwa'] . ' <a href="index.php?page=teledyski&amp;x=delete&amp;id=' . $id['id'] . '" title="Kasuj kategorię tyledysków" onclick="return confirm('Czy na pewno chcesz usunąć kategorię ' . $row['nazwa'] . '?');">[Kasuj kategorię]</a></div>';
  23. '<br>';
  24. }
  25. }
  26. else
  27. {
  28.   echo 'Brak danych';
  29. }
  30. ?>



edit: ale $id['id'] musi być akurat tej kategorii którą wybierze się do usunięcia więc może lepiej by było wybrać $row['id']? Chociaż nie wiem czy to ma sens...
EarthCitizen
Z tym kodem to chciałem abyś na forum to dałwinksmiley.jpg ale spoks, mi ta pora już też nie służy smile.gif

Co do skryptu, to myślałem, że nad tym case masz coś jeszcze ale chyba nie, więc:

  1. <?php
  2. // poniżej dopisz
  3. if (isset($_GET['x']) {
  4.    switch ($_GET['x']) {
  5.        case 'delete':
  6.            // poniższe zapytanie do wywalenia
  7.            // $sql = 'SELECT * FROM tele WHERE segment = "teledyski"';
  8.            // i zostaje Ci to co niżej
  9.            // id rekordu do usunięcia musisz odczytać z tablicy $_GET + rzutowanie na inta tak dla bezpieczeństwa ;)
  10.            mysql_query('DELETE FROM `tele` WHERE `id` ='' . (int)$_GET['id'] . ''');
  11.            mysql_query('DELETE FROM `stuff` WHERE `category`='' . (int)$_GET['id'] . ''');
  12.  
  13.            echo '<div style="margin-bottom: 20px;">Kategoria usunięta.</div>';
  14.        break;
  15.    }
  16. }
  17. ?>
Kamil90
aha smile.gif , ogólnie cały skrypt wygląda następująco:
  1. <?php
  2. $segment = "teledyski";
  3. switch ($_GET['x'])
  4. {
  5. case 'new':
  6. if ($_POST['category'])
  7. {
  8. mysql_query('insert into `tele` (`nazwa`, `segment`) values ("' . mysql_value($_POST['category']) . '", "' . $segment . '")');
  9. echo '<div style="margin-bottom: 20px;">Kategoria dodana.</div>';
  10. }
  11. else
  12. {
  13. ?>
  14.  
  15.  
  16.  
  17. <form action="index.php?page=teledyski&amp;x=new" method="post">
  18. <div style="margin-bottom: 20px;">Nazwa kategorii: <input type="text" name="category" size="30" /> <br>
  19. <input type="submit" value="Dodaj"></div>
  20. </form>
  21.  
  22. <?php
  23.  }
  24.  break;
  25.  
  26. case 'delete':
  27.  
  28. mysql_query('DELETE FROM `tele` WHERE `id` ='' . (int)$_GET['id'] . ''');
  29. mysql_query('DELETE FROM `stuff` WHERE `category`='' . (int)$_GET['id'] . ''');
  30.  
  31.  echo '<div style="margin-bottom: 20px;">Kategoria usunięta.</div>';
  32.  break;
  33. }
  34.  
  35.  
  36. $sql = 'SELECT * FROM tele WHERE segment = "teledyski"';
  37. $wynik = mysql_query($sql);
  38. $idwynik = mysql_query($sql);
  39. $id = mysql_fetch_array($idwynik);
  40.  
  41. if (mysql_num_rows($wynik))
  42. {
  43.   while ($row = mysql_fetch_array($wynik))
  44. {      
  45. echo '<div>' . $row['nazwa'] . ' <a href="index.php?page=teledyski&amp;x=delete&amp;id=' . $id['id'] . '" title="Kasuj kategorię tyledysków" onclick="return confirm('Czy na pewno chcesz usunąć kategorię ' . $row['nazwa'] . '?');">[Kasuj kategorię]</a></div>';
  46. '<br>';
  47. }
  48. }
  49. else
  50. {
  51.   echo 'Brak danych';
  52. }
  53. ?>


i działa!! smile.gif jesteś wielki EarthCitizen!!
zastanawia mnie jeszcze fakt czy w tej linicje musi być $id['id']?:
  1. <?php
  2. echo '<div>' . $row['nazwa'] . ' <a href="index.php?page=teledyski&amp;x=delete&amp;id=' . $id['id'] . '" title="Kasuj kategorię tyledysków" onclick="return confirm('Czy na pewno chcesz usunąć kategorię ' . $row['nazwa'] . '?');">[Kasuj kategorię]</a></div>';
  3. ?>


heh... dla mnie napisanie takie kodu to pół dnia roboty i jeszcze na koniec nie działa.... będzie trzeba zainwestować w jakąś książkę smile.gif

edit: oczywiscie WIELKIE podziekowanie dla EarthCitizen, a ja pewnie jeszcze nie raz będę potrzebował pomocy...
EarthCitizen
Jak tam masz $id['id'] zamiast $row['id'] i Ci działa, to Ty jesteś wielki biggrin.gif
nospor
Cytat
Jak tam masz $id['id'] zamiast $row['id'] i Ci działa, to Ty jesteś wielki

to spojrz na jego kod wczesniej:
  1. <?php
  2. $sql = 'SELECT * FROM tele WHERE segment = "teledyski"';
  3. $wynik = mysql_query($sql);
  4. $idwynik = mysql_query($sql);
  5. $id = mysql_fetch_array($idwynik);
  6.  
  7. if (mysql_num_rows($wynik))
  8. {
  9.  while ($row = mysql_fetch_array($wynik))
  10. ?>

Dzialac to to dziala, ale w petli kasuje zawsze pierwszy rekord winksmiley.jpg
Kamil90
Cytat(EarthCitizen @ 23.01.2009, 00:02:32 ) *
Jak tam masz $id['id'] zamiast $row['id'] i Ci działa, to Ty jesteś wielki biggrin.gif

nie... nie... to nieprawda smile.gif zmieniłem to na $row['id'] ale nie widze żeby robiło to jakąś różnice...

nospor zaraz to sprawdze bo mnie ciekawi smile.gif

edit:
nospor zgadza się smile.gif jak miałem $id['id'] to mi usuwało pierwszy rekord(nawet tego nie zauważyłem...) a jak mam $row['id'] to mi usuwa zawsze to co chcę smile.gif, także dla Ciebie także należy się nagroda smile.gif wczoeśniej właśnie nie mogłem dostrzec różnicy pomiędzy $id['id'] a $row['id'] smile.gif

TERAZ JEST GITARA i za to lubie to forum thumbsupsmileyanim.gif
nospor
Cytat
zmieniłem to na $row['id'] ale nie widze żeby robiło to jakąś różnice...
no robi i to duża. pod $id['id'] masz zawsze id pierwszego rekordu, a pod $row['id'] masz id rekordu aktualnie przetwarzanego w petli.

pozatym przed petla pobierasz juz jeden rekord i on w petli zostaje gubiony
EarthCitizen
Hehe ... no nie zauważyłem tego wcześniej smile.gif Takie błędy kosztowały mnie kiedyś wyczyszczenie całej tabeli tongue.gif
Kamil90
ja się niczego nie czepiam... smile.gif dużo mi pomogłeś EarthCitzen, chciałbym być już na takim poziomie jak Ty smile.gif a jak już się do niego doucze to też będę pomagał innym smile.gif
EarthCitizen
Kolego za kogo Ty mnie masz? nie jestem PHP guru smile.gif ja jestem na tym forum aby się też czegoś nauczyć smile.gif mogłem Ci pomóc, fajnie... ucz się, rośnij w siłę a kiedyś Ty mi będziesz pisał odpowiedzi winksmiley.jpg
nospor
to skoro juz jestesmy przy kwiatkach to jeszcze to:
  1. <?php
  2. $wynik = mysql_query($sql);
  3. $idwynik = mysql_query($sql);
  4. ?>

Ja rozumiem ze jestes poczatkujacy, ale staraj sie patrzec na to co piszesz. Czemu mają sluzyc te dwa podrząd te same mysql_query()?
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.