Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zapytanie do mysql
robciu123
post 21.08.2011, 18:43:36
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.08.2011

Ostrzeżenie: (0%)
-----


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!
Go to the top of the page
+Quote Post
uirapuru
post 21.08.2011, 18:59:28
Post #2





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
robciu123
post 21.08.2011, 19:11:08
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.08.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
uirapuru
post 21.08.2011, 19:41:28
Post #4





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

Ostrzeżenie: (0%)
-----


Podaj kod jaki napisałeś oraz skrypty sql, ktorymi tworzysz tabele
Go to the top of the page
+Quote Post
robciu123
post 21.08.2011, 19:46:34
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.08.2011

Ostrzeżenie: (0%)
-----


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. ?>


Ten post edytował robciu123 21.08.2011, 19:52:15
Go to the top of the page
+Quote Post
uirapuru
post 21.08.2011, 19:55:36
Post #6





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
robciu123
post 21.08.2011, 20:05:00
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.08.2011

Ostrzeżenie: (0%)
-----


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 ...
Go to the top of the page
+Quote Post
uirapuru
post 21.08.2011, 20:07:54
Post #8





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
robciu123
post 21.08.2011, 20:18:18
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.08.2011

Ostrzeżenie: (0%)
-----


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...

Ten post edytował robciu123 21.08.2011, 20:21:33
Go to the top of the page
+Quote Post
uirapuru
post 21.08.2011, 20:24:43
Post #10





Grupa: Zarejestrowani
Postów: 182
Pomógł: 9
Dołączył: 30.04.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
robciu123
post 21.08.2011, 20:35:49
Post #11





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.08.2011

Ostrzeżenie: (0%)
-----


Problem rozwiązany dzięki!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:00