Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL] Jak połączyć zapytania
jar
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 6.06.2007

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


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Void
post
Post #2





Grupa: Zarejestrowani
Postów: 112
Pomógł: 15
Dołączył: 2.02.2007

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


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)(IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) dodaj:
  1. <?php
  2. header('Location: view_miasta.php');
  3. exit();
  4. ?>
Go to the top of the page
+Quote Post
mpps
post
Post #3





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


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... (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował mpps 15.06.2007, 19:51:41
Go to the top of the page
+Quote Post
mild
post
Post #4





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 22.04.2007
Skąd: Wrocław

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował mild 15.06.2007, 21:17:16
Go to the top of the page
+Quote Post
mpps
post
Post #5





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


Cytat(mild @ 15.06.2007, 22:15:37 ) *
BTW. Miasta dodajesz Ty czy uzytkownicy? Bo jesli uzytkownicy, zalecilbym latanie dziur (IMG:http://forum.php.pl/style_emoticons/default/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. ?>


Ten post edytował mpps 15.06.2007, 22:13:57
Go to the top of the page
+Quote Post
mild
post
Post #6





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 22.04.2007
Skąd: Wrocław

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


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
Go to the top of the page
+Quote Post
mpps
post
Post #7





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

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


ew. można to skrócić:
  1. <INPUT NAME="miasto_id">

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


@mildpopieram (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
mild
post
Post #8





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 22.04.2007
Skąd: Wrocław

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
EDIT: Jesli juz tak bardzo opierac sie na zmiennych w ilosci rekordow to koncowka LIMIT ".$rows - 20.", ".$rows bedzie lepsza (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ten post edytował mild 15.06.2007, 22:47:10
Go to the top of the page
+Quote Post
jar
post
Post #9





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 6.06.2007

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


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.
Go to the top of the page
+Quote Post
mild
post
Post #10





Grupa: Zarejestrowani
Postów: 78
Pomógł: 0
Dołączył: 22.04.2007
Skąd: Wrocław

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


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.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 2.10.2025 - 17:12