Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wypełnianie tebeli rekordami z bazy mysql
Forum PHP.pl > Forum > PHP
Zagiewa
Witam. Jestem początkujący w te klocki więc i średnio mi idzie... chce zrobić przykładową podstronę która korzystając z bazy danych odczyta rekordy. Utworzyłem bazę która wygląda następująco:

  1. <?php
  2. $link = mysql_connect("localhost", "root", "") or
  3. die("Sprawdz połączenie z serwerem! " . mysql_error());
  4.  
  5. $create = mysql_query("CREATE DATABASE IF NOT EXISTS linki") or
  6. die("Baza nie moze zostać utworzona! " . mysql_error());
  7.  
  8. mysql_select_db("linki");
  9.  
  10. $dystrybucje = "CREATE TABLE dystrybucje (
  11. dystrybucje_id tinyint(2) NOT NULL auto_increment,
  12. dystrybucje_nazwa varchar(255) NOT NULL,
  13. dystrybucje_adres varchar(255) NOT NULL,
  14. PRIMARY KEY (dystrybucje_id))";
  15.  
  16. $result = mysql_query($dystrybucje) or
  17. die("Sprawdz pierwszy rezultat! " . mysql_error());
  18.  
  19. $linux = "CREATE TABLE linux (
  20. linux_id tinyint(2) NOT NULL auto_increment,
  21. linux_nazwa varchar(255) NOT NULL,
  22. linux_adres varchar(255) NOT NULL,
  23. PRIMARY KEY (linux_id))";
  24.  
  25. $result = mysql_query($linux) or
  26. die("Sprawdz drugi rezultat! " . mysql_error());
  27.  
  28. $programy = "CREATE TABLE programy (
  29. programy_id tinyint(2) NOT NULL auto_increment,
  30. programy_nazwa varchar(255) NOT NULL,
  31. programy_adres varchar(255) NOT NULL,
  32. PRIMARY KEY (programy_id))";
  33.  
  34. $result = mysql_query($programy) or
  35. die("Sprawdz trzeci rezultat! " . mysql_error());
  36.  
  37. $sklepy = "CREATE TABLE sklepy (
  38. sklepy_id tinyint(2) NOT NULL auto_increment,
  39. sklepy_nazwa varchar(255) NOT NULL,
  40. sklepy_adres varchar(255) NOT NULL,
  41. PRIMARY KEY (sklepy_id))";
  42.  
  43. $result = mysql_query($sklepy) or
  44. die("Sprawdz czwarty rezultat! " . mysql_error());
  45.  
  46. $inne = "CREATE TABLE inne (
  47. inne_id tinyint(2) NOT NULL auto_increment,
  48. inne_nazwa varchar(255) NOT NULL,
  49. inne_adres varchar(255) NOT NULL,
  50. PRIMARY KEY (inne_id))";
  51.  
  52. $result = mysql_query($inne) or
  53. die("Sprawdz piaty rezultat! " . mysql_error());
  54.  
  55. echo "Poprawnie utworzono bazę!";
  56. ?>


do tego zapelnilem ja paroma przykladowymi rekordami:

  1. <?php
  2. $link = mysql_connect("localhost", "root", "") or
  3. die("Sprawdz połączenie z serwerem! " . mysql_error());
  4.  
  5. mysql_select_db("linki");
  6.  
  7. $dystrybucje = "INSERT INTO dystrybucje (dystrybucje_id, dystrybucje_nazwa, dystrybucje_adres) " .
  8. "VALUES (1, 'www.fedoraproject.org', 'http://www.fedoraproject.org'), " .
  9. "(2, 'www.redhat.com', 'http://www.redhat.com')";
  10.  
  11. $result = mysql_query($dystrybucje) or
  12. die("Sprawdz pierwszy rezultat! " . mysql_error());
  13.  
  14. $linux = "INSERT INTO linux (linux_id, linux_nazwa, linux_adres) " .
  15. "VALUES (1, 'www.linuxpub.pl', 'http://www.linuxpub.pl'), " .
  16. "(2, 'www.linuxpub.pl', 'http://www.linuxpub.pl')";
  17.  
  18. $result = mysql_query($linux) or
  19. die("Sprawdz drugi rezultat! " . mysql_error());
  20.  
  21. $programy = "INSERT INTO programy (programy_id, programy_nazwa, programy_adres) " .
  22. "VALUES (1, 'Kadu', 'http://www.kadu.net'), " .
  23. "(2, 'Open Office', 'http://pl.openoffice.org/')";
  24.  
  25. $result = mysql_query($programy) or
  26. die("Sprawdz trzeci rezultat! " . mysql_error());
  27.  
  28. $sklepy = "INSERT INTO sklepy (sklepy_id, sklepy_nazwa, sklepy_adres) " .
  29. "VALUES (1, 'www.sklep.iki.pl', 'http://www.sklep.iki.pl'), " .
  30. "(2, 'sklep.linuxstuff.pl', 'http://sklep.linuxstuff.pl')";
  31.  
  32. $result = mysql_query($sklepy) or
  33. die("Sprawdz czwarty rezultat! " . mysql_error());
  34.  
  35. $inne = "INSERT INTO inne (inne_id, inne_nazwa, inne_adres) " .
  36. "VALUES (1, 'www.kernel.org', 'http://www.kernel.org')";
  37.  
  38. $result = mysql_query($inne) or
  39. die("Sprawdz pierwszy rezultat! " . mysql_error());
  40.  
  41. echo "Rekordy zostały pomyślnie dodane do bazy danych!";
  42. ?>


