Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wyciąganie id z bazy
Forum PHP.pl > Forum > Przedszkole
mambus
Witam.

Czy macie może pomysł jak rozwiązać taki problem ?

Chciałbym w MySQLu wykonać następujące zapytanie:

CODE
$zapytam = 'SELECT * FROM stacje BETWEEN '.$id_odjazdu.' AND '.$id_przyjazdu.' '


Natomiast aby wprowadzić $id_odjazdu i przyjazdu potrzebuje je najpierw wyciągnąć z bazy....

Na początku mam listę z której wybieram stację, chce np 3 stacje i 8 stację, i pomiędzy nimi mają się generować wyniki... czas, kilometry bla bla...
chciałbym to zrobić na podstawie ID, że jak wybiorę np 3 stacje to id=3 i ostatnia stacje i jej id=8 i sql wyciąga tylko wszystko pomiędzy nimi...

No kombinuje, i zgooglowałem, jakoś nie mam pomysłu...

a Wy ?
ciekawskiii
  1. WHERE id_stacji>2 AND id_stacji<9


chyba o to Ci chodzi
mambus
Tak, tylko te liczby nie chciałbym żeby były z ręki w kod wpisywane, tylko pobierane z bazy, na podstawie wybranej opcji w formularzu.
blade-mrn
Ja nie widzę problemu. Z tego co piszesz wynika że masz jakąś listę z tymi stacjami (bynajmniej ja tak to widzę). Więc do każdej pozycji tej listy, sczytajen z bazy jako value przypisujesz ID pobrane z bazy. Po czym po wysłaniu formularza umieszczasz te zwrócone wartości zamiast 2 i 9 w tym co podał ciekawskiii
Było by prościej jak byś napisał w jaki sposób przekazujesz te parametry wyszukiwania do skryptu.
mambus
Tak jest. Oto kod z formularzami zapisany jako wyszukiwarka.php

CODE
<div id="wyszukiwanie">
<form name="wybornik" method="get" action="stacje.php">
<p class="pola"> Z:</b> <select name="start" class="pola"></p>
<option>wybierz...</option>
<?php
$pobieranie = 'SELECT nazwa_stacji FROM stacje';
$zapytuje = mysql_query($pobieranie);

while ($wpisy = mysql_fetch_assoc($zapytuje)) {
$przystanki = $wpisy['nazwa_stacji'];
echo '<option>'.$przystanki.'</option>';}
?>
</select>


<br>
<p class="pola">Do: <select name="docelowo" class="pola"></p>
<option>wybierz...</option>
<?php
$pobieranie_a = 'SELECT nazwa_stacji FROM stacje';
$zapytuje_a = mysql_query($pobieranie_a);

while($ciag = mysql_fetch_assoc($zapytuje_a)) {
$przystaneczki = $ciag['nazwa_stacji'];
echo '<option>'.$przystaneczki.'</option>';}
?>
</select><br>


<p class="pola">Godzina: <select name="godzina_odjazdu" class="pola"></p> <!-- BRAKOWAŁO TU NAZWY, zmienna się nie przekazywała przez GET a jest potrzebna przeciez do dalszych obliczeń-->
<option>wybierz...</option>
<?php
$downloadowanie = 'SELECT odjazd FROM odjazdy_skarzysko';
$zapytanko = mysql_query($downloadowanie);

while ($dane = mysql_fetch_assoc($zapytanko)) {
$skarzysko_odjazdy = $dane['odjazd'];
//$skarzysko_odjazdy_dwa = substr($skarzysko_odjazdy,0,5);
$odjazd = date("H:i",strtotime($skarzysko_odjazdy));
echo '<option>'.$odjazd.'</option>'."\r\n";
}

$sciaganie = 'SELECT godzina_starter FROM starter';
$z_sciaganie = mysql_query($sciaganie);

while ($sciagnieto = mysql_fetch_assoc($z_sciaganie)) {
$zz_sciaganie = $sciagnieto['godzina_starter'];
$godzina_startu = date("H:i",strtotime($zz_sciaganie));
}
?>

</select>


a oto sam mechanizm:

CODE
<div id="content">
<?php
include('wyszukiwarka.php'); /*wyszukiwarka połączeń*/
?>

<?php

if (isset($_GET['godzina_odjazdu'])) {
$godzina_odjazdu = $_GET['godzina_odjazdu']; // JEŚLI WYBRANA JEST GODZINA ODJAZDU TO JĄ ZACZYTUJEMY DO ZMIENNEJ
}

if (isset($_GET['godzina_zero'])) {
$godzina_departury = $_GET['godzina_zero'];
}
if (isset($_GET['start'])) {
$start = $_GET['start'];
}

