Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Nie wyswietla zmiennej ID z bazy danych
Forum PHP.pl > Forum > Przedszkole
Outside
Mam pewien problem, zrobiłem księgę gości i bedac zalogowanym administratorem chcę, aby obok kazdego wpisu bylo pokazywane id, lecz tego id nie pokazuje niewiadomo czemu. Co jest zle? Wszystko inne jest wyswietlane prócz id.
  1. $zapytanie = "SELECT * FROM `ksiega` ORDER BY `id` DESC;";
  2. $wynik = $db->query($zapytanie);
  3.  
  4. $ile_znalezionych = $wynik->num_rows;
  5. echo "<p>Ilość znalezionych pozycji: ".$ile_znalezionych."</p>";
  6.  
  7. for ($i=0; $i <$ile_znalezionych; $i++) {
  8. $kolumna = $wynik->fetch_assoc();
  9. $nick = ($kolumna['nick']);
  10. $komentarz = ($kolumna['komentarz']);
  11. // $nowykomentarz = substr($komentarz, 0, 50); skrócenie
  12. $data = ($kolumna['data']);
  13. $id = ($kolumna['ID']);
  14. $ip = ($kolumna['ip']);
  15. echo "<table width=\"600px\" border=\"1\" cellpadding=\"5px\" cellspacing=\"0px\">
  16. <tr style=\"background-color: #CCCCFF;\" height=\"30px\">
  17. <td width=\"100px\">Nick: $nick </td>
  18. <td width=\"100px\">Data: $data</td>
  19. <td width=\"100px\">ID: $id</td></tr>
  20. <td width=\"100px\">IP: $ip</td></tr>
  21. <tr><td colspan=\"3\" style=\"text-align:left;\">$komentarz </td></tr>
  22. </table><br />";
  23.  
  24. }
ber32
Witam
zmień na
  1. $id = ($kolumna['id']);

może tak
Outside
Nic z tego sad.gif
valkirek
Cytat
$zapytanie = $zapytanie =
Outside
@up
Nie wiem jak to sie stalo, ze tutaj sie znalazło, ale w kodzie mam normalnie 1x $zapytanie.
ber32
Pokaż strukturę tabeli
valkirek
Wypatrzyłem:D Błąd tabeli, 2 razy zamknięte </tr>
Cytat
<td width=\"100px\">ID: $id</td></tr>
<td width=\"100px\">IP: $ip</td></tr>
Outside
Usunalem jedno tr, niestety nadal nie działa.


Jest ktos w stanie mi pomoc?sad.gif
Turson
  1. echo $id;

Sprawdź zawartość
Outside
Nie wyswietla nic.
echo $ip; wyswietla normalnie echo $id; nic
Turson
Problem leży gdzieś przy pobraniu danych, a nie ich wyświetleniu.
Może to dziwne, ale czy na pewno w bazie pole `id` nie jest puste?
Outside
No wlasnie jest wypelnione.


Przeczytalem gdzies, ze id jest przekazywane metodą GET, jest to mozliwe, ze dlatego nie pokazuje?

Albo moze cos z mysql_insert_id() ?
_Borys_
  1. for ($i=0; $i <$ile_znalezionych; $i++) {
  2. $kolumna = $wynik->fetch_assoc();
  3. echo '<pre>';
  4. print_r($kolumna);
  5. echo '</pre>';
  6. //...
  7. }

Zobacz czy tam masz id
Poza tym wpisz zapytanie w phpMyAdmin i zobacz co pokaże.
Outside
  1. SELECT id
  2. FROM ksiega
  3. LIMIT 0 , 30


id
32
33
34

w phpmyadmin dziala

Wkleilem rowiez kod, ktory mi podales i oto wynik

  1. Array
  2. (
  3. [ID] => 33
  4. [nick] => Patryk
  5. [komentarz] => Rajd Polski rozpocznie się w piątek, 13 września, odcinkiem testowym oraz kwalifikacyjnym, na którym kierowcy z list priorytetowych FIA i ERC będą walczyli o miejsca startowe. W sobotę, 14 września, odbędzie się siedem odcinków specjalnych, w tym próba sportowa na torze Mikołajki, a w niedzielę, 15 września zaplanowano kolejnych sześć OS-ów.
  6.  
  7. Rajd Polski rozgrywany od 1921 roku jest drugą pod względem starszeństwa imprezą motoryzacyjną w Europie. Pierwszą był Monte Carlo. Tegoroczna trasa ma w sumie ponad 650 km, w tym 230 km podzielonych na 13 odcinków specjalnych. Dwa z nich Mrągowo (25,1 km) i Biskupiec (15,5 km) to zupełnie nowe próby, które będą przejeżdżane po raz pierwszy w historii.
  8. [ip] => 127.0.0.1
  9. [data] => 2013-09-10 18:26:41
  10. )
  11. Array
  12. (
  13. [ID] => 32
  14. [nick] => Patryk
  15. [komentarz] => Rajd Polski rozpocznie się w piątek, 13 września, odcinkiem testowym oraz kwalifikacyjnym, na którym kierowcy z list priorytetowych FIA i ERC będą walczyli o miejsca startowe. W sobotę, 14 września, odbędzie się siedem odcinków specjalnych, w tym próba sportowa na torze Mikołajki, a w niedzielę, 15 września zaplanowano kolejnych sześć OS-ów.
  16.  
  17. Rajd Polski rozgrywany od 1921 roku jest drugą pod względem starszeństwa imprezą motoryzacyjną w Europie. Pierwszą był Monte Carlo. Tegoroczna trasa ma w sumie ponad 650 km, w tym 230 km podzielonych na 13 odcinków specjalnych. Dwa z nich Mrągowo (25,1 km) i Biskupiec (15,5 km) to zupełnie nowe próby, które będą przejeżdżane po raz pierwszy w historii.
  18. [ip] => 127.0.0.1
  19. [data] => 2013-09-10 18:26:35
  20. )
  21. Array
  22. (
  23. [ID] => 34
  24. [nick] => Patryk
  25. [komentarz] => Rajd Polski rozpocznie się w piątek, 13 września, odcinkiem testowym oraz kwalifikacyjnym, na którym kierowcy z list priorytetowych FIA i ERC będą walczyli o miejsca startowe. W sobotę, 14 września, odbędzie się siedem odcinków specjalnych, w tym próba sportowa na torze Mikołajki, a w niedzielę, 15 września zaplanowano kolejnych sześć OS-ów.
  26.  
  27. Rajd Polski rozgrywany od 1921 roku jest drugą pod względem starszeństwa imprezą motoryzacyjną w Europie. Pierwszą był Monte Carlo. Tegoroczna trasa ma w sumie ponad 650 km, w tym 230 km podzielonych na 13 odcinków specjalnych. Dwa z nich Mrągowo (25,1 km) i Biskupiec (15,5 km) to zupełnie nowe próby, które będą przejeżdżane po raz pierwszy w historii.
  28. [ip] => 127.0.0.1
  29. [data] => 2013-09-10 18:26:43
  30. )


Cholera jasna, nie mam pojęcia co jest..
Turson
Może zapytanie tak
  1. $zapytanie = "SELECT * FROM ksiega ORDER BY ID DESC";
Outside
Panowie, nie wiem co się stało, ale tak po prostu zaczęło działać. Wprowadziłem Twój kod Turson, przywróciłem znów na order by nick i znowu pokazywało id. Nie mam pojecia jak, ale dziękuję za pomoc! smile.gif
Teraz jak mozecie napiszcie mi tylko, czy moj plan jest dobry. Mam zamiar obok kazdego wpisu umiesczac button "usun" i zeby wywolywal
  1. DELETE '$id' FROM ksiega
w Php, co o tym myslicie?
Turson
Pomysł dobry, ale wykonanie złe. Jak usuwasz cały wpis z księgi (tak mniemam po temacie), to usuwasz wszystko.

Tworzysz formularz, w ukrytym inpucie przekazujesz id wpisu i potem
  1. DELETE FROM ksiega WHERE id=$_POST["id"]
com
jeszcze to przefiltrować i wtedy możesz tak to zrobić jak napisał Turson... wink.gif
Outside
Co do usuwania to jest problem, gdy ustawię w usun.php
  1. $zapytanie = "DELETE FROM ksiega WHERE id='34'";
  2. $wynik = $db->query($zapytanie);
  3.  
  4. if($wynik) {
  5. echo "Wpis usunięty pomyślnie";
  6. } else {
  7. echo "Wystąpił błąd podczas usuwania wpisu";
  8. }

i wejdę w localhost/ksiega/usun.php wpis usuwa się bez problemu i jest napis wpis usunięty pomyslnie.
Gdy zrobię tak:
W pliku wpisy.php
  1. echo "<form action=\"usun.php\">
  2. <input type=\"hidden\" name=\"id\" value=\"$id\" />
  3. <input type=\"submit\" value=\"Usuń\">
  4. </form>";

W pliku usun.php
  1. $zapytanie = "DELETE FROM ksiega WHERE id='34'";
  2. $wynik = $db->query($zapytanie);
  3.  
  4. if($wynik) {
  5. echo "Wpis usunięty pomyślnie";
  6. } else {
  7. echo "Wystąpił błąd podczas usuwania wpisu";
  8. }

Po wcisnieciu usun przechodzi na stronę usun.php?id=33 i pisze, ze wpis usuniety pomyslnie, ale pomimo to nie usuwa się, co jest nie tak?

Problem rozwiązany, nie ustawiłem na początku $id=$_GET[id];
com
mówiłem, żebyś przefiltrował to co podajesz bo tak to zaraz Ci cała bazę wysypią
Kod
$id=$_GET[id];
w 2k13 roku no chyba żartujesz ...
Outside
Przefiltrować dane za pomocą
  1. mysql_real_escape_string

A co do tego:
$id=$_GET[id];

to dlaczego to jest niepoprawne? Lepiej jest ciagle uzywac $_GET[id]; czy jak?
fiszol
Jest podatne na wstrzyknięcie czegoś ekstra do zapytania. Jesli id zawsze jest liczbą to możesz zabezpieczyć się np tak:
  1. <?php
  2. $id = floor($_GET['id']); # urżnie wszystko, co nie jest liczbą
  3. ?>
Turson
Ewentualnie is_numeric()
com
lub rzutować na inta wink.gif
  1. $id = (int)$_GET['id'];


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.