Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL]kilka danych w jednej komórce
Forum PHP.pl > Forum > Przedszkole
student137
Chciałbym w jednej komórce zapisywać dane liczbowo, nr: '1','2', itd mam skrypt który zamienia te numery na dane z innych tabeli, tylko jest jeden problem, zamiasy wyswietlac informacje z tych 1,2 to wyswietla tylko pierwsza informację. i tak np w tabeli tytuly; mam id, tytyl -(1 mgr informatyki, 2lic politologii? zas w paszport.tytuly mam wpisane 1,2 a wyswietla tylko 1 mgr inf. Co mam zrobic aby wyswietlalo all.


Kod
  <meta http-equiv="Content-Type" content="text/html; charset=Windows-1250">
<?php require_once("include/baza.class.php5");
require_once("include/pytanie.class.php5");
require_once("include/utils.class.php5");

    $baza=new baza();
    $baza->connect();
        $pytanie = new pytanie();


if($_GET[kto]=="")
{
$pytanie->zapytaj("SELECT id,nazwa FROM paszporty ORDER BY id");
$dane = $pytanie->get_dane();
$ilosc = $pytanie->get_ilosc();



  echo "<table><tr><td></td>&nbsp;&nbsp;<td><b>NAZWA JEDNOSTKI</b>&nbsp;&nbsp;</td><td><b>RODZAJ WOJSK</b></td></tr>";
  for ($i=0;$i<$ilosc;$i++)
  {
  
   $nazwa=$dane[$i][1];
$id=$dane[$i][2];

    $w=$i+1;
   echo "<tr><td><center></center></td><td> <a href='paszport4.php?dzial=spism&kto=$nazwa'>$nazwa  </td><td>$id</a></td></tr>";
  }



}
else
{
$id=$_GET[kto];

$pytanie->zapytaj("SELECT paszporty.id, paszporty.nazwa, paszporty.paszport, paszporty.miejscowosc, paszporty.data,paszporty.email, paszporty.gg, wojsko.nazwa, tytuly.tytul FROM paszporty, wojsko, tytuly WHERE paszporty.stopien=wojsko.id and paszporty.tytuly=tytuly.id and paszporty.nazwa='$id'");
$dane = $pytanie->get_dane();

$id=$dane[0][0];
$nazwa=$dane[0][1];
$paszport=$dane[0][2];
$miejscowosc=$dane[0][3];
$data=$dane[0][4];
$email=$dane[0][5];
$gg=$dane[0][6];
$stopien=$dane[0][7];
$tytuly=$dane[0][8];

echo "<br><div class='menu'> </div>

  <div class='menu2'>

  <table width='1000px'>
  <tr>
  <td colspan='2'>
  
<table id='Table_01' width='0' height='25' border='0' cellpadding='0' cellspacing='0' align='center'>
<tr>

</tr>
<tr>


  <td background='img/tlo1.jpg' width='410' height='25' alt='' valign='top'>
    <font color='black'><center>Nazwa: <b>$nazwa</b> </font><br>
    <font color='black'>paszport: <b>$paszport</b> </font><br>
<font color='black'>Miejsce zamieszkania: <b>$miejscowosc</b> </font><br>
<font color='black'>Data rejestracji: <b>$data</b> </font><br>
<font color='black'>email: <b>$email</b> </font><br>
<font color='black'>gg: <b>$gg</b> </font><br>
<font color='black'>stopien: <b>$stopien</b> </font><br>
<font color='black'>tytuly: <b>$tytuly</b> </font><br>


    <br>
    </table

    <br>    <center><img src='$obraz'>  <center/>

    <table><td width=700'><div class='menu2' align='justify'>

<br><font size='3'>$spis</font>
   </td>
</table>


";


}

$baza->close();


?>
</head>
<body style="color: rgb(0, 0, 0); background-color: rgb(255, 255, 255);" alink="#000099" link="#000099" vlink="#990099">
<br>
</body>
</html>
SmokAnalog
Pytanie jest napisane w taki sposób, że kompletnie nie wiadomo o co chodzi, to raz.

Dwa, kod jest po prostu straszny. Możesz popracować nad jego czytelnością? Przede wszystkim zrób trzy rzeczy:
  1. Zapoznaj się z tzw. składnią alternatywną, żeby nie tworzyć skomplikowanych echo z HTML-em w środku.
  2. Pobieraj rekordy w pętli, a nie wszystkie naraz. Dzięki temu unikniesz brzydkiego operowania na indeksach.
  3. Do pól też odwołuj się po nazwie, a nie po indeksie.
timon27
Cytat(SmokAnalog @ 30.09.2013, 23:56:21 ) *
Możesz popracować nad jego czytelnością? Przede wszystkim zrób trzy rzeczy:


I czwarte:
zrób wcięcia
SmokAnalog
I piąte: zmień kodowanie na UTF-8 smile.gif
student137
Dzieki postaram sie do tego zastosować. Ale odchodzimy troche od meritum. Problem jest nastepujacy mam sobie tabele tytuly w ktorej znajduja się kolumny id,nazwa oraz inna tabele z kolumna tytuly. chciałbym zrobic tak aby po wpisaniu w tej kolumnie tytuly liczbę odczytywalo ją jako nazwe z tabeli tytuly i wyswietlalo record po tym id. I tak w tabeli paszporty w kolumnie tytuly wpisuje 1 i w php zamiast tej jedynki zamienia ja na wartosć z tabeli tytuly z kolumny nazwa po id. Mam polecenie where przez = i robi mi to, tylko problem sie pojawia ze robi to tylko dla jednej liczby. jakbym chcial dać w paszportach w kolumnie tytulu 1,2 lub '1','2' to w php wyswietla tylko jeden recorda chciałbym aby robil to dla wszytskich liczb z tej kolumny.. Nie wiem czy jasniej wytłuamczylem.
nospor
jak chcesz w mysql znalezc rekordy dla kilku wartosci to robisz to tak:
..... where pole in (1,2)
lub
... where pole =1 or pole = 2
student137
a jesli mam cos takiego:
Kod
SELECT paszporty.id, paszporty.nazwa, paszporty.paszport, paszporty.miejscowosc, paszporty.data,paszporty.email, paszporty.gg, wojsko.nazwa, tytuly.tytul FROM paszporty, wojsko, tytuly WHERE paszporty.stopien=wojsko.id and paszporty.tytuly=tytuly.id and paszporty.nazwa='$id';
mmmmmmm
Nie idź tą drogą!
Potrzebujesz dodatkowej tabeli (pośredniej) aby zbudować relację wiele do wielu. Bądź zmienić tabelę z tytułami, by tam podpiąć id paszportu.
student137
tzn,? mam 3 tabele paszporty do wyswietlania wszytskiego, wojsko -dla id, nazwy ordery i jego obrazu, oraz tytuly dla id i nazwy.

dane z wojska i tytulów maja byc wyswietlane dla paszportów, czyli co mam stowrzyc jeszcze jedną tabele, ale co w niej zawrzeć lub w jaki sposób


Cytat
Bądź zmienić tabelę z tytułami, by tam podpiąć id paszportu.
tylko, ze ta paszporty ma byc do wyswietlania, np w tytulach ma byc tylko id i nazwa. A nawet jakbym chciał to i tak pojawi sie chyba ten sam problem bo dla danego id tytulu moglyby byc rozne id paszportu.
mmmmmmm
Już wiem. Musisz mieć pośrednią:
paszporty_tytuly
(
id_paszportu,
id_tytulu
)
Chyba nie muszę pisać, co ma zawierać.
UNIKALNY klucz na oba pola.
Ew. możesz dodać id.
student137
ok, dzieki zobacze co z tego wyjdzie
-student137-
w bazie open office zrobilem z tabelą posrednią i działało, zaś php nadal wyswietla jeden, peirwszy rekord
student137
metodą prób i błedów jakiś rezultat osiągnąłem. Dzieki za pomoc. Tylko się zastanawiam czy nie ma czegoś prostszego, bo ten sposób wymaga ciąglej edycji zależnosci.

W ten sposób wyswietla wszytkie kombinacje dla zmniennych czyli jeżeli ktoś ma tytul naukowy- mgr, inż oraz zajmuje stanowiska -dyrektor i nauczyciel to wyswietla mi:

mgr dyrektor
mgr nauczyciel
inz dyrektor
inz nayczuciel

ja zas chciałbym aby było:

mgr
inz
dyrektor
nauczyciel

Kod
$zapytanie = "SELECT paszport.ID, paszport.imie, naukowy.naukowy, stanowiska.nazwa  FROM paszport, pa_na, naukowy, pa_sta, stanowiska WHERE paszport.paID = pa_na.paID AND naukowy.naID = pa_na.naID AND paszport.paID = pa_sta.paID AND pa_sta.staID = stanowiska.staID
";
//wykonujemy zdefiniowane zapytanie na bazie mysql
$wynik = mysql_query($zapytanie);


  echo "<p>";
echo "<table boder=\"1\"><tr>";

echo "</tr>";


while ( $row = mysql_fetch_row($wynik) ) {
    echo "</tr>";
  

   echo "<td bgcolor=\"ffff00\">" . $row['2'] . "</td>";
echo "<td bgcolor=\"ffff00\">" . $row['3'] . "</td>";
mmmmmmm
Jedyne, co mi na szybko przychodzi do głowy to:
  1. SELECT paszport.ID, paszport.imie, GROUP_CONCAT(naukowy.naukowy), GROUP_CONCAT(stanowiska.nazwa ) FROM paszport JOIN pa_na ON paszport.paID = pa_na.paID JOIN naukowy ON naukowy.naID = pa_na.naID JOIN pa_sta ON paszport.paID = pa_sta.paID JOIN stanowiska ON pa_sta.staID = stanowiska.staID GROUP BY 1,2
student137
jedynie co zmieniło to recordy wyswietlają się jednym ciagiem w poziomie a nie jak poprzednio w pionie. Popracowałem trochę i coś wychodzi.


To zdecydowanie pasuje, ale jeszcze musze zobaczyć czy przypadkiem jak dodam stanowiska czy nie bedzie znowu rozpisywać wszytskie kombinacje.

Kod
$paszport = mysql_query("SELECT * FROM paszport");
while($uzytkownik = mysql_fetch_assoc($paszport)){
    echo($uzytkownik['imie']);

    $naukowy = mysql_query("SELECT
    tytul
    FROM pa_na
    INNER JOIN naukowy ON(naukowy.naID = pa_na.naID)
    WHERE pa_na.paID = '".$uzytkownik['paID']."'");

    while($naukowa = mysql_fetch_assoc($naukowy)){
        echo(' '.$naukowa['naukowy']);
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.