No i chcialem to wyświetlić w tabeli która wyglądała by następująco... w pierwszym wierszu wpisuje nazwy podkategorii linków ręcznie (jest ich 5). Natomiast pod pierwszym wierszem stworzyć pętle która wyczytała by z bazy rekordy i wstawiała je w nowych wierwszach. To co napisałem wygląda tak:

  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?php
  6. $link = mysql_connect("localhost", "root", "") or
  7. die("Sprawdz połączenie z serwerem! " . mysql_error());
  8.  
  9. mysql_select_db("linki") or
  10. die("Sprawdz wybraną bazę! " . mysql_error());
  11.  
  12. $baza = "SELECT dystrybucje_nazwa, linux_nazwa, programy_nazwa, sklepy_nazwa, inne_nazwa " .
  13.  
  14. "FROM dystrybucje, linux, programy, sklepy, inne";
  15.  
  16. $result = mysql_query($baza) or
  17. die("Sprawdz rezultat! " . mysql_error());
  18.  
  19. $tabela=<<<EOD
  20. <table cellpading="0" cellspacing="0" border="1" align="center" width="550px">
  21.   <tr>
  22.   <td>Dystrybucje</td>
  23.   <td>Strony o Linuksie</td>
  24.   <td>Programy</td>
  25.   <td>Sklepy</td>
  26.   <td>Inne</td>
  27.   </tr>
  28. EOD;
  29.  
  30. while($row = mysql_fetch_array($result)) {
  31. $dystrybucje = $row['dystrybucje_nazwa'];
  32. $linux = $row['linux_nazwa'];
  33. $programy = $row['programy_nazwa'];
  34. $sklepy = $row['sklepy_nazwa'];
  35. $inne = $row['inne_nazwa'];
  36.  
  37. $tabela .=<<<EOD
  38.   <tr>
  39.   <td>$dystrybucje</td>
  40.   <td>$linux</td>
  41.   <td>$programy</td>
  42.   <td>$sklepy</td>
  43.   <td>$inne</td>
  44.   </tr>
  45. EOD;
  46. }
  47.  
  48. $tabela .<<<EOD
  49. </table>
  50. EOD;
  51.  
  52. echo $tabela;
  53. ?>
  54. </body>
  55. </html>


Kod troche działa tongue.gif bo czyta rekordy ale tworzy za dużo wierszy... w każdej kategorii (tabeli) są maksymalnie dwa rekordy więc pętla powinna utworzyć maksymalnie dwa wiersze a tworzy ich 16 tongue.gif nie wiem dlaczego Sad jakieś pomysły co może być nie tak?
siatkarzyna
Poczytaj o relacyjnych bazach danych o relacjach wiele do wielu jak się łączy tabele w mysql za pomocą np JOIN LEFT.
Zagiewa
Co nie co wiem jak działa JOIN LEFT ale mimo wszystko poczytałem więcej jak doradziłeś... bardzo fajnie opisuje relację między tabelami ten artykuł: http://aylard.viawww.pl/2009/01/01/mysql-relacje/ ale mimo wszystko on nie daje mi jednoznacznej odpowiedzi. Wiem jak te tabele połączyć ale po co je łączyć? Chce tylko żeby rekordy z tych tabel były odczytane osobno (więc nie trzeba ich łączyć) i tylko wypisać całą zawartość z pola nazwatabeli_nazwa każdej tabeli. Mam nadzieje, że rozumiesz o co mi chodzi bo trochę ciężko mi to wytłumaczyć tongue.gif

Problem rozwiązany... po długich męczarniach doszedłem do tego jak to zrobić tongue.gif Kod wygląda teraz tak:

CODE
<html>
<head>
</head>
<body>
<?php
$link = mysql_connect("localhost", "root", "") or
die("Sprawdz połączenie z serwerem! " . mysql_error());

mysql_select_db("linki") or
die("Sprawdz wybraną bazę! " . mysql_error());

$dystrybucje = "SELECT dystrybucje_nazwa, dystrybucje_adres " .
"FROM dystrybucje";

$result = mysql_query($dystrybucje) or
die("Sprawdz rezultat! " . mysql_error());

$linux = "SELECT linux_nazwa, linux_adres " .
"FROM linux";

$result2 = mysql_query($linux) or
die("Sprawdz rezultat 2! " . mysql_error());

$programy = "SELECT programy_nazwa, programy_adres " .
"FROM programy";

$result3 = mysql_query($programy) or
die("Sprawdz rezultat 3! " . mysql_error());

$sklepy = "SELECT sklepy_nazwa, sklepy_adres " .
"FROM sklepy";

$result4 = mysql_query($sklepy) or
die("Sprawdz rezultat 4! " . mysql_error());

$inne = "SELECT inne_nazwa, inne_adres " .
"FROM inne";

$result5 = mysql_query($inne) or
die("Sprawdz rezultat 5! " . mysql_error());

$koniec = "</tr></table>";
$kolumna = "<td valign=\"top\">";
$kolumnak = "</td>";

$naglowek=<<<EOD
<table cellpading="0" cellspacing="0" border="1" align="center">
<tr>
<td>Dystrybucje</td>
<td>Strony o Linuksie</td>
<td>Programy</td>
<td>Sklepy</td>
<td>Inne</td>
</tr>
<tr>
EOD;

$pierwsza = '';
while($row = mysql_fetch_array($result)) {
$dystrybucja = $row['dystrybucje_nazwa'];
$d_adres = $row['dystrybucje_adres'];

$pierwsza .=<<<EOD
<a href=$d_adres>$dystrybucja</a><br />
EOD;
}

$druga = '';
while($row2 = mysql_fetch_array($result2)) {
$linux_linki = $row2['linux_nazwa'];
$l_adres = $row2['linux_adres'];

$druga .=<<<EOD
<a href=$l_adres>$linux_linki</a><br />
EOD;
}

$trzecia = '';
while($row3 = mysql_fetch_array($result3)) {
$programy_linki = $row3['programy_nazwa'];
$p_adres = $row3['programy_adres'];

$trzecia .=<<<EOD
<a href=$p_adres>$programy_linki</a><br />
EOD;
}

$czwarta = '';
while($row4 = mysql_fetch_array($result4)) {
$sklepy_linki = $row4['sklepy_nazwa'];
$s_adres = $row4['sklepy_adres'];

$czwarta .=<<<EOD
<a href=$s_adres>$sklepy_linki</a><br />
EOD;
}

$piata = '';
while($row5 = mysql_fetch_array($result5)) {
$inne_linki = $row5['inne_nazwa'];
$i_adres = $row5['inne_adres'];

$piata .=<<<EOD
<a href=$i_adres>$inne_linki</a><br />
EOD;
}

$tabela =<<<EOD
$naglowek
$kolumna
$pierwsza
$kolumnak
$kolumna
$druga
$kolumnak
$kolumna
$trzecia
$kolumnak
$kolumna
$czwarta
$kolumnak
$kolumna
$piata
$kolumnak
$koniec
EOD;

echo $tabela;
?>

</body>
</html>


I teraz taka mała prośba do was... przez to ze dopiero się uczę, mój kod wygląda jak wygląda. Jeśli macie pomysły jak przerobić go tak aby działał sprawniej i był bardziej przejrzysty piszcie. Z góry dzięki, pozdrawiam.
siatkarzyna
Rozumiem co chcesz zrobić ale chyba nie rozumiem logiki nie musisz np połączyć sklepu z dystrybucjami ? a co będzie jak będziesz chciał dodać do jakiejś dystrybucji jeszcze dwa sklepy ?
Zagiewa
każda kolumna w tabeli (html) czyli: dystrybucje, linux, programy, sklepy, inne to oddzielne niezależne od siebie kategorie zawierające linki do konkretnych stron internetowych więc gdy będę chciał dodać do którejkolwiek z tych kategorii jakiś nowy link to odniosę się do konkretnej tabeli w bazie np. programy utworze nowy rekord a pętla już mi go sama wyświetli.
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.