if (isset($_GET['docelowo'])) {
$docelowo = $_GET['docelowo'];
}
$odlot = $_GET['godzina_odjazdu'];
?>

<table border="0" cellpadding="4" cellspacing="2" width="800px" class="tabelka_wyniki" bgcolor="#9c9c9c">
<thead>
<tr bgcolor="#6d6d6d">
<th> </th>
<th>STACJA</th>
<th>ODJAZDY</th>
<th>KILOMETRY</th>
<th>BILET</th>
<th>BILET 37%</th>
<th>PUNKTY</th>
</tr>
</thead>
<tbody>

<?php
include('switche.php');

$laczny_wynik = 'SELECT * FROM stacje WHERE stacja > id AND id < stacja , ORDER BY id';
$pobieranie = mysql_query($laczny_wynik);
$godzina_departury = strtotime($godzina_departury);
$godzina_odjazdu = strtotime($godzina_odjazdu); // TRZEBA ZAMIENIĆ PRZED PĘTLĄ ŁAŃCUCH NA ZNACZNIK CZASU



while ($rekord = mysql_fetch_assoc($pobieranie)) {

$stacja = $rekord['nazwa_stacji'];
$id = $rekord['id'];
$czas_podrozy = $rekord['czas'];
$kilometry = $rekord['kilometr'];
$kolejnosc = $rekord['id'];
$sumator = $sumator + $kilometry;
$kilometr_cena = 0.16;
$cena_biletu = $sumator * $kilometr_cena;
$cena_biletu = number_format($cena_biletu, 2, '.','');
$cena_studencka = $cena_biletu - 37 * $cena_biletu /100;
$cena_studencka = number_format($cena_studencka, 2, '.','');

// ----------- OBLICZANIE CZASU DO KOLEJNEJ STACJI -------------------------

//$sugestia = date("08:30"); DALEŚ W PĘTLI WARTOSC POCZATKOWĄ ZMIENNEJ exclamation.gif!!!!

$czas_jazdy = $godzina_departury + $czas_podrozy * 60;
$godzina_departury = $czas_jazdy;
$rozklad = $godzina_odjazdu + $czas_podrozy * 60;
$godzina_odjazdu = $rozklad; // GODZINA WPISANA DO ROZKŁADU JAZDY STAJE SIĘ GODZINĄ ODJAZDU ZE STACJI

//echo $godzina_odjazdu." - ".$czas_podrozy." - ".$rozklad."<br>";

$rozklad = date('H:i', $rozklad);
$czas_jazdy = date('H:i', $czas_jazdy);

if ($sumator >= $przerywnik) {

break;}
echo '<tr bgcolor="#7e7e7e">'."\r\n";
echo '<td>'.$id.'</td>';
echo '<td><img src="images/wdol.gif"></td>'."\r\n";
echo '<td><a href="#">'.$stacja.'</a></td>'."\r\n";
echo ' <td>'.$rozklad.'</td>'."\r\n";
echo '<td>'.$sumator.'</td>'."\r\n";
echo '<td>'.$cena_biletu.' PLN</td>'."\r\n";
echo '<td>'.$cena_studencka.' PLN</td>'."\r\n";
echo '<td>'.PunktyLojalnosciowe($sumator).'</td>'."\r\n";
}
$czas_jazdy = strtotime($czas_jazdy);
$czas_laczny = $czas_jazdy - $czas_podrozy*60;
?>


</tbody>
</table>
<table width="850px" border="0" cellpadding="4" cellspacing="1" bgcolor="#d2d2d2">
<tr bgcolor='#a8a8a8' class="tabelka_wyniki2">
<td>START</td>
<td>CEL</td>
<td>ODJAZD</td>
<td>PRZYJAZD</td>
<td>ODLEGŁOŚĆ</td>
<td>CZAS JAZDY</td>
<td>CENA NORM</td>
<td>CENA 37%</td>
</tr>

<?php
$czas_laczny = date("H:i", $czas_laczny);
$czas = date("H:i");
echo '<p class="czas"><b><center>'.$czas.'</center></b></p>';
$sumator_dwa = $sumator - $kilometry;
$cena_biletu_dwa = $sumator_dwa * $kilometr_cena;
$cena_biletu_dwa = number_format($cena_biletu_dwa, 2, '.', '');
$cena_studencka_dwa = $cena_biletu_dwa - 37 * $cena_biletu_dwa / 100 ;
$cena_studencka_dwa = number_format($cena_studencka_dwa, 2, '.', '');
$rozklad = strtotime($rozklad);
$dojazd = $rozklad - $czas_podrozy * 60;
$dojazd = date("H:i", $dojazd);
?>


