Som besökare på Hamsterpaj samtycker du till användandet av s.k. cookies för att förbättra din upplevelse hos oss. Jag förstår, ta bort denna ruta!
Annons

Behöver hjälp med php

Skapad av tok124, 2013-11-29 04:29 i Webbutveckling & Programmering

1 996
10 inlägg
1 poäng
tok124
Visningsbild
P 35 Hjälte 258 inlägg
0
Hej.

Jag håller på att göra en liten widget typ till min hemsida. den ska selecta column "displayid" från databasen. så jag ska altså skriva in ett namn så ska den selecta displayid från de namnet i databasen.

det funkar hur bra som hälst ända tills att jag söker på ett namn med denna ' symbol. vet inte vad fan den heter. men då får jag error

"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Battleplate'' at line 1"

jag tänkte att man kanske måste lägga till charset utf-8 nånstans som typ i html då skriver man ju <meta charset="utf-8">. vet inte om de är något sånt som saknas i mitt php script, eller om de är något som måste ändras i databasen.

men om jag skriver detta som en query i databasen:
SELECT displayid FROM item_template WHERE name="Lightning Emperor's Gauntlets"; då funkar det. men inte om jag gör de från hemsidan

Tillägg av tok124 2013-11-29 04:31

Här är en liten del av php scriptet. den delen som selectar från databasen

$result = mysql_query("SELECT displayid FROM item_template WHERE name='$_POST[test]'")
or die(mysql_error());

Är reklamen ivägen? Logga in eller registrera dig så försvinner den!

Klas-Kenny
Visningsbild
P 31 Växjö Hjälte 12 128 inlägg
1
Filtrera dina querys!
Det som händer nu är att när PHP klistrar in variabeln $_POST[test] i queryn så blir det ju
"SELECT displayid FROM item_template WHERE name='Lightning Emperor's Gauntlets' "
Citationstecknen slutar ju alltså då efter Emperor, sen kommer "s Gauntlets" utan några citationstecken, efter det ett nytt enkelcitationstecken, sen plötsligt slutar queryn. Blir inte särskilt korrekt SQL-kod av det inte.

Läs på lite om SQL-injections, just nu har du ett öppet hål rätt in i din databas så att vem som helst kan lyckas läsa ut alla lösenord (om du har sådana) eller dumpa hela databasen.

En början är att dra dit tex. mysql_real_escape_string() och/eller htmlentities() på sökorden innan du kör in fråga i databasen.
Dock måste du göra detsamma innan du lägger in orden i databasen från första början.

Rätt verktyg till rätt arbete - Makaroner äts med sked.

tok124
Visningsbild
P 35 Hjälte 258 inlägg
Trådskapare
0
Svar till Klas-Kenny [Gå till post]:
kan verkligen ingenting om php men jo jag vet att vem som hälst kan komma in och jag förstår att den slutar efter ' för bakom $_POST är de ju en sån och då slutar den såklart vid nästa. men hur förhindrar jag det? kan strunta i säkerheten just nu eftersom att den enda som har registrerat account just nu är jag så om någon vill hacka mig så varsegod :P men vill bara veta hur jag kan skriva för att den ska kunna hitta namn med '

som sagt. jag kan inte ett skit om php så var snäll och skriv exakt vad jag ska skriva typ. MySQL Language kan jag däremot och css och html. men är kass på php. jag hittade bara något php select script så koppierade jag det bara och ändrade databas inloggningen och sen ändrade jag columns och sånt.

btw har även en backup på databasen OM nu någon skulle hacka den men förstår inte varför man skulle vilja hacka den xD

Klas-Kenny
Visningsbild
P 31 Växjö Hjälte 12 128 inlägg
0

Svar till tok124 [Gå till post]:
Ändra till
$result = mysql_query("SELECT displayid FROM item_template WHERE name='mysql_real_escape_string($_POST[test])'")
or die(mysql_error());

Så kommer alla specialtecken att "escapeas", alltså det sätts ett backslash framför den. Så resultatet blir då
"SELECT displayid FROM item_template WHERE name='Lightning Emperor\'s Gauntlets'"

Vilket databasen kommer att tolka som "Lightning Emperor's Gauntlets" som du vill.

