View Full Version : PHP i SQL upit problem sa $_GET
.:Phre/\kBox:.
26-11-2005, 19:36
Problem je što neće prikazati Query sa 2 $_GET stringova, a sa 1 $_GET radi.
Slovo i kategorija u bazi postavljeni!
//// OVO RADI
URL UNOS: rjecnik.php?kat=1
$kat = $_GET['kat'];
$result = mysql_query("SELECT * FROM rec_rjecnik WHERE kat=$kat ORDER BY 'rijec' ASC", $db);
////
//// OVO NE RADI, VELI DA JE GRESKA U QUERY STRINGU???
URL UNOS: rjecnik.php?kat=1&slovo=a
$kat = $_GET['kat'];
$slovo = $_GET['slovo'];
$result = mysql_query("SELECT * FROM rec_rjecnik WHERE kat=$kat AND slovo=$slovo ORDER BY 'rijec' ASC", $db);
////
//// echo naredba
echo "<TABLE>";
echo"<TR><TD><B>Riječ</B><TD><B>Opis</B><TD><B>Vidi</B></TR>";
while ($myrow = mysql_fetch_array($result))
{
echo "<TR><TD BGCOLOR='#CCCCCC'>";
echo $myrow["rijec"];
echo "<TD>";
echo $myrow["opis"];
echo "<TD>";
echo $myrow["vidi"];
echo "<TD>";
}
echo "</TABLE>";////
Dakle, kako istovremeno koristiti $_GET na dvije varijable?
administrator
26-11-2005, 19:57
Večer,
par savjeta prije nego se "bacimo" na problem...
Kada radite sa varijablama koje koristite kasnije u SQL upitima preporučljivo ih je "očistiti" od potencijalnih i neželjenih podataka i to na način:
umjesto:
$kat = $_GET['kat'];
koristite:
$kat = $_GET[addslashes(mysql_real_escape_string('kat'))];
zatim nikada nemojte ubacivati varijable u query bez navodnika:
Vaš upit:
$result = mysql_query("SELECT * FROM rec_rjecnik WHERE kat=$kat ORDER BY 'rijec' ASC", $db);
Naš upit:
$result = mysql_query("SELECT * FROM rec_rjecnik WHERE kat='$kat' ORDER BY 'rijec' ASC", $db);
znači stavili smo pod navodnike '$kat'
I konačno Vaš problem...
$result = mysql_query("SELECT * FROM rec_rjecnik WHERE kat = '$kat'
AND slovo = '$slovo'
ORDER BY rijec ASC", $db);
to bi trebalo raditi.
pozdrav, SC
administrator
26-11-2005, 19:59
i ako ne radi, koju Vam grešku javlja to nam nedostaje.
.:Phre/\kBox:.
26-11-2005, 20:01
Puno puno hvala na pomoći. Javit ću ako negdje bude frka. Hvala!
.:Phre/\kBox:.
26-11-2005, 20:15
Hm, hm...
baš i ne ili?
Evo konačnih rezultata:
Warning: mysql_real_escape_string(): Access denied for user: 'phreakbo@localhost' (Using password: NO) in /home/.../fetch.php on line 3
Warning: mysql_real_escape_string(): A link to the server could not be established in /home/.../fetch.php on line 3
Warning: mysql_real_escape_string(): Access denied for user: 'phreakbo@localhost' (Using password: NO) in /home/.../fetch.php on line 4
Warning: mysql_real_escape_string(): A link to the server could not be established in /home/.../fetch.php on line 4
Linija 3 i 4 su:
$kat = $_GET[addslashes(mysql_real_escape_string('kat'))];
$slovo = $_GET[addslashes(mysql_real_escape_string('slovo'))];
Kompletni kod:
<?
include "config.php";
$kat = $_GET[addslashes(mysql_real_escape_string('kat'))];
$slovo = $_GET[addslashes(mysql_real_escape_string('slovo'))];
$db = mysql_connect($host, $user, $pass);
mysql_select_db($base, $db);
$result = mysql_query("SELECT * FROM rec_rjecnik WHERE kat='$kat' AND slovo='$slovo' ORDER BY rijec ASC", $db);
echo "<TABLE>";
echo"<TR><TD><B>Riječ</B><TD><B>Opis</B><TD><B>Vidi</B></TR>";
while ($myrow = mysql_fetch_array($result))
{
echo "<TR><TD BGCOLOR='#CCCCCC'>";
echo $myrow["rijec"];
echo "<TD>";
echo $myrow["opis"];
echo "<TD>";
echo $myrow["vidi"];
echo "<TD>";
}
echo "</TABLE>";
?>
Ovaj kod sam stavio i ovako:
$result = mysql_query("SELECT * FROM rec_rjecnik WHERE kat='$kat'
AND slovo='$slovo'
ORDER BY rijec ASC", $db);
i uporno javlja mysql_real_escape_string(); grešku? Password za SQL je unesen!
administrator
26-11-2005, 20:23
molimo Vas točan link na naš mail + lozinka i password od cpanela da to sve vidimo.
vratite kod na
$kat = $_GET['kat'];
itd...
a mi cemo vidjeti sto je sa ostalim.
pozdrav, SC
.:Phre/\kBox:.
26-11-2005, 20:41
Proradilo je!:) Nije mi jasno kako ali vjerojatno string '' nisam stavio, sad je najedanput proradio!
Konačan kod:
<?
include "config.php";
$kat = $_GET['kat'];
$slovo = $_GET['slovo'];
$db = mysql_connect($host, $user, $pass);
mysql_select_db($base, $db);
$result = mysql_query("SELECT * FROM rec_rjecnik WHERE kat='$kat'
AND slovo='$slovo'
ORDER BY rijec ASC", $db);
echo "<TABLE>";
echo"<TR><TD><B>Riječ</B><TD><B>Opis</B><TD><B>Vidi</B></TR>";
while ($myrow = mysql_fetch_array($result))
{
echo "<TR><TD BGCOLOR='#CCCCCC'>";
echo $myrow["rijec"];
echo "<TD>";
echo $myrow["opis"];
echo "<TD>";
echo $myrow["vidi"];
echo "<TD>";
}
echo "</TABLE>";
?>
LINKOVI:
SLOVO A, KATEGORIJA 3
http://www.phreakbox.com/portal/r_elektronika/Rjecnik/fetch.php?slovo=a&kat=3
SLOVO C, KATEGORIJA 1
http://www.phreakbox.com/portal/r_elektronika/Rjecnik/fetch.php?slovo=a&kat=3
i zaista rade kako spada.
administrator
26-11-2005, 20:43
odlično :)
čujemo se ako budete imali problema.
pozdrav, SC
.:Phre/\kBox:.
26-11-2005, 20:58
Sve radi.
Hvala puno Shopcent na podršci.
.:Phre/\kBox:.
26-11-2005, 22:25
Opet ja imam problem. Evo o čemu se radi: :)
Upitom u $rijec i odabirom kategorije $kat na kraju sa Submit treba prikazati rezultate pretrage. Pretrazivac.
FORM:
$rijec - input type: text
$kat - input type: list/menu
BAZA:
slovo, kat, rijec, opis
PROBLEM:
Kada unesem upit u $rijec i odaberem kategoriju $kat te posaljem _POST Submit, na kraju mi prikaze SVE REZULTATE umjesto samo zadane od $rijec upita. Dakle radi kao $fetch_all_array ZA SVE UPITE a ne ZA $rijec!
SOURCE KOD:
<HTML>
<?php
include "config.php";
$kat = $_POST['kat'];
$rijec = $_POST['rijec'];
if ($rijec)
{
$sql="SELECT * FROM rec_rjecnik
WHERE kat='$kat'
LIKE rijec='$rijec'
ORDER BY slovo ASC";
$db = mysql_connect($host, $user, $pass);
mysql_select_db($base, $db);
$result = mysql_query($sql,$db);
echo"<TR><TD><B>Riječ</B><TD><B>Opis</B><TD><B>Vidi</B></TR>";
while ($myrow = mysql_fetch_array($result))
{
echo "<TR><TD BGCOLOR='#CCCCCC'>";
echo $myrow['$rijec'];
echo "<TD>";
echo $myrow["opis"];
echo "<TD>";
echo $myrow["vidi"];
echo "<TD>";
}
echo "</TABLE>";
}
else
{
?>
<form method="POST" action="<?php $PHP_SELF ?>">
<table border="2" cellspacing="2">
<tr><td>Unesite riječ:</td>
<td>Kategorija:</td></tr>
<tr>
<td><input type="text" name="rijec" size="28"></td>
<td><select name="kat" id="kat">
<option value="1">Elektronika</option>
<option value="2">Phreaking</option>
<option value="3">Računala</option>
<option value="4">Multimedija</option>
<option value="5">Komunikacije</option>
<option value="6">Biz</option>
</select></td>
</tr>
</table>
<p><input type="submit" value="Pretraga" name="submit"><input type="reset" value="Izbriši"
></p>
</form>
<?php
}
?>
</HTML>
administrator
26-11-2005, 23:16
postavio sam rješenje na ovaj link:
http://www.phreakbox.com/portal/r_elektronika/Rjecnik/shopcentar_test.php
upit je test a kategorija Elektornika.
"Greška" je bila u samom upitu LIKE naime LIKE govori upitu da prikaže sve rezultate koji sadržavaju riječ test i naravno da će onda prikazati sve koji to zadovoljavaju.
Kod je prepravljen u:
$sql="SELECT * FROM rec_rjecnik
WHERE kat='$kat' AND rijec='$rijec'
ORDER BY slovo ASC";
SAVJET:
dobro proučite naredbe AND, OR, LIKE itd.
npr ako imate dva OR zaredom je velika razlika ako koristite dva AND operatora a LIKE pogotovo.
Također trebate jako paziti i na ZAGRADE npr
(upit1 AND upit2) or upit3 nije isto kao i upit1 AND upit2 OR upit3
ovo je najbolje pročitati u literaturi a odmah nakon toga napraviti test.
pozdrav, SC
.:Phre/\kBox:.
27-11-2005, 15:04
Puno hvala na pomoći. Osobno sam sam zeznuo jer sam mislio da će LIKE pronaći sve riječi ali nisam obration pozornost na AND.
Hvala Vam još jednom i idem dalje radit. Pozdrav
P.S. Dugujem Vam pivo i kavu! ;)
I još nešto... forum se malo umrtvio od kad je postavljen vB? Sve manje je aktivnih korisnika. Možda treba postaviti koji novi skin za vB?
administrator
27-11-2005, 15:35
:) sve ok!
istina ima manje, no ovo je specijalizirani forum.
kada bi bilo više ovkavih pitanja i problema i sam forum bi bio posječeniji.
pozdrav, SC
vBulletin® v3.8.4, Copyright ©2000-2012, Jelsoft Enterprises Ltd.