Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Lista rozwijana
Forum PHP.pl > Forum > Przedszkole
kosior11
Witam

Mam dwie tabele:

Tabela 'news'
id
nazwa
data
autor
tresc
kat_id

Tabela 'kategorie'
id
nazwa

oraz formularz z listą rozwijana w której mam do wyboru kilka kategorii, chciałbym zrobic w ten sposób aby wybór danej kategorii przy wypełnianiu formularza automatycznie nadawał dodanem tekstowi wartość ( czyli id z tabela "kategorie") do pola kat_id.

W jaki sposób mogłbym to zrobić?

kod formularza:
  1. <form action="" method="post">
  2. tytuł: <input type="text" name="tytul">
  3. <br/>autor <input type="text" name="autor">
  4. <br/>kategoria: <select name="kategorie">
  5. echo '<option value="1">Ekstraklasa</option></a>
  6. echo '<option value="2">Premier league</option></a>
  7. echo '<option value="3">Primier Division</option></a>
  8. echo '<option value="4">Serie A</option></a>
  9. echo '<option value="5">Bundesliga</option></a>
  10. echo '<option value="6">Ligue 1</option></a>
  11. echo '<option value="7">Pozostałe ligi</option></a>
  12. echo '<option value="8">Koszykówka</option></a>
  13. echo '<option value="9">Sporty motorowe</option></a>
  14. echo '<option value="10">Siatkówka</option></a>
  15. echo '<option value="11">Piłka ręczna</option></a>
  16. echo '<option value="12">Premier league</option></a>
  17. echo '<option value="13">Tenis</option></a>
  18. echo '<option value="14">Sporty walki</option></a>
  19. echo '<option value="15">Sporty zimowe</option></a>
  20. </select>
  21.  
  22. <br/><top>treść:<top> <textarea name="tresc" rows="20" cols="50"></textarea>
  23. <br/><input type="submit" value="Dodaj"></form>


gdzie option value=1" to id kategorii

Dzięki i POzdr!
PlayKiller
  1. echo '<form action="" method="post">
  2. tytuł: <input type="text" name="tytul">
  3. <br/>autor <input type="text" name="autor">
  4. <br/>kategoria: <select name="kategorie">';
  5.  
  6. $array = mysql_query('SELECT * FROM kategorie ORDER BY id ASC');
  7.  
  8. if(mysql_num_rows($array) > 0)
  9. {
  10. while($l = mysql_fetch_assoc($array))
  11. {
  12. echo "<option value='{$l['id']}'>{$l['nazwa']}</option>";
  13. }
  14. }
  15.  
  16. echo '</select>
  17. <br/><top>treść:<top> <textarea name="tresc" rows="20" cols="50"></textarea>
  18. <br/><input type="submit" value="Dodaj"></form>';
kosior11
Dobra wielkie dzieki! Działa poprawnie tak jak chciałem.

Miałbym jeszcze jedno pytanie.

Mam plik news.php w którym są wyswietlane dodane artykuły i chciałbym żeby wyświetlane były w nim tylko te artykuły które np mają wartość kat_id=4

kod pliku news.php:

CODE
<?php
include("polacz.php");
$query = mysql_query("select * from news order by kat_id value='4'");
while($rekord = mysql_fetch_array($query))
{
$naz .= '<table><img src="html/f_3.jpg"><a href="news.php?id='.$rekord[0].'">'.$rekord[1].'</a> Autor: '.$rekord

[3].' - '.$rekord[2].'<br><center><img src="html/linia.jpg"></center></br></table>';
}
echo '<tr>'.$naz.'</tr>';
?>


("select * from news order by kat_id value='4'") myslałem że może taka składnia wszystko załatwi ale niestety nie działa i na dodatek wyskakuje błąd
emajl22
klauzula WHERE

WHERE `x` = 'wartosc'
kosior11
Super, wielkie dzieki działa jak chciałem!

Jestem bardzo ciemny jeśli chodzi o php więc non stop coś mi nie pasuje, więc napotkałem kolejny problem.

Mianowicie:

Wcieliłem plik wyświetlający dodane artykuły do mojego głównego pliku index

To jest kod który wrzuciłem do indexu:

CODE
<?php
include("polacz.php");
$query = mysql_query("select * from news WHERE `kat_id` = '6'");
while($rekord = mysql_fetch_array($query))
{
$naz .= '<table><img src="html/f_5.jpg"><a href="news.php?id='.$rekord[0].'">'.$rekord[1].'</a> Autor: '.$rekord

[3].' - '.$rekord[2].'<br><center><img src="html/linia.jpg"></center></br></table>';
}
echo '<tr>'.$naz.'</tr>';
?>


mój index składa się z kilku tabel i chciałem żeby w każdej tabeli wyświetlane były artykuły z innej kategorii, czyli w pierwszej tabeli artykuły o kat_id=1 w drugiej tabeli artykuły o kat_id=2 itp.

Ja zrobiłem to w taki sposób że w każdej tabeli umieściłem ten kod i zmieniałem tylko kat_id.

Jak dodaje artykuł do pierwszej tabeli wszystko jest OK ale jak dodam do drugiej to już jest coś nie tak i najpierw w tabeli drugiej pojawia mi sie artykuł z tabeli pierwszej i dopiero potem ten dodany słuszny.

Z kazdą kolejną tabelą jest podobnie, dodam artykuł do tabeli 3 to znowu najpierw wyswietlane są artykuły z pierwszych dwoch tabel i dopiero ten dodany

Prościej mówiąc zawartość kolejnej tabeli powielana jest artykuły z poprzednich tabel

Jak z tego wybrnąć?


emajl22
a gdzie kod odpowiedzialny za dodawanie artykulow do bazy?
kosior11
to jest kod który dodaje artyukuły:

CODE
<?php
include("polacz.php");
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$query = mysql_query("insert into news values('','".$_POST['tytul']."',now(),'".$_POST['autor']."','".$_POST['tresc']."','".$_POST['kat_id']."')");
}
?>
emajl22
a sprawdź jak są dodawane rekordy do bazy i pod $query... daj var_dump($_POST) i wklej na forum to co ci wyskoczyło
kosior11
Jeśli chodzi Ci o to czy rekordy w bazie też się powtarzają to właśnie nie, tam jest wszystko w porządku dlatego bardziej myślałem że to wina leży po stronie wyświetlania. Zaraz sprawdze z tym kodem, a dokładniej w którym miejscu ulokować var dump($_POST)?

a może te błędy są za to odpowiedzialne? :

Undefined variable: naz in...

Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in ...
sakul55
  1. echo '<tr>'.$naz.'</tr>';

daj linijke wyzej, a } nizej
kosior11
załatwiło to sprawę błędu: Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in ..

Ale w dalszym ciągu dodawane teksty się powielają :/

Wkleje kod który wyświetla artykuły jeszcze raz, bo bardzo mi na tym zależy:

CODE

<?php
include("polacz.php");
$query = mysql_query("select * from news WHERE `kat_id` = '1'");
while($rekord = mysql_fetch_array($query))
{
$naz .= '<table><img src="html/f_6.jpg"><a href="news.php?id='.$rekord[0].'">'.$rekord[1].'</a> Autor: '.$rekord[3].' - '.$rekord[2].'<br><center><img src="html/linia.jpg"></center></br></table>';

echo '<tr>'.$naz.'</tr>';
}
?>


Mam w pliku index tabele w której podzieloną na kilka wierszy i wiersze te podzielone są na kilka kategorii. Zrobiłem z pomocą chłopaków tak, żeby każdy artykuł został dodany do wiersza odpowiadającego danej kategorii, na tym etapie jest wszystko w porządku.

Jednak mimo tego że w np. w wierszu odpowiadającym kategorii 1 umieszczam cały kod z ("select * from news WHERE `kat_id` = '1'") artykuł się wyświetla w wierszach o innych kategoriach. Czyli jest powielany na pozostałe kategorie. W przypadku 2 kategorii jest podobnie ale z ominięciem wiersza 1. i tak w każdej kategorii. Zawsze artykuły są powielane o następną kategorię, jeśli chodzi o poprzednie to jest spoko.

Jakie zmiany wprowadzić do kodu żeby artykuły wyświetlały sie prawidłowo tzn, dany artykuł tylko i wyłącznie w danej kategorii.

Pozdr!
sakul55
zrob jakiegos screena jak to wyglada i podaj caly kod odpowiadajacy za wszystkie wiersze

