[ Okram_marko @ 08.08.2010. 20:38 ] @
Pozdravljam,


pravim query nad mysql bazom i sve radi ako rucno upisem WHERE ip = "192.168.0.1"
A nece da radi ako umjesto "192.168.0.1" stavim variablu.

Evo primjer:

<?php
$ip = "234";

$jacina = mysql_query('SELECT signal FROM `signali` WHERE ip_adresa = "$ip" ');
$array_jacina = mysql_fetch_array($jacina);

echo $array_jacina[0];

?>

A ako stavim

$jacina = mysql_query('SELECT signal FROM `signali` WHERE ip_adresa = "234" ');

onda radi.

Ma totalno sam pobudalio, vise ne znam sta i kako da stavim da bi radilo. Daj neka netko pomogne.

[Ovu poruku je menjao Goran Rakić dana 08.08.2010. u 21:57 GMT+1]
[ strutter.poison @ 08.08.2010. 20:48 ] @
Code:
mysql_query("SELECT signal FROM `signali` WHERE ip_adresa = $ip");
mysql_query('SELECT signal FROM `signali` WHERE ip_adresa = '.$ip);


Ovde vazi nekoliko pravila od kojih zavisi da li ce biti uzeta vrednost stringa ili ime stringa. Najbolje da probas sam par varijanti u praznom php fajlu i vidis sta dobijas kada uradis echo. ;)

Recimo:
Code:
$sql = 'SELECT signal FROM `signali` WHERE ip_adresa = "$ip" ';
echo $sql;

[ Goran Rakić @ 08.08.2010. 20:57 ] @
Dvostruki navodnici prepoznaju promenljive unutar niske i zamenjuju je njenom vrednošću. Pri tome za $niz['kljuc'] može da se koristi $niz[kljuc] za pristup članovima niza. Jednostruki navodnici to ne rade. Za spajanje dve niske (ili niske i promenljive) koristi se operator nastavljanja - tačka.
[ Okram_marko @ 08.08.2010. 20:58 ] @
Pozdravljam!

Hvala velika na brzom odgovoru.
Evo, probao sam i ova verzija: mysql_query('SELECT signal FROM `signali` WHERE ip_adresa = '.$ip); radi, ALI SAMO U SLUČAJU
ako je $ip = '234';

Ne radi ako je $ip = '234.175.9.28';
ili npr 192.168.0.1.

Mislim da mu smetaju tačke između brojeva.

Ovo me totalno izludi. Svašta sam nešto pokušao ali nikako da proradi.
[ Goran Rakić @ 08.08.2010. 21:10 ] @
Nauči SQL, potom osnove programiranja i načina kako se niske predstavljaju u PHP-u.

Ako je polje ip_adresa u bazi numeričko onda ne može da sadrži tačke. Ako je polje tekstualno, onda u upitu moraš da vrednost obuhvatiš navodnicima (bilo jednostrukim, bilo dvostrukim, kako ti je već zgodno).

Kada postoji linija $ip = '192.168.0.1'; ona kaže da je vrednost promenljive $ip 192.168.0.1 (navodnici PHP-u kažu da počinje i završava niska, nisu deo niske). Kako u nisci 192.168.0.1 nema nikakvih promenljivih rezultat je isti i da smo napisali $ip = "192.168.0.1";. Ponoviću, razlika između dvostrukih i jednostrukih navodnika za oznaku početka/kraja niske je što dvostruki svaku promenljivu koju prepoznaju unutar zamenjuju njenom vrednosti.

Sada treba da napravimo nisku koju će PHP da pošalje MySQL-u kao upit. Polje je tekstualno, pa ga obuhvatamo navodnicima. MySQL ne razlikuje jednostruke/dvostruke navodnike. Taj upit koji se šalje pomoću funkcije mysql_query serveru treba da glasi SELECT signal FROM signali WHERE ip_adresa='192.168.0.1'. Mogu da dodam razmake između delova upita, osim unutar ovih jednostrukih navodnika. ' 192... (razmak posle navodnika) kaže MySQL-u da traži slog sa atributom ip_adresa jednak razmak 1 9 2, a takav verovatno ne postoji.

Da bismo to postigli, koristeći dvostruke navodnike ubacićemo vrednost promenljive $ip u njenu mesto u tom upitu.
Code (php):

mysql_query("SELECT signal FROM signali WHERE ip_adresa='$ip' ");
 


Mogli smo da koristimo i jednostruke navodnike sa spajanjem tačkom, ali to u ovom slučaju izgleda ružnije.
Code (php):

mysql_query('SELECT signal FROM signali WHERE ip_adresa=\'' . $ip . '\' '); // ovde su tri znaka \ pa ' i ponovo '
 


Šta je sada ovo \'? Pa jednostavno, treba nam taj jednostruki navodnik u rezultirajućoj nisci. Kako ovde jednostruki navodnik označava početak i kraj niske, treba nam način da kažemo kako ovaj navodnik je samo navodnik, a ne oznaka za kraj. Zato koristimo izbegavanje (engl. escape) znakom \. Nakon toga sledi kraj niske, pa nastavljanje za vrednost promenljive $ip (192.168.0.1), pa početak treće niske koja daje onaj jednostruki navodnik iza ip adrese koji nam treba u SQL upitu. (Primeti da ne smem da dodam razmak između \' i ' jer bi onda MySQL tražio vrednost razmak pa 192..., a meni treba bez razmaka!)

Ako bismo u SQL upitu koristili dvostruke navodnike umesto jednostrukih, ne treba nam izbegavanje, pa to izgleda:
Code (php):

$sql = 'SELECT signal FROM signali WHERE ip_adresa= "'. $ip . '" ';
 


Sada će niska upita glasiti SELECT signal from signali WHERE ip_adresa="192.168.0.1" što možeš i da proveriš jednostavnim echo $sql;.


[Ovu poruku je menjao Goran Rakić dana 08.08.2010. u 22:22 GMT+1]
[ Okram_marko @ 08.08.2010. 21:21 ] @
Pozdravljam!!

VEEELIKAA hvala!

Probavao sam svakakve kombinacije i nije pomagalo Ali stvarno moram uzeti kakvu dobru (ne jednu več više) knjigu.
Ja se zahvaljujem i na jako dobrom objašnjenju. Ove će biti od pomoći!

U bazi sam postavio polje IP adrese na text.

Hvala velika još jednom!

Ovo radi bez problema:

Code:


$ip = '192.168.0.1';

mysql_query("SELECT signal FROM signali WHERE ip_adresa='$ip' ");

[ Goran Rakić @ 08.08.2010. 21:24 ] @
Bolje polje stavi na tip VARCHAR (niska promenljive dužine). Tip podataka TEXT služi za čuvanje višelinijskog teksta.

Korisno je IP adrese čuvati kao pozitivan celobrojni (tip INT UNSIGNED), pretvarajući tekstualnu reprezentaciju u numeričku i nazad pri ispisu MySQL funkcijama INET_ATON/INET_NTOA, ali kao početniku ne verujem da će ti i ovo smetati.