Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Jak połączyć zapytania
Forum PHP.pl > Forum > Przedszkole
jar
Witam
Na podstawie lektury forum zrobiłem prostą bazę z dwoma tabelami. Aby dodawać do tabeli nowe rekordy zrobiłem formularz o nazwie form_dodaj_miasto.php wykorzystujący
Kod
form action="dodaj_miasto.php" method="post"

a tu pliczek dodaj_miasto.php
  1. <?php
  2. $polacz = mysql_connect('localhost', 'root', 'krasnal');
  3. $wybierz = mysql_select_db('hot');
  4.  
  5. $_POST['miasto_id'] = $miasto_id;
  6. $_POST['woj_id'] = $woj_id;
  7. $_POST['nazwa'] = $nazwa;
  8. $_POST['uwagi'] = $uwagi;
  9.  
  10. $zapytanie = "INSERT INTO miasta (miasto_id, woj_id, nazwa, uwagi)
  11. VALUES ('$miasto_id', '$woj_id', '$nazwa', '$uwagi')";
  12. $wynik=mysql_query($zapytanie);
  13. ?>

Dodawanie rokordów działa ale po dodaniu nowego rekordu poprzez submit wyświetlana jest w oknie przeglądarki "czysta strona", chciałbym aby po dodaniu rekordu wyświetliła się strona z zawartością ostatnich np. 20 rekordów. Zrobiłem więc pliczek view_miasta.php :
  1. include('inc_krasnal.php');
  2.  
  3. echo '<p><h2>Oto lista rekordów w tabeli:</h2></p>';
  4. ?>
  5. <table width="781" height="46" border="1" class"table_decoration">
  6. <tr>
  7. <td width="8"><div align="center">Id miasta</div></td>
  8. <td width="5"><div align="center">Id województwa</div></td>
  9. <td width="60"><div align="center">Miasto</div></td>
  10. <td width="92"><div align="center">Uwagi</div></td>
  11.  
  12. </tr>
  13. <tr>
  14.  
  15. <?php
  16.  
  17. if ( !$result ) echo 'Nie udało się wykonać zapytania';
  18. while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
  19.  
  20. {
  21. echo '<tr><td>' . $row['miasto_id'] . '</td>';
  22. echo '<td>' . $row['woj_id'] . '</td>';
  23. echo '<td>' . $row['nazwa'] . '</td>';
  24.  
  25. }

W "ncludowanym" pliku przy pomocy "LIMIT" ustawiam sobie ilość wyświetlanych rekordów. Jednak tu też mam problem bo chcąc wyświetlić np ostatnich 20 rekordów z tabeli zawierającej 50, wyświetla mi w tabelce tak:
50
49
48 itd. a chciałbym żebym miał wynik w postaci:
...
48
49
50
Nie wiem jak to zrobić.
Nie wiem też jak połączyć form_dodaj_miasto.php z view_miasta.php, abym po dodaniu submitem nowego rekordu otrzymywał nie czystą stronę a tę view_miasta.php.
Mam nadzieję że komuś z forumowiczów będzie się chciało dobrnąć do końca tego posta i udzielić odpowiedzi.
Pozdrawiam
Void
Cytat(jar @ 15.06.2007, 19:33:04 ) *
  1. <?php
  2. $_POST['miasto_id'] = $miasto_id;
  3. $_POST['woj_id'] = $woj_id;
  4. $_POST['nazwa'] = $nazwa;
  5. $_POST['uwagi'] = $uwagi;
  6. ?>

Powinno być chyba odwrotnie?
  1. <?php
  2. $miasto_id = $_POST['miasto_id'];
  3. $woj_id = $_POST['woj_id'];
  4. $nazwa = $_POST['nazwa'];
  5. $uwagi = $_POST['uwagi'];
  6. ?>

Cytat(jar @ 15.06.2007, 19:33:04 ) *
W "ncludowanym" pliku przy pomocy "LIMIT" ustawiam sobie ilość wyświetlanych rekordów. Jednak tu też mam problem bo chcąc wyświetlić np ostatnich 20 rekordów z tabeli zawierającej 50, wyświetla mi w tabelce tak:
50
49
48 itd. a chciałbym żebym miał wynik w postaci:
...
48
49
50

ORDER BY

Cytat(jar @ 15.06.2007, 19:33:04 ) *
Nie wiem też jak połączyć form_dodaj_miasto.php z view_miasta.php, abym po dodaniu submitem nowego rekordu otrzymywał nie czystą stronę a tę view_miasta.php.