Rätt verktyg till rätt arbete - Makaroner äts med sked.

tok124
Visningsbild
P 35 Hjälte 258 inlägg
Trådskapare
0

Svar till Klas-Kenny [Gå till post]:
Det verkar tyvär inte häller funka =/

Jag linkar php scriptet och html scriptet. kan ju vara något mer som saknas.

http://pastebin.com/D3UfAQsr <-- HTML Script
http://pastebin.com/yyUKmWXS <-- php Script

detta är error medelanded dom jag får nu:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Gauntlets')'' at line 1
Klas-Kenny
Visningsbild
P 31 Växjö Hjälte 12 128 inlägg
0

Svar till tok124 [Gå till post]:
Eh, man kan nog förresten inte stoppa in en PHP-funktion i queryn på sättet jag beskrev, ber om ursäkt för det.
Testa med

$result = mysql_query("SELECT displayid FROM item_template WHERE name='" . mysql_real_escape_string($_POST[test]) . "'")
or die(mysql_error());

Istället.

Alternativt det lite snyggare skrivsättet:

$escaped_string = mysql_real_escape_string($_POST[test]);
$result = mysql_query("SELECT displayid FROM item_template WHERE name='$escaped_string'")
or die(mysql_error());

Rätt verktyg till rätt arbete - Makaroner äts med sked.

tok124
Visningsbild
P 35 Hjälte 258 inlägg
Trådskapare
0
Svar till Klas-Kenny [Gå till post]:
Nu verkar de funka. använder den andra koden du gav mig. men får fortfarande ett error: "Notice: Use of undefined constant test - assumed 'test' in C:xampphtdocsSQL-Generator-Toolitemdisplayid.php on line 7"

den hittar iaf rätt displayID's nu. tack =)
tok124
Visningsbild
P 35 Hjälte 258 inlägg
Trådskapare
0
oj. de var lättfixat haha. ändrade från

$escaped_string = mysql_real_escape_string($_POST[test]);

Till

$escaped_string = mysql_real_escape_string($_POST['test']);

nu funkar allt perfekt !

Tack så mycket =)

Tillägg av tok124 2013-11-29 08:20

Kom på en till sak... om man inte kan hela namnet typ om ett item heter Vicious Gladiator's Waistband of Cruelty så kanske man inte kan hela namnet och bara vill söka på "vicious" typ. finns det något sätt att fixa så man slipper skriva hela namnet?

pr0n
Visningsbild
P Hjälte 5 588 inlägg
0

Svar till tok124 [Gå till post]:
Vill du få fram alla resultat på t.ex de item som innehåller "vicious" så är det ganska lätt.
http://www.w3schools.com/sql/sql_like.asp

SELECT displayid FROM item_template WHERE name LIKE '%vicious%'

Sen får du använda en variabel utav sökordet där istället för vicious. Likadant som du använde $escaped_string tidigare.

Ingen status

tok124
Visningsbild
P 35 Hjälte 258 inlägg
Trådskapare
0

Svar till pr0n [Gå till post]:
Tack ! Det funkade :D


Forum » Datorer & IT » Webbutveckling & Programmering » Behöver hjälp med php

Ansvariga ordningsvakter:

Användare som läser i den här tråden just nu

1 utloggad

Skriv ett nytt inlägg

Hej! Innan du skriver om ett potentiellt problem så vill vi påminna dig om att du faktiskt inte är ensam. Du är inte onormal och världen kommer inte att gå under, vi lovar! Så slappna av och gilla livet i några minuter - känns det fortfarande hemskt? Skriv gärna ner dina tankar och frågor, vi älskar att hjälpa just dig!

Den här tråden är äldre än Rojks drömtjej!

Det senaste inlägget i den här tråden skrevs för över tre månader sedan. Är du säker på att du vill återuppliva diskussionen? Har du något vettigt att tillföra eller passar din fråga i en ny tråd? Onödiga återupplivningar kommer att låsas så tänk efter en extra gång!

Hjälp

Det här är en hjälpruta

Här får du korta tips och förklaringar om forumet. Välj kapitel i rullningslisten här ovanför.

Rutan uppdateras automagiskt

När du använder funktioner i forumet så visas bra tips här.


Annons
Annons
Annons
Annons