TestMax.dk Paster
  • Forside
  • Print
  • Bookmark
  • Kontakt
  • SiteMap


infobox infobox
 

speciel mysql_query - kan ikk få det til at virker

04-03-2009 09:35:01
 
 
Muligheder (Anmeld)
Skrevet af siphon
Kliks 363
Kategori PHP Generelt
Hej folkens :D

jeg sidder lige til grundforløbs prøve som web intergrator, så hurtig svar ville bare være alt for FEDT :D..

Mit problem lyder på at jeg vil gerne have en slags ELSE regl som vi kender dem fra IF statements inde i min SQL query.
jeg har ledt rundt på php.net kunne ikke rigtigt finde noget som jeg fandt oplysende på dette punkt :D..

Dette er hvad jeg har forsøgt indtil nu:


$query = sprintf("SELECT * FROM sites, sub_sites WHERE sites.site_name = '%s' OR sub_sites.site_name = '%s'",
mysql_real_escape_string($param),
mysql_real_escape_string($param));

Det jeg for ud af denne query er at alle mine sub_sites rows bliver udvalgt sammen med den ene sites row som nu passer - ELLER omvendt!
Alt efter hvad jeg self sætter $param til.

Håber der er nogle som kan hjælpe mig med en løsning ! ;D

**REDIGERET**
Filen der er vedhæftet viser resultat af queryen når jeg sætter $param til 'forside'.
www.game-community.dk/job
www.game-community.dk/tumblelog/
 
infobox infobox

infobox infobox
  Filer som er vedhæftet denne tråd  
 
Fil navn: Fil størrelse
Billede_1.png 36 KB
 
infobox infobox


infobox infobox
 
#1Znow(Anmeld) 04-03-2009 10:53:50
 
 
Hey dér.

Sidder selv på hovedforløbet på Web-Integrator ;)


Er du ikke flink at smide al din kode i en pastebin, så er det nemmere at finde eventuelle fejl....

og hvad er det lige "sprintf" skal bruges til?

Der er styr på lortet!
Eller var det lort på styret?...
 
infobox infobox

infobox infobox
 
#2siphon(Anmeld) 04-03-2009 11:01:59
 
 
hey Znow :P

Det er nu en dejlig nem og kort uddannelse :P

Ohm har lavet mig en løsning selv som funger :D.. Poster den nederst i comment :D

Jeg bruger sprintf() sådan jeg kan bruge mysql_real_escape_string i mine query's således at folk ikke har mulighed for at sende farlig materiale gennem min $_GET til min database :D .. Ved ikke hvorvidt om det er den korrekte metode eller den optimale, det er however hvad jeg har fundet functionsdygtigt :D

function find_site($param)
       {
       db_connect();
       $sites_query = sprintf("SELECT * FROM sites
                                          WHERE sites.site_name = '%s'",
                                          mysql_real_escape_string($param));
       $sites_result = mysql_query($sites_query);
       $sites_row = mysql_fetch_array($sites_result);
       
       $subsites_query = sprintf("SELECT * FROM sub_sites
                                          WHERE sub_sites.subsite_name = '%s'",
                                          mysql_real_escape_string($param));
       $subsites_result = mysql_query($subsites_query);
       $subsites_row = mysql_fetch_array($subsites_result);
       if ($sites_row['site_name'] != $param)
              {
                     $query = $subsites_query;
              }else
              {
                     $query = $sites_query;
              }
       $result = mysql_query($query);
       $row = mysql_fetch_array($result);
       return $row;
       }
www.game-community.dk/job
www.game-community.dk/tumblelog/
 
infobox infobox

infobox infobox
 
#3Znow(Anmeld) 04-03-2009 11:22:03
 
 
Du kan ikke bruge "sprintf" i en mysql_query( " " )... svjv ihvertfald. Der er andre måder at forhindre "SQL injection" angreb på.

Du kan heller ikke bruge mysql_real_escape_string($param)) inde i en mysql_query, da en mysql_query en kommando til din database hvor den beder om et udtræk, en ændring, sletning eller tilføjelse osv.
Der er styr på lortet!
Eller var det lort på styret?...
 
infobox infobox

infobox infobox
 
#4siphon(Anmeld) 04-03-2009 11:40:47
 
 
Znow, det er ikke korrekt det du skriver, den før viste function virker 100%. Du kan sagtens bruger det.

Forklaring:
sprinf<-- giver dig mulighed for at udskifte(i mit tilfælde) %s med en efterfulgt værdi (www.php.net/sprintf)
der efter sætter jeg min ønskede værdi(som skal skiftes ud med %s) i en mysql_real_escape_string.

Opstilling:
For at få det til at virke skal du opstille det således at alle sprintf reglerne er overholdt.

ex.
$query = sprintf("SELECT * FROM '%s'", mysql_real_escape_string('table navn'));


Det som der sker rent teknisk er at når $query bliver kaldt af php ser den det er en sprintf, så leder den efter en commando som i dette tilfælde er %s(hvilket betyder min værdi er en string). Nu går den ned og finder min værdi som bliver sat via et , efter jeg har sluttet min query, der finder den så en ny commando der er mysql_real_escape_string den udfører den så og derefter putter værdien i %s plads og bruger $query variablen til din forespørgelse ! :D

www.game-community.dk/job
www.game-community.dk/tumblelog/
 
infobox infobox

infobox infobox
 
#5Znow(Anmeld) 04-03-2009 11:47:16
 
 
Hvad er så dit egentlige problem?
Der er styr på lortet!
Eller var det lort på styret?...
 
infobox infobox

infobox infobox
 
#6siphon(Anmeld) 04-03-2009 11:51:22
 
 
som sagt jeg løste selv problemet se #2 ... Mit problem lå i måde jeg havde opstillet query'en altså fandt ud af at jeg ikke kunne sige at:

SELECT * FROM table1, table2 WHERE table1.row1 = etellerandet OR table2.row2 = etellerandet

i den sammenhæng at jeg ville enten ha table1.row1 eller table2.row2 alt efter hvorfor en af dem der stod etellerandet i ;D

www.game-community.dk/job
www.game-community.dk/tumblelog/
 
infobox infobox

infobox infobox
 
#7erle(Anmeld) 04-03-2009 13:00:36
 
 
Jeg tror ikke det er muligt at kunne læse fra 2 databser på engang.

Men ellers ville det være "OR" du skulle bruge i den situation.
 
infobox infobox

Påmindelse ved nyt svar

Ved at tilmelde dig automatisk påmindelse, modtager du en email så snart denne tråd bliver besvaret, dog sender vi kun en mail til dig, også selvom der er kommet flere svar, simpelthen for at spare dig for spam i din indbakke.


infobox infobox
  Svar på tråden  
   
 
 
infobox infobox

infobox infobox
  Læs dette før du sender dit indlæg!  
 
Ved tryk på send knappen accepterer du vores regelsæt som kan læses her
Praktiske informationer
Type Eksempel Resultat
Fed [b]din tekst[/b] din tekst
Kursiv [k]din tekst[/k] din tekst
Understreg [u]din tekst[/u] din tekst
Kode felt [code]din tekst[/code]
din tekst
infobox infobox