w pliku dodaj_miasto.php, zaraz po wykonaniu zapytania ($wynik = mysql_query($zapytanie)winksmiley.jpg dodaj:
  1. <?php
  2. header('Location: view_miasta.php');
  3. exit();
  4. ?>
mpps
chyba nie ORDER BY tylko kombinować z DESC i ASC...

np.:
  1. <?php
  2. $result = mysql_query("select * from miasta order by miasto_id desc, limit 20") or die('error');
  3. ?>


czy jakoś tak... biggrin.gif
mild
Tak wyswietli 20 ostatnich rekordow, ale rowniez w odwrotnej kolejnosci
To zadziala:
  1. $result = mysql_query("SELECT * FROM miasta ORDER BY miasto_id ASC LIMIT 30, 50") OR die('error');

BTW. Miasta dodajesz Ty czy uzytkownicy? Bo jesli uzytkownicy, zalecilbym latanie dziur winksmiley.jpg
mpps
Cytat(mild @ 15.06.2007, 22:15:37 ) *
BTW. Miasta dodajesz Ty czy uzytkownicy? Bo jesli uzytkownicy, zalecilbym latanie dziur winksmiley.jpg

a jakie dziury masz na myśli?

ew. można:
  1. <?php
  2. $result = mysql_query("SELECT * FROM miasta ORDER BY miasto_id ASC LIMIT 30, ".$rows) or die('error');
  3. ?>

gdzie $rows będzie wynikiem mysql_num_rows zliczającym ilość wpisów (wierszy) w bazie danych:
  1. <?php
  2. $total_rows = mysql_query('SELECT * FROM miasta'); 
  3. $rows = mysql_num_rows($total_rows);
  4. ?>

czyli:
  1. <?php
  2. $total_rows = mysql_query('SELECT * FROM miasta'); 
  3. $rows = mysql_num_rows($total_rows);
  4. $result = mysql_query("SELECT * FROM miasta ORDER BY miasto_id ASC LIMIT 30, ".$rows) or die('error');
  5. ?>
mild
W tym:
Kod
$_POST['miasto_id'] = $miasto_id;
$_POST['woj_id'] = $woj_id;
$_POST['nazwa'] = $nazwa;
$_POST['uwagi'] = $uwagi;

Przed zmiennymi ktore powinny byc liczbami (int) zmienna albo 0 + zmienna, do tekstu stripslashes/addslashes/mysql_escape_string
mpps
ew. można to skrócić:
  1. <INPUT NAME="miasto_id">

  1. <?php
  2. mysql_query("INSERT INTO miasta VALUES ($miasto_id));
  3. ?>


@mildpopieram biggrin.gif
mild
Tak w zasadzie nie robilbym w tabeli kolumny miasto_id.
Zamiast tego zwykle id auto_increment z kluczem podstawowym i po sprawie.
I tak nie powinno sie powtarzac, a robota prostsza winksmiley.jpg
EDIT: Jesli juz tak bardzo opierac sie na zmiennych w ilosci rekordow to koncowka LIMIT ".$rows - 20.", ".$rows bedzie lepsza tongue.gif
jar
Dzięki za odpowiedzi, 'Location: view_miasta.php' oczywiście działa tak jak należy.
Co do wyświetlania rekordów:
Cytat
BTW. Miasta dodajesz Ty czy uzytkownicy? Bo jesli uzytkownicy, zalecilbym latanie dziur

Miasta dodaję ja, uytkownicy nie mają takiej możliwości. Wasze sugestie dotyczące sposobu na wyświetlanie ostatnich rekordów też są ok, ale w przypadku gdy tabela 'miasta' miałaby stałą ilość rekordów np. 50. Faktycznie wyświetlam tak jak chcę przy użyciu np. ASC LIMIT. Jednak chciałbym mieć możliwość takiego wyświetlania przy założeniu że ilość rekordów w tej tabeli jest zmienna. Czyli dziś ma 50 rekordów, jutro 80, a za dwa dni np. 100. Jeśli dobrze zrozumiałem to przy proponowanych przykładach (ASC LIMIT 30) uzyskam przy tabeli zawierającej 100 rekordów wyświetlanie 70 rekordów. Fajnie byłoby gdybym nie musiał co kilka dni ingerować w kod dla uzyskania ostatnich 20 czy 30 rekordów wyświetlonych na zasadzie:
....
97
98
99
Jeszcze raz dzięki za poświęcony czas.
mild
Sklej kilka ostatnich postów.
Wykorzystaj:
Kod
$total_rows = mysql_query('SELECT * FROM miasta');
$rows = mysql_num_rows($total_rows);
$result = mysql_query("SELECT * FROM miasta ORDER BY miasto_id ASC LIMIT ".$rows - 20.", ".$rows) or die('error');

Nie wiem jak to bedzie pasowac do Twoich potrzeb, bo nie wrzuciles tutaj tresci swojego zapytania. Jak cos to pisz, pomozemy na pewno.
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.