Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 7 odgovora
  • 2.458 pregleda

Najnovija ↓

Promenljiva u nisci 08.08.2010. u 21:38 · pre 197 meseci
izmenjeno 1 put, poslednji put Goran Rakić 08.08.2010. u 21:57
  1. Goran Rakić08.08.2010. u 21:57zapis iz teksta poruke
#1
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.
Potpis
..::Photography::..
Re: Query problem, ne znam zasto 08.08.2010. u 21:48 · pre 197 meseci #2
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;

Re: Query problem, ne znam zasto 08.08.2010. u 21:57 · pre 197 meseci #3
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.
Potpis
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
Re: Query problem, ne znam zasto 08.08.2010. u 21:58 · pre 197 meseci #4
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.
Potpis
..::Photography::..
Re: Promenljiva u nisci 08.08.2010. u 22:10 · pre 197 meseci
izmenjeno 1 put, poslednji put Goran Rakić 08.08.2010. u 22:22
  1. Goran Rakić08.08.2010. u 22:22zapis iz teksta poruke
#5
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;.
Potpis
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
Re: Promenljiva u nisci 08.08.2010. u 22:21 · pre 197 meseci #6
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' ");

Potpis
..::Photography::..
Re: Promenljiva u nisci 08.08.2010. u 22:24 · pre 197 meseci #7
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.
Potpis
http://sr.libreoffice.org — slobodan kancelarijski paket, obrada teksta, tablice,
prezentacije, legalno bez troškova licenciranja
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme