Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie do mysql
Forum PHP.pl > Forum > PHP
robciu123
Witam! Mam 2 tabele. 1. id numer_uzytkownika imie nazwisko i numer_telefonu. 2. id tytul komentarz
Jak mam wyswietlic od razu wszystkie dane z 1 i 2 tabeli, jesli numer_uzytkownika = id z 2 tabeli?Proszę o pomoc!
uirapuru
zapytanie do sql musi mieć inner join, np.

Kod
Select * from pierwsza_tabela as a
inner join druga_tabela as b
on a.numer_uzytkownika = b.id


nawiązujesz połączenie, wysyłasz zapytanie, odczytujesz wyniki do tablicy np. $array, a następnie wyświetlasz:

Kod
foreach($array as $wpis)
{
   echo $wpis["imie"] . " " . $wpis["nazwisko"] . " " . $wpis["komentarz"] . "<br />";
}


czy jak tam chcesz.
robciu123
Niestety nie działa. Może dokładniej opiszę.
1 tabela imie nazwisko osobisty_numer
2 id komentarz i tytul.
Ma wyświetlić wszystkie rekordy z jednej i drugiej tabeli, z tym że z 1 kiedy id=zmiennej która jest juz w skrypcie wiec tylko muszę ją wstawić i wszystkie rekordy z 2 tabeli ale tylko kiedy osobisty_numer będzie taki sam jak id w 2 tabeli.
uirapuru
Podaj kod jaki napisałeś oraz skrypty sql, ktorymi tworzysz tabele
robciu123
Ok mam teraz inny kod ale ten sam problem.
SQL
tabela uzytkownicy:
user_id
imie
nazwisko

tabela komentarze
id
user_id
tytul
komentarz

a kod to:
  1. <?php
  2. $numer=$_GET['nu'];
  3.  
  4.  
  5.  
  6. function lacz_bd()
  7. {
  8. $db = new mysqli('localhost', 'root', '');
  9. if (! $db)
  10. return false;
  11. $db->autocommit(TRUE);
  12. return $db;
  13. }
  14. //połaczenie z bazą
  15. $db = lacz_bd();
  16. //zapytanie sql do bazy określające jakie dane mają zostać pobrane
  17.  
  18.  
  19.  
  20.  
  21. $zapytanie = "select id,
  22. tytul,
  23. komentarz
  24. from komentarze WHERE id=$numer";
  25.  
  26.  
  27. //pobranie wyniku zapytania
  28. $wynik = $db->query($zapytanie);
  29. //obliczanie ilości rekordów
  30. $ile_znalezionych = $wynik->num_rows;
  31. //pętla po rekordach z bazy
  32. for ($i=0; $i <$ile_znalezionych; $i++)
  33. {
  34. $wiersz = $wynik->fetch_assoc();
  35.  
  36.  
  37. }
  38.  
  39. ?>
uirapuru
Nie sprawdzam reszty, moim zdaniem błąd tkwi w zapytaniu:

Kod
$zapytanie = "select *
from komentarze
inner join uzytkownicy
on uzytkownicy.user_id = komentarze.user_id
WHERE id=$numer";


Mniej więcej tak powinno być.

Rozważ tylko proszę zagadkę ode mnie - co będzie jeśli ktoś w $_GET['nu'] nie poda liczby, a taki fragment SQL:
Cytat
0 OR 1=1;


albo co gorsza coś w stylu

Cytat
0; DROP TABLE uzytkownicy, komentarze;


Nie jestem dobry w sqlkach, ale chciałem zwrocic uwagę na sql injection smile.gif
robciu123
hehe nic się nie stanie tongue.gif Ale to słodka tajemnica haha.gif Zaraz zobaczę czy działa

Ciągle pełno błędów może źle wywołuję ale później wstawiam takie coś np.

<?php echo '<td width="100px"><center>'.$wiersz['tytul'].'</center></td>'; ?>
I tak ze wszystkimi rekordami. I w ich miejsca same komunikaty błędów ...
uirapuru
Upewnić się chcę tylko co do jednego: testowałeś samo zapytanie np. w MySql Workbench i działa, tak?

var_dump() na wyniku robiłeś? co zwraca? No i mówisz, ze komunikaty błędów - jakie?questionmark.gif?
robciu123
Więc pierwotna forma to było to:
  1. <?php
  2. $numer=$_GET['nu'];
  3.  
  4.  
  5.  
  6. function lacz_bd()
  7. {
  8. $db = new mysqli('localhost', 'root', '');
  9. if (! $db)
  10. return false;
  11. $db->autocommit(TRUE);
  12. return $db;
  13. }
  14. //połaczenie z bazą
  15. $db = lacz_bd();
  16. //zapytanie sql do bazy określające jakie dane mają zostać pobrane
  17.  
  18.  
  19. $zapytanie = "select
  20. tytul,
  21. komentarz
  22. from komentarze WHERE id=$numer";
  23.  
  24.  
  25.  
  26. //pobranie wyniku zapytania
  27. $wynik = $db->query($zapytanie);
  28. //obliczanie ilości rekordów
  29. $ile_znalezionych = $wynik->num_rows;
  30. //rozpoczynamy budowanie tabeli dla naszych danych
  31. echo '<table>';
  32.  
  33. //pętla po rekordach z bazy
  34. for ($i=0; $i <$ile_znalezionych; $i++)
  35. {
  36. $wiersz = $wynik->fetch_assoc();
  37. '<tr>';
  38. '<td>'.$wiersz['tytul'].'</td>';
  39. '</tr>';
  40. }
  41. echo '</table>';
  42.  
  43.  
  44.  
  45. ?>

Następnie dodawałem sobie poprostu w wybranym miejscu

<?php echo '<td width="100px"><center>'.$wiersz['przesylka_pobraniowa'].'</center></td>'; ?>
I to działało.
Teraz chciałem dodać tą drugą tabelę.
I wyskakuje to
Trying to get property of non-object w 1
i reszta to to:
Undefined variable: wiersz in...
uirapuru
Błąd Cię informuje, że próbujesz odczytać kolumnę z obiektu, który jej nie ma. Może sql nic nie zwrócił i masz pusty wynik? Albo zapytanie nie zwraca tej kolumny.
robciu123
Problem rozwiązany dzięki!
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.