Mysql mi selektira samo prvi red u tablici

Pozz!
Evo uvoda u problem da znate o čemu se točnije radi:
Imam formu za rezervaciju termina putem javascript date pickera.Klikom na buton rezerviraj,termin se upisuje u mysql bazu i dobije se povratna poruka o uspješnosti rezervacije na sljedećoj stranici.Klikom linka natrag vraća se na predhodnu stranicu sa date pickerom koja se osvježava i u html tablici ispod ispisuje kada su termini rezervirani za korisnika koji je trenutno ulogiran.Svaki korisnik može rezervirati 5 termina,te brisati i dodavati nove termine iz te tablice.
Također je na toj stranici i gumb ‘Ulaz’.Klikom na njega otvara se stranica koja provjerava dali je trenutno vrijeme u intervalu rezerviranoga (od-do),i u skladu s tim šalje na predviđenu stranicu.

E sada…konkretan problem…
Znači u mysql tablicu prilikom svake rezervacije upisuje se korisničko ime,vrijeme od i vrijeme do.Dozvoljeno je do 5 termina po korisniku ,znači u tablici se isto korisničko ime pojavljuje do 5 puta.Međutim klikom na buton Ulaz,mysql selektira samo prvi red sa istim korisničkim imenom(onaj na vrhu).Isprobavao sam svakakve kombinacije i zaključio da je baš u tome stvar.Mysql query je napisan ovako:

$provjera = mysql_query (" SELECT * FROM termin  WHERE  korisnik =  '".$kor_ime."'   ") or die ("nije izvršena provjera u bazi");

Moje pitanje je kako postaviti mysql query ili što napraviti u svakom slučaju da se u obzir uzmu svi retci iz tablice sa istim korisničkim imenom.

Ove je adresa na kojoj se vrti stranica pa se može i pogledati

http://dpolo.homeip.net/

To je zapravo moj IP sinkroniziran preko dyndns-a.

Ovo je diplomski rad i hitno mi je potrebna pomoć,unaprijed zahvaljujem.

Ovo je PHP pitanje, al dobro.

Vjerovatno ti fali while petlja:

mysql_fetch_* vraca rezultat na kojem je trenutno pointer i pomice pointer prema naprijed dok ima zapisa.

Npr.

Zato to radis u while petlji - mysql_fetch_* vraca FALSE kad vise nema rezultata i petlja se zaustavlja. Efektivno si iterirao po svim zapisima koje si dohvatio sa mysql_query.

Imam while petlju u ovom obliku…evo koda cijele stranice…

<?php
 
$kor_ime =  $_POST ["kor_ime"];

mysql_connect ("localhost","root","303217" )  or die ("Veza nije uspostavljena!");
mysql_select_db  ( "baza1") or die ("Baza nije pronađena");

$provjera = mysql_query (" SELECT  * FROM termin  WHERE  korisnik =  '".$kor_ime."'   ") or die ("nije izvršena provjera u bazi");
while ( $row = mysql_fetch_array  ($provjera))
	{
		$kor_ime=$row ['korisnik'];
		$vrijeme_od = $row ['vrijeme_od'];
		$vrijeme_do = $row ['vrijeme_do'];
		$vrijeme_trenutno = date ("d-m-Y H:i");
		
		$vrijeme_od_str = strtotime($vrijeme_od );
		$vrijeme_do_str = strtotime($vrijeme_do );
		$vrijeme_trenutno_str = strtotime($vrijeme_trenutno );
		
		$vrijeme_od_ispis = date ("d-m-Y H:i", $vrijeme_od_str);
		$vrijeme_do_ispis = date ("d-m-Y H:i", $vrijeme_do_str);
		$vrijeme_trenutno_ispis = date ("d-m-Y H:i",$vrijeme_trenutno_str);
		
		
		if (  $vrijeme_od_str <= $vrijeme_trenutno_str && $vrijeme_trenutno_str < $vrijeme_do_str)
		
		{
			
			
			echo'<script language="Javascript" type="text/javascript"> 
			document.location.href="streaming_da.php" 
			</script>';
			

			
		}
		
		else 
		{ 
			echo'<script language="Javascript" type="text/javascript"> 
			document.location.href="streaming_ne.php"
			</script>';
		}
	
		
	            }

		
	
	?>