oczywiście zapytanie SELECT * FROM które jest powyżej jest nieprawidłowe... popróbuje teraz jeszcze z tym przypisaniem jako VALUE.
blade-mrn
Po pierwsze to używaj odpowiednich znaczników ani byle jakich.
Po drugie jeśli chcesz nadać tym polom na liście wartości id z bazy wystarczy ze zrobisz tak:
echo '<option value="'.$wpisy['id'].'">'.$przystanki.'</option>';}
Tyle że musisz najpierw pobrać to id bo obecnie w tym zapytaniu $pobieranie = 'SELECT nazwa_stacji FROM stacje'; pobierasz jedynie nazwę stacji.
Jeśli zrobisz to według tego mojego przykładu po wysłaniu formularza zmienna $_GET['start'] będzie zawierała id wybranej stacji.
A tak nawiasem mówiąc, czemu wysyłasz formularz za pomocą GET? Lubisz mieć bałagan w adresie strony? POST jest bezpieczniejszy bo dane nie są przekazywane za pomocą adresu strony.
mambus
No tak... sam mechanizm różnicy działa, bo ID pokazuje mi prawidłowo. Ale po ustawieniu value w option pokazuje mi zamiast nazwy stacji jej numer, i nic więcej...

czyli jak mam pole STACJA ODJAZDU to pokazuje zamiast np RADOM to: 4
i tak dla każdej stacji...

przez to pętla while przestała działać... działa na podstawie takiego pliczku 'switche.php' , zrobiłem to na zasadzie takiej że jak $sumator czyli zsumowana liczba kilometrów przekracza określoną w switchach wartość to pętla się przerywa... no właśnie - przerywa, a teraz nawet się nie generuje, tak jakby odrazu była ustawiona na 0.

To może załącze switche.php

Kod
<?php
/* działanie switcha wybierającego stację odjazdu */
switch($start) {

case 'Skarzysko-Kamienna':
$poczatek = 0;
break;

case 'Lipowe Pole':
$poczatek = 0;
break;

case 'Szydlowiec':
$poczatek = 0;
break;

case 'Radom':
$poczatek = 0;
break;

case 'Warka':
$poczatek = 0;
break;

case 'Piaseczno':
$poczatek = 0;
break;

case 'Warszawa Zachodnia':
$poczatek = 0;
break;

case 'Warszawa Centralna':
$poczatek = 0;
break;

case 'Warszawa Wschodnia':
$poczatek = 0;
break;
}
/* działanie switcha wybierającego stację docelową */
switch($docelowo) {

case 'Skarzysko-Kamienna':
$poczatek = 0;
$id = 1;
break;

case 'Lipowe Pole':
$przerywnik = 5;
$poczatek = 0;
$id = 2;
break;

case 'Szydlowiec':
$przerywnik = 12;
$poczatek = 0;
$id = 3;
break;

case 'Radom':
$przerywnik = 46;
$poczatek = 0;
$id = 4;
break;

case 'Warka':
$przerywnik = 101;
$poczatek = 0;
$id = 5;
break;

case 'Piaseczno':
$przerywnik = 131;
$poczatek = 0;
$id = 6;
break;

case 'Warszawa Zachodnia':
$przerywnik = 142;
$poczatek = 0;
$id = 7;
break;

case 'Warszawa Centralna':
$przerywnik = 145;
$poczatek = 0;
$id = 8;
break;

case 'Warszawa Wschodnia':
$przerywnik = 150;
$poczatek = 0;
$id = 9;
break;
}
?>
blade-mrn
Masz fragment generujący pierwszą listę stacji:
  1. $polaczenie = mysql_connect('localhost', 'user', 'pasword');
  2. $baza = mysql_select_db('nazwa_bazy',$polaczenie);
  3. $pobieranie = 'SELECT id, nazwa_stacji, nazwa FROM stacje';
  4. $zapytuje = mysql_query($pobieranie,$polaczenie);
  5. while ($wpisy = mysql_fetch_assoc($zapytuje))
  6. {
  7. $przystanki = $wpisy['nazwa_stacji'];
  8. $id = $wpisy['id'];
  9. echo '<option value="'.$id.'">'.$przystanki.'</option>';
  10. }

Nie wiem jakie masz ustawienia do bazy więc to popraw i w razie konieczności popraw pobieranie ID bo nie wiem jak to pole się u ciebie w bazie nazywa. Reszta powinna działać. A plik switche.php nie działa ci prawdopodobnie dlatego że wybierasz tam stacje po ich nazwie a nie id. Szczerze powiem że nie do końca widzę jak to ma działać ale jeśli chodzi ci o to aby te listy z których wybierasz stacje przekazywały id stacji po wysłaniu formularza to powyższy skrypt to realizuje.
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.