wrzuc w tagi [PHP]
kosior11



  1. <table width=580px align="top" border="10">
  2.  
  3. <tr>
  4. <td><a href="dodaj.php"><img src="html/dodaj.jpg"></a></td>
  5.  
  6. <tr bgcolor="#FF6600">
  7. <td>kategoria 1</td>
  8. <tr>
  9. <td>
  10. <table width=580>
  11.  
  12. <?php
  13. include("polacz.php");
  14. $query = mysql_query("select * from news WHERE `kat_id` = '1'");
  15. while($rekord = mysql_fetch_array($query))
  16. {
  17. $naz .= '<table><img src="html/f_6.jpg"><a href="news.php?id='.$rekord[0].'">'.$rekord[1].'</a> Autor: '.$rekord
  18.  
  19. [3].' - '.$rekord[2].'<br><center><img src="html/linia.jpg"></center></br></table>';
  20.  
  21. echo '<tr>'.$naz.'</tr>';
  22. }
  23. ?>
  24.  
  25. </td>
  26. <tr>
  27. <td><a href="ekstra.php">(więcej)</a></td>
  28. </tr>
  29.  
  30.  
  31.  
  32.  
  33. <tr bgcolor="#FF6600">
  34. <td>kategoria 2</td>
  35. <tr>
  36. <td>
  37. <table width=580>
  38.  
  39. <?php
  40. include("polacz.php");
  41. $query = mysql_query("select * from news WHERE `kat_id` = '2'");
  42. while($rekord = mysql_fetch_array($query))
  43. {
  44. $naz .= '<table><img src="html/f_1.gif"><a href="news.php?id='.$rekord[0].'">'.$rekord[1].'</a> Autor: '.$rekord
  45.  
  46. [3].' - '.$rekord[2].'<br><center><img src="html/linia.jpg"></center></br></table>';
  47.  
  48. echo '<tr>'.$naz.'</tr>';
  49. }
  50. ?>
  51.  
  52. </td>
  53. </tr>
  54.  
  55. <tr bgcolor="#FF6600">
  56. <td>kategoria 3</td>
  57. <tr>
  58. <td>
  59. <table width=580>
  60.  
  61. <?php
  62. include("polacz.php");
  63. $query = mysql_query("select * from news WHERE `kat_id` = '3'");
  64. while($rekord = mysql_fetch_array($query))
  65. {
  66. $naz .= '<table><img src="html/f_2.jpg"><a href="news.php?id='.$rekord[0].'">'.$rekord[1].'</a> Autor: '.$rekord
  67.  
  68. [3].' - '.$rekord[2].'<br><center><img src="html/linia.jpg"></center></br></table>';
  69.  
  70. echo '<tr>'.$naz.'</tr>';
  71. }
  72. ?>
  73.  
  74. </td>
  75. </tr>
  76.  
  77. <tr bgcolor="#FF6600">
  78. <td>kategoria 4</td>
  79. <tr>
  80. <td>
  81. <table width=580>
  82.  
  83.  
  84. <?php
  85. include("polacz.php");
  86. $query = mysql_query("select * from news WHERE `kat_id` = '4'");
  87. while($rekord = mysql_fetch_array($query))
  88. {
  89. $naz .= '<table><img src="html/f_3.jpg"><a href="news.php?id='.$rekord[0].'">'.$rekord[1].'</a> Autor: '.$rekord
  90.  
  91. [3].' - '.$rekord[2].'<br><center><img src="html/linia.jpg"></center></br></table>';
  92.  
  93. echo '<tr>'.$naz.'</tr>';
  94. }
  95. ?>
  96.  
  97.  
  98. </td>
  99. </tr>
  100.  
  101. <tr bgcolor="#FF6600">
  102. <td>kategoria 5</td>
  103. <tr>
  104. <td>
  105. <table width=580>
  106.  
  107. <?php
  108. include("polacz.php");
  109. $query = mysql_query("select * from news WHERE `kat_id` = '5'");
  110. while($rekord = mysql_fetch_array($query))
  111. {
  112. $naz .= '<table><img src="html/f_4.jpg"><a href="news.php?id='.$rekord[0].'">'.$rekord[1].'</a> Autor: '.$rekord
  113.  
  114. [3].' - '.$rekord[2].'<br><center><img src="html/linia.jpg"></center></br></table>';
  115.  
  116. echo '<tr>'.$naz.'</tr>';
  117. }
  118. ?>
  119.  
  120. </td>
  121. </tr>
  122.  
  123. <tr bgcolor="#FF6600">
  124. <td>kategoria 6</td>
  125. <tr>
  126. <td>
  127. <table width=580>
  128.  
  129.  
  130. <?php
  131. include("polacz.php");
  132. $query = mysql_query("select * from news WHERE `kat_id` = '6'");
  133. while($rekord = mysql_fetch_array($query))
  134. {
  135. $naz .= '<table><img src="html/f_5.jpg"><a href="news.php?id='.$rekord[0].'">'.$rekord[1].'</a> Autor: '.$rekord
  136.  
  137. [3].' - '.$rekord[2].'<br><center><img src="html/linia.jpg"></center></br></table>';
  138.  
  139. echo '<tr>'.$naz.'</tr>';
  140. }
  141. ?>
  142.  
  143. </td>
  144. </tr>
  145. </table>
  146. </table>
  147. </table></table></table></table></table>


Powinno być po jednym artykule w każdej kategorii, a jak widzimy w drugiej kategorii znalazł sie artykuł z kategorii pierwszej i w trzecim wypadku jest podobnie.

Teraz się tak przyjrzałem temu co wkleiłem.

A przypadkiem błędem nie będzie to że w zasadzie w każdym nowym wierszu tabeli kod zaczyna się od: include("polacz.php"); Może include("polacz.php"); powinno być tylko jakoś na początku.

Wiecie jakby to miało wyglądać?
sakul55
a masz zrobione zamykanie polaczenia z baza? bo jak ci sie polaczy i pobierze dane to potem znowu ci sie laczy i znowu pobiera, a wciaz masz otwarta baze dla starego polaczenia. prawdopodobnie przez to masz ten blad
kosior11
rozumiem że zamykanie polaczenia z bazą powinienem był umiescic w pliku polacz.php? Czy gdzies w tym kodzie? :

  1. <?php
  2. include("polacz.php");
  3. $query = mysql_query("select * from news WHERE `kat_id` = '1'");
  4. while($rekord = mysql_fetch_array($query))
  5. {
  6. $naz .= '<table><img src="html/f_6.jpg"><a href="news.php?id='.$rekord[0].'">'.$rekord[1].'</a> Autor: '.$rekord[3].' - '.$rekord[2].'<br><center><img src="html/linia.jpg"></center></br></table>';
  7.  
  8. echo '<tr>'.$naz.'</tr>';
  9. }
  10. ?>


  1. <?php
  2. mysql_connect('localhost', 'root' , '');
  3. mysql_query("SET NAMES 'utf8'");
  4. ?>


Co powinno się znaleźć w nawiasie?
sakul55
w kodzie, po pobraniu wszystkiego z bazy.

nie wiem niestety jak to dziala, ja uzywam PDO i tam to jest duzo lepiej zrobione. wydaje mi sie, ze powinienes zrobic jakas zmianna i w niej wywolac polaczenie do bazy, a potem ta zmienna podac w mysql_close($zmienna);
amii
Cytat z manuala czyli nie musisz zamykać połączenia z bazą:
Cytat
Using mysql_close() isn't usually necessary, as non-persistent open links are automatically closed at the end of the script's execution. See also freeing resources.

miaka
Stwierdzilam, ze nie ma sensu tworzyc podobnego tematu zwlaszcza, ze wykorzystalam kod napisany tutaj przez PlayKiller.

Moj problem polega na tym, ze nie biore liste rozwijana oraz text po czym umieszczam te dane w bazie. Mam problem z lista rozwijana. Bo chyba w tym jest blad zeby wybrac z listy i dodac do bazy. Z góry dziekuje za pomoc.

  1. function dodaj_pozycje()
  2. {
  3. if (isset($_SESSION['pracownik']))
  4. {
  5. echo '<form action="index.php?dzial=oferta&dodaj=ok&dodano=yes" method="post">
  6. nazwa: <input type="text" name="nazwa">
  7. <br/>cena <input type="text" name="cena">
  8. <br/>kategoria: <select name="kategoria">';
  9.  
  10. $array = mysql_query('SELECT * FROM Kategoria');
  11.  
  12. if(mysql_num_rows($array) > 0)
  13. {
  14. while($l = mysql_fetch_assoc($array))
  15. {
  16. echo "<option value='{$l['id_kategoria']}'>{$l['kategoria']}</option>";
  17. }
  18. }
  19.  
  20. echo '</select>
  21. <br/><input type="submit" value="Dodaj"></form>';
  22.  
  23. if(isset($_GET['dodano']))
  24. {
  25. dodaj_o();
  26. }
  27. }
  28. else
  29. {
  30. logowanie();
  31. }
  32. }
  33.  
  34.  
  35. function dodaj_o()
  36. {
  37. if (isset($_SESSION['pracownik']))
  38. {
  39. $kategoria=mysql_real_escape_string (trim($_POST['kategoria']));
  40. $nazwa=mysql_real_escape_string (trim($_POST['nazwa']));
  41. $cena=mysql_real_escape_string (trim($_POST['cena']));
  42.  
  43. $zap = "select id_kategoria from Kategoria where kategoria='$folder'";
  44. $wyn = mysql_query($zap);
  45.  
  46. while($row = mysql_fetch_array($wyn))
  47. {
  48. $id_kategoria = mysql_real_escape_string (trim($row['id_kategoria']));
  49.  
  50. $zapytanie="INSERT INTO Oferta (id_kategoria, nazwa, cena) VALUES ('$id_kategoria', '$nazwa','$cena')";
  51. mysql_query($zapytanie) or die ("Niepowodzenie! ".mysql_error());
  52.  
  53. echo "<br>Pozycja została dodana<br>";
  54. }
  55.  
  56. echo "<script LANGUAGE='JavaScript' TYPE='text/javascript'>location.href='index.php?dzial=oferta';</SCRIPT>";
  57. }
  58. else
  59. {
  60. logowanie();
  61. }
  62. }
  63.  
nospor
@Sebapgd pytasz o to w innnym temacie. Naprawde wystarczy
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.