??? kaj ???

joj, deca deca

stringovi se ne uspoređuju sa jednako u MySQL-u, već sa LIKE

probaj ovak:

$provjera = mysql_query (" SELECT * FROM termin  WHERE  korisnik LIKE  '%$kor_ime%' ") or die ("nije izvršena provjera u bazi");

% je wildchar i označava da se tu može nalazit bilo kaj, na primjer, ak je $kor_ime = ‘Ana’ onda on gleda i IvAna i BanAna … i sve ostalo kaj ima xxyyzzAna, ista stvar je i s drugim, ak je $kor_ime = ‘Ana’ onda se gleda sve gdje je Anaxxyyzz, kao Anamaria, Anakonda, Ana-Marija…

Sve radi super ali samo za prvi redak u tablici.Ove ispod uopće ne doživljava.
Pokušao sam staviti LIMIT5 u mysql query,ali ništa.
Ako netko želi pogledati stranicu na onom linku može se logirati sa ime:qwe,lozinka:asd ili ime:asd,lozinka:yxc da se izbjegne proces registracije i odmah pristupi toj stranici.

Ivane…hvala na brzom odgovoru.
Dali tu while petlju podrazumjevaš nešto ovako što sam već napravio.
Pokušao sam i sa assoc umjesto array,ali opet isto.

[quote=“Tomislav2911”]??? kaj ???

joj, deca deca

stringovi se ne uspoređuju sa jednako u MySQL-u, već sa LIKE

probaj ovak:

$provjera = mysql_query (" SELECT * FROM termin  WHERE  korisnik LIKE  '%$kor_ime%' ") or die ("nije izvršena provjera u bazi");

% je wildchar i označava da se tu može nalazit bilo kaj, na primjer, ak je $kor_ime = ‘Ana’ onda on gleda i IvAna i BanAna … i sve ostalo kaj ima xxyyzzAna, ista stvar je i s drugim, ak je $kor_ime = ‘Ana’ onda se gleda sve gdje je Anaxxyyzz, kao Anamaria, Anakonda, Ana-Marija…[/quote]

Na žalost i na taj način opet dobijem istu stvar,hvala!

100% ti mora bit LIKE, to sam siguran

probaj si pogledat preko nekakvog ispisa kaj ti sve vrati (ili u phpMyAdmin ukucaj ovaj upit sa nekim korisničkim imenom), možda ti ovaj IF uvijet izbaci neke zapise pa se niti ne ispišu

[quote=“Tomislav2911”]100% ti mora bit LIKE, to sam siguran

probaj si pogledat preko nekakvog ispisa kaj ti sve vrati (ili u phpMyAdmin ukucaj ovaj upit sa nekim korisničkim imenom), možda ti ovaj IF uvijet izbaci neke zapise pa se niti ne ispišu[/quote]

Imam ispis,svaki novi rezervirani termin ispiše se za tog korisnika u HTML
tablici.Sada sam ostavio na LIKE.Što se tiče if uvjeta,on radi ,ali samo za
prvog korisnika,to je najzanimljivije.
Ako je termin korisnika rezerviran u intervalu sadašnjeg vremena, otvara se
stranica za streaming(za sada samo slika),ako nije, ispisuje se
poruka’Trenutno vrijeme nije u intervalu kojega ste rezervirali’.To su te
stranice streaming_da.php i streaming_ne.php.

Kada je na vrhu tablice u bazi termin sa ispunjenim uvjetom,otvara se
stranica za streaming,zatim dodam još jedan termin koji nije u intervalu i
streaming je zabranjen,i kada opet dodam termin koji ispunjava uvjet ,ili
izbrišem predhodni koji ga ne ispunjava,opet je dozvoljen.
Znači radi samo sa najgornjim podatkom pod tim korisničkim imenom u tablici.
Mislim da je stvar negdje u selekciji ali gdje ???

provjeri sa

I ako ispiše više od 1 onda je sve ok, ako nije onda je greška negdje u dohvaćanju podatka.

Zatim bolje uredi ovaj uvijet iako bi trebao biti dobar ali odvoji sa zagradama jer uvijeti su opaka stvar i treba ih svaćati ozbiljno.:vipme:

[quote=“gorrc”]provjeri sa

I ako ispiše više od 1 onda je sve ok, ako nije onda je greška negdje u dohvaćanju podatka.

Zatim bolje uredi ovaj uvijet iako bi trebao biti dobar ali odvoji sa zagradama jer uvijeti su opaka stvar i treba ih svaćati ozbiljno.:vipme:

sorry,ne kužim di treba upisati <span class="syntaxdefault">print_r</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">mysql_num_row</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$provjera</span><span class="syntaxkeyword">))&nbsp;</span><span class="syntaxdefault"></span>
i dali točno u toj sintaksi…još uvijek sam početnik.
Dali to da pišem na onoj stranici di rezerviram termin i gdje se termini ispisuju u tablice??? jer na ovoj priloženoj nema smisla pošto je to samo redirekcijska stranica na jednu od ove dvije u ovisnosti o uvjetu.

mysql_num_rows:)

odmah ispod pozivanja querija na bazu

http://php.net/manual/en/function.mysql-num-rows.php

[quote=“dpolo”]Imam while petlju u ovom obliku…evo koda cijele stranice…

<?php
 
$kor_ime =  $_POST ["kor_ime"];

mysql_connect ("localhost","root","303217" )  or die ("Veza nije uspostavljena!");
mysql_select_db  ( "baza1") or die ("Baza nije pronađena");

$provjera = mysql_query (" SELECT  * FROM termin  WHERE  korisnik =  '".$kor_ime."'   ") or die ("nije izvršena provjera u bazi");
while ( $row = mysql_fetch_array  ($provjera))
	{
		$kor_ime=$row ['korisnik'];
		$vrijeme_od = $row ['vrijeme_od'];
		$vrijeme_do = $row ['vrijeme_do'];
		$vrijeme_trenutno = date ("d-m-Y H:i");
		
		$vrijeme_od_str = strtotime($vrijeme_od );
		$vrijeme_do_str = strtotime($vrijeme_do );
		$vrijeme_trenutno_str = strtotime($vrijeme_trenutno );
		
		$vrijeme_od_ispis = date ("d-m-Y H:i", $vrijeme_od_str);
		$vrijeme_do_ispis = date ("d-m-Y H:i", $vrijeme_do_str);
		$vrijeme_trenutno_ispis = date ("d-m-Y H:i",$vrijeme_trenutno_str);
		
		
		if (  $vrijeme_od_str <= $vrijeme_trenutno_str && $vrijeme_trenutno_str < $vrijeme_do_str)
		
		{
			
			
			echo'<script language="Javascript" type="text/javascript"> 
			document.location.href="streaming_da.php" 
			</script>';
			

			
		}
		
		else 
		{ 
			echo'<script language="Javascript" type="text/javascript"> 
			document.location.href="streaming_ne.php"
			</script>';
		}
	
		
	            }

		
	
	?>

[/quote]

Ovo mi sve izgleda uredu.

Mozes, osim broja redaka, provjeriti da li je sve sa query-jem proslo ok:

if ($provjera !== FALSE) {
while …
}
else {
echo ‘Nije ok’;
}

Osim toga, mozes provjeriti direkt na bazi sta dobijes kao rezultat query-ja:

echo " SELECT * FROM termin WHERE korisnik = ‘".$kor_ime."’ ";
exit;

… pa odes u phpmyadmin i tamo izvrsis ispis ovog query-ja. Vidi sta tamo dobijes, pa javi.

Mozes provjeriti da li imas 5 zapisa u bazi

Strinovi se usporedjuju sa “=”. LIKE trazi pattern (uzorak) i opcenito je sporiji od klasicne usporedbe sa operatorom jednako.

Probaj izvrsiti npr. SELECT ‘a’ = ‘a’ … trebao bi dobiti 1 (true).

[quote=“gorrc”]mysql_num_rows:)

odmah ispod pozivanja querija na bazu

http://php.net/manual/en/function.mysql-num-rows.php
[/quote]

Aha,sad sam skužio šta misliš…da ispišem broj termina pod tim korisničkim imenom u bazi:

Znači ovo:

ili ovo:

i to je ok.
Dodavanjem i brisanjem termina ispisuje se točan broj koliko je termina rezervirano po korisniku.

Znači korisnik xy ima u bazi 3 termina,ispisuje se 3,izbrišem jednog i ostane 2…

Hmmm… :zbunj:

lol tomislave ne trabunjaj gluposti :smiley: stringovi se itekako uspoređuju sa znakom jednakosti =
LIKE je nešto drugo :slight_smile: neću ni pomisliti da neko radi ovakav upit za provjeru korisničkog imena i zaporke
ONTOPIC:
dali ti imaš opće više redova u bazi sa istim userom
ako imaš php my admin probaj tamo napravit upit direktno
naprimjer
SELECT * FROM termin WHERE korisnik = 'Ana’
pa vidi što ti vraća

[quote=“Kečko”]lol tomislave ne trabunjaj gluposti :smiley: stringovi se itekako uspoređuju sa znakom jednakosti =
LIKE je nešto drugo :slight_smile: neću ni pomisliti da neko radi ovakav upit za provjeru korisničkog imena i zaporke
ONTOPIC:
dali ti imaš opće više redova u bazi sa istim userom
ako imaš php my admin probaj tamo napravit upit direktno
naprimjer
SELECT * FROM termin WHERE korisnik = 'Ana’
pa vidi što ti vraća[/quote]

evo jesam…ako je npr Ana rezervirala 5 termina,prikaže se tih 5,kada izbriše jedan od njih, onda se ispisuju preostala 4,to je ok

stavi unutar while petlje ovo

echo “$vrijeme_od_str <= $vrijeme_trenutno_str && $vrijeme_trenutno_str < $vrijeme_do_st”

pa da vidimo šta ispiše.

[quote=“gorrc”]stavi unutar while petlje ovo

echo “$vrijeme_od_str <= $vrijeme_trenutno_str && $vrijeme_trenutno_str < $vrijeme_do_st”

pa da vidimo šta ispiše.[/quote]

Aha…vjerovatno misliš dali se te varijable,odnosno njihove vrijednosti mogu ispisati.
Njihove vrijednosti se također točno ispisuju u tablici ali na predhodnoj stranici.Evo te stranice:

Klikom na gumb ‘Ulaz’ se tek otvara ova stranica koju sam prije prikazao(“streaming_redirekcija.php”).
Na ovoj stranici se nakon rezervacije uredno prikazuju datumi i vrijeme koje korisnik odabere i ispisuju u tablicu.

To je baš najčudnije,izgleda sve ok,čak i radi,ali samo sa prvim podatkom u bazi.

[quote=“dpolo”]Aha…vjerovatno misliš dali se te varijable,odnosno njihove vrijednosti mogu ispisati.
Njihove vrijednosti se također točno ispisuju u tablici ali na predhodnoj stranici.Evo te stranice:
[/quote]

Ne mislio sam da ispišeš te vrijednosti u problematičnoj petlji.
Možda je problem u tim vrijednostima.
Dali se petlja izvrši 5 puta ako mysql_num_rows pokaže 5?
Ako da onda ispiši si te vrijednosti možda nešto s njima nije u redu.

U gornjem primjeru kojeg si postao nigdje ne uspoređuješ vrijednosti koje sam naveo a veliš da radi a u ovom problematičnom gdje ne radi ih uspoređuješ i tamo ih ispiši i provjeri dali je sve ispravno.

[quote=“gorrc”]stavi unutar while petlje ovo

echo “$vrijeme_od_str <= $vrijeme_trenutno_str && $vrijeme_trenutno_str < $vrijeme_do_st”

pa da vidimo šta ispiše.[/quote]

Dobijem ovakav ispis :

1265058840 <= 1265750040 && 1265750040 < 1265062440

što bi značilo u normalnom vremenskom prikazu zapisanom u bazi :

01-02-2010 22:14<=09-02-2010 22:14 && 09-02-2010 22:14 < 01-02-2010 23:14

i u tom slučaju uvjet za pristup sljedećoj stranici nije ispunjen

i tako za svaki rezerviran termin,to se isto čini uredu.
ufff,za poludit…već dva cijela dana se borim s ovim…


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja