url input controlleren in database
Ik ben bezig met een klein systeempje wat ik vroeger wel eens vaker heb geschreven. Maar ik heb heel lang niks gedaan en nu kom ik er helemaal niet meer uit. Voor mijn gevoel is het ontzettend simpel maar wil het niet lukken. Ik heb een url met als variable code. Deze variable moet iets mee gebeuren:
--> De url wordt ingevoerd
--> De code word eraan gezet als: http://controle.nl/Codes/controle.php?code=100.php
--> De code is hierbij dus 100 deze ontvang ik in php met
$codeinput = $_GET['code'];
--> Nu moet ik in mijn mysql database kijken of deze code daarin staat.
--> Zo ja dan moet hij deze code verwijderen en een 1 terugsturen en het aantal punten dat achter deze code staat terug sturen. [mijn tabel bestaat uit: my_codes --> tabel codes --> variables zijn: code, punten. Een voorbeeldje is dus code
--> Bij ja stuurt hij dus terug: 1/punten (liefst met de / er tussen)
--> Zo nee da moet hij een 0 terug sturen.
Nu heb ik het gevoel dat ik gewoon iets makkelijks mis maar ik kom helemaal niet verder dan de code uit de url halen. Heb heel veel met mysql geprobeerd maar niks werkt...
Iemand een idee hoe ik dit kan maken? Oplossen?
Groeten,
Dennis
Gewijzigd op 31/10/2014 18:30:40 door Dennis van DUin
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function useCode($link, $code)
{
$result = mysqli_query($link, "SELECT * FROM tabel WHERE code=" . $code) . " LIMIT 1";
if($result && $row = mysqli_fetch_assoc($result))
{
mysqli_query($link, "DELETE FROM tabel WHERE id=" . $row['id']);
return $row['id']
}
return FALSE;
}
$punten = getCode($link, 166453);
echo $punten;
?>
function useCode($link, $code)
{
$result = mysqli_query($link, "SELECT * FROM tabel WHERE code=" . $code) . " LIMIT 1";
if($result && $row = mysqli_fetch_assoc($result))
{
mysqli_query($link, "DELETE FROM tabel WHERE id=" . $row['id']);
return $row['id']
}
return FALSE;
}
$punten = getCode($link, 166453);
echo $punten;
?>
Zoiets denk ik
Gewijzigd op 31/10/2014 18:35:21 door Frank Nietbelangrijk
bedankt voor uw reactie, ik heb de code nu als dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$host = "localhost";
$username = "pelistar";
$password = "";
$database = "my_pelistar";
$codeinput = $_GET['code'];
$link = mysql_connect($host,$username,$password) or die(mysql_error());
mysql_select_db($database,$link) or die(mysql_error()." [".$database."]");
function useCode($link, $codeinput)
{
$result = mysqli_query($link, "SELECT * FROM codes WHERE code=" . $codeinput) . " LIMIT 1";
if($result && $row = mysqli_fetch_assoc($result))
{
mysqli_query($link, "DELETE FROM codes WHERE id=" . $row['id']);
return $row['id']
}
return FALSE;
}
$punten = getCode($link, 166453);
echo $punten;
?>
$host = "localhost";
$username = "pelistar";
$password = "";
$database = "my_pelistar";
$codeinput = $_GET['code'];
$link = mysql_connect($host,$username,$password) or die(mysql_error());
mysql_select_db($database,$link) or die(mysql_error()." [".$database."]");
function useCode($link, $codeinput)
{
$result = mysqli_query($link, "SELECT * FROM codes WHERE code=" . $codeinput) . " LIMIT 1";
if($result && $row = mysqli_fetch_assoc($result))
{
mysqli_query($link, "DELETE FROM codes WHERE id=" . $row['id']);
return $row['id']
}
return FALSE;
}
$punten = getCode($link, 166453);
echo $punten;
?>
Maar hij geeft me deze error: Parse error: syntax error, unexpected '}' in /membri/pelistar/Codes/codesalien.php on line 24
Dit is in jou gedeelte van de code dat hij hij het sluitings teken niet kent? Enig idee?
Gewijzigd op 31/10/2014 18:42:55 door Dennis van DUin
Verder is SQL-injection mogelijk omdat je $_GET niet filtert met mysql_real_escape_string()
Gewijzigd op 31/10/2014 18:46:17 door - Ariën -
achter return $row['id'] moet een ;
Krijf nu dit:
Fatal error: Call to undefined function getCode() in /membri/pelistar/Codes/codesalien.php on line 28
Kan iemand mij daarmee helpen?
SQL injectie is inderdaad mogelijk? bedoel je dat er codes in de database gezet kunnen worden want met dit beveiligen heb nog helemaal geen ervaring. Het enige wat ik wil doen is controlleren of de ingevoerde code (dmv de url in de database staat) en zo ja het juiste aantal punten terug sturen. Ik wil graag leren dus als iemand wat uitleg zou willen typen ben ik gelukkig!
Gewijzigd op 31/10/2014 18:52:42 door Dennis van DUin
En ja, met SQL Injection kan iedereen rotzooi in je query gooien met de gevolgen van den, zoals verwijderen van records of aanpassen etc...
Gewijzigd op 31/10/2014 18:53:40 door - Ariën -
- Aar - op 31/10/2014 18:53:25:
De functie getCode() bestaat niet, Kijk eens goed welke functie je nu WEL aangemaakt hebt. ;-)
En ja, met SQL Injection kan iedereen rotzooi in je query gooien met de gevolgen van den, zoals verwijderen van records of aanpassen etc...
En ja, met SQL Injection kan iedereen rotzooi in je query gooien met de gevolgen van den, zoals verwijderen van records of aanpassen etc...
Bedankt voor je reactie. Ik heb het opgezocht en zit er over te lezen om dat te beveiligen weer iets geleerd.
Ik snap net wat je bedoelt over een functie aanmaken. Ik heb een database gemaakt, daar enkele codes ingevuld en nu probeer ik te controleren of ze erin staan. Ik heb het idee dat ik dit de vorige keer anders heb gedaan... Maar ik hoop er zo met hulp uit te komen?
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
function useCode($link, $codeinput) {
// doe iets
}
$punten = getCode($link, 166453);
?>
function useCode($link, $codeinput) {
// doe iets
}
$punten = getCode($link, 166453);
?>
Je maakt een functie aan met de naam useCode, maar je roept hem dan aan met getCode. Dan is het vrij logisch dat hij 'undefined' is.
Gewijzigd op 31/10/2014 19:01:58 door - Ariën -
maar nu heb ik deze code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$host = "localhost";
$username = "pelistar";
$password = "";
$database = "my_pelistar";
$codeinput = $_GET['code'];
$link = mysql_connect($host,$username,$password) or die(mysql_error());
mysql_select_db($database,$link) or die(mysql_error()." [".$database."]");
function useCode($link, $codeinput)
{
$result = mysqli_query($link, "SELECT * FROM codes WHERE code=" . mysql_real_escape_string($codeinput)) . " LIMIT 1";
if($result && $row = mysqli_fetch_assoc($result));
{
mysqli_query($link, "DELETE FROM codes WHERE id=" . $row['id']);
return $row['id'];
}
return FALSE;
}
$punten = useCode($link, $codeinput);
echo $punten;
?>
$host = "localhost";
$username = "pelistar";
$password = "";
$database = "my_pelistar";
$codeinput = $_GET['code'];
$link = mysql_connect($host,$username,$password) or die(mysql_error());
mysql_select_db($database,$link) or die(mysql_error()." [".$database."]");
function useCode($link, $codeinput)
{
$result = mysqli_query($link, "SELECT * FROM codes WHERE code=" . mysql_real_escape_string($codeinput)) . " LIMIT 1";
if($result && $row = mysqli_fetch_assoc($result));
{
mysqli_query($link, "DELETE FROM codes WHERE id=" . $row['id']);
return $row['id'];
}
return FALSE;
}
$punten = useCode($link, $codeinput);
echo $punten;
?>
En vul ik de link dus in zoals het moet:
http://pelistar.altervista.org/Codes/codesalien.php?code=12345
waarbij de code 12345 in de mysql database staat als
code: punten:
12345 50
Maar de echo zet niks neer... En hij word ook niet uit de database gehaald... Weet jij hoe dat komt? Ik gebruik nu de code van jullie en een deel weet ik daarvan maar niet waarom ik niks terug krijg. Er staat duidelijk een echo?
Gewijzigd op 31/10/2014 19:13:39 door - Ariën -
- Aar - op 31/10/2014 19:13:25:
Gebruik geen MySQL en MySQLi-functies door elkaar!
Nu word het steeds vreemder. Ik heb het allemaal veranderd maar met een I en nu krijg ik wel een reactie... De naam van mijn database my_pelistar. Dat wordt er als echo gegeven. Maar ik zou graag het aantal punten willen krijgen wat er achter de code staat. En als de code niet klopt moet hij als resultaat een 0 teruggeven... Hij geeft nu namelijk zelfs zonder invoer van iets de naam van mijn database weer... Sorry als ik vragerig overkom misschien wel heel erg noob maar heb het heel graag nodig... Dan heb ik alles werkend voor dit projectje!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$host = "localhost";
$username = "pelistar";
$password = "";
$database = "my_pelistar";
$codeinput = $_GET['code'];
$link = mysqli_connect($host,$username,$password) or die(mysqli_error());
mysqli_select_db($database,$link) or die(mysqli_error()." [".$database."]");
function useCode($link, $codeinput)
{
$result = mysqli_query($link, "SELECT * FROM codes WHERE code=" . mysqli_real_escape_string($codeinput)) . " LIMIT 1";
if($result && $row = mysqli_fetch_assoc($result));
{
mysqli_query($link, "DELETE FROM codes WHERE id=" . $row['id']);
return $row['id'];
}
return FALSE;
}
$punten = useCode($link, $codeinput);
echo $punten;
?>
$host = "localhost";
$username = "pelistar";
$password = "";
$database = "my_pelistar";
$codeinput = $_GET['code'];
$link = mysqli_connect($host,$username,$password) or die(mysqli_error());
mysqli_select_db($database,$link) or die(mysqli_error()." [".$database."]");
function useCode($link, $codeinput)
{
$result = mysqli_query($link, "SELECT * FROM codes WHERE code=" . mysqli_real_escape_string($codeinput)) . " LIMIT 1";
if($result && $row = mysqli_fetch_assoc($result));
{
mysqli_query($link, "DELETE FROM codes WHERE id=" . $row['id']);
return $row['id'];
}
return FALSE;
}
$punten = useCode($link, $codeinput);
echo $punten;
?>
Gewijzigd op 31/10/2014 19:16:49 door Dennis van DUin
Anyway, je connectie mislukt ergens. Dus ga dat eens na met: mysqli_connect_error()
Ik had niet getest zeker? ;-)
- Aar - op 31/10/2014 19:21:43:
Tja, op regel 10 wordt die naam inderdaad tussen bracket-tekens aangegeven, waarom zou je dat eigenlijk willen tonen?
Anyway, je connectie mislukt ergens. Dus ga dat eens na met: mysqli_connect_error()
Anyway, je connectie mislukt ergens. Dus ga dat eens na met: mysqli_connect_error()
dan krijg ik het volgende: Parse error: syntax error, unexpected T_FUNCTION in /membri/pelistar/Codes/codesalien.php on line 15
Bij de volgende code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
$host = "localhost";
$username = "pelistar";
$password = "";
$database = "my_pelistar";
$codeinput = $_GET['code'];
$link = mysqli_connect($host,$username,$password) or die(mysqli_error());
mysqli_select_db($database,$link) or die(mysqli_error());
mysqli_connect_error()
function useCode($link,$codeinput)
{
$result = mysqli_query($link, "SELECT * FROM codes WHERE code=" . mysqli_real_escape_string($codeinput)) . " LIMIT 1";
if($result && $row = mysqli_fetch_assoc($result));
{
mysqli_query($link, "DELETE FROM codes WHERE id=" . $row['id']);
return $row['id'];
}
return FALSE;
}
$punten = useCode($link, $codeinput);
echo $punten;
?>
$host = "localhost";
$username = "pelistar";
$password = "";
$database = "my_pelistar";
$codeinput = $_GET['code'];
$link = mysqli_connect($host,$username,$password) or die(mysqli_error());
mysqli_select_db($database,$link) or die(mysqli_error());
mysqli_connect_error()
function useCode($link,$codeinput)
{
$result = mysqli_query($link, "SELECT * FROM codes WHERE code=" . mysqli_real_escape_string($codeinput)) . " LIMIT 1";
if($result && $row = mysqli_fetch_assoc($result));
{
mysqli_query($link, "DELETE FROM codes WHERE id=" . $row['id']);
return $row['id'];
}
return FALSE;
}
$punten = useCode($link, $codeinput);
echo $punten;
?>
Gewijzigd op 31/10/2014 19:34:35 door Dennis van DUin
Zomaar een functie neerplaatsen gaat niet echt lukken, nee. Verder heeft mysqli_connect() een mooie parameter waarin je de databasenaam kan aangeven, dus mysqli_select_db() is niet nodig. Verder kan je dan met mysqli_connect_error() in die die()-functie een eventuele foutmelding tonen m.b.t. je connectie.
Maar gezien die missende parameter gok ik erop dat de connectie dan wel goed zal zijn.
Gewijzigd op 31/10/2014 19:37:50 door - Ariën -
- Aar - op 31/10/2014 19:36:42:
Is het niet verstandig om eerst even een basis-tutorials over PHP te zoeken en door te nemen, zodat je weet wat je allemaal doet?
Zomaar een functie neerplaatsen gaat niet echt lukken, nee. Verder heeft mysqli_connect() een mooie parameter waarin je de databasenaam kan aangeven, dus mysqli_select_db() is niet nodig. Verder kan je dan met mysqli_connect_error() in die die()-functie een eventuele foutmelding tonen m.b.t. je connectie.
Maar gezien die missende parameter gok ik erop dat de connectie dan wel goed zal zijn.
Zomaar een functie neerplaatsen gaat niet echt lukken, nee. Verder heeft mysqli_connect() een mooie parameter waarin je de databasenaam kan aangeven, dus mysqli_select_db() is niet nodig. Verder kan je dan met mysqli_connect_error() in die die()-functie een eventuele foutmelding tonen m.b.t. je connectie.
Maar gezien die missende parameter gok ik erop dat de connectie dan wel goed zal zijn.
Ik snap inderdaad wat je bedoeld om er wat meer over te lezen. Ik ben ook zeker bereid om er meer over te gaan leren en er mee bezig te zijn. Maar dit systeem probeer ik werkend te krijgen zodat een van mijn vrienden verder kan gaan met een game. Vandaar dat ik de hulp zoek van mensen die het zeker goed kunnen maken. Ik heb namelijk dit al eens voor elkaar gekregen lang geleden. Maar toen kende ik helemaal de functies van mysqli en function niet. Dat was meer gewoon connectie met de database, kijken of de variable uit de url overeen komt met iets in de tabel. Zoja de waarde die op die rij staat terug sturen en als dat niet gebeurd dan moet je een 0 terug sturen... Vandaar dat ik hoop dat iemand mij daarmee kan helpen? En daar dan uitleg bij kan geven zodat ik dat goed door kan nemen in bekijken.
Code (php)
1
$link = mysqli_connect($host,$username,$password,$database) or die(mysqli_connect_error());
die()-functies gebruiken is niet de beste manier, want een script moet ook niet gedwongen stoppen, maar ik gebruik het even om het simpel te houden.
Gewijzigd op 31/10/2014 19:44:34 door - Ariën -
- Aar - op 31/10/2014 19:43:28:
Dit heb ik nu als code gebruikt bij link maar er komt geen melding meer maar ook geen reactie vanuit mijn database... Dit is een screen van de database:
Dit de code nu:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$host = "localhost";
$username = "pelistar";
$password = "";
$database = "my_pelistar";
$codeinput = $_GET['code'];
$link = mysqli_connect($host,$username,$password,$database) or die(mysqli_connect_error());
function useCode($link,$codeinput)
{
$result = mysqli_query($link, "SELECT * FROM codes WHERE code=" . mysqli_real_escape_string($codeinput)) . " LIMIT 1";
if($result && $row = mysqli_fetch_assoc($result));
{
mysqli_query($link, "DELETE FROM codes WHERE id=" . $row['id']);
return $row['id'];
}
return FALSE;
}
$punten = useCode($link, $codeinput);
echo $punten;
?>
$host = "localhost";
$username = "pelistar";
$password = "";
$database = "my_pelistar";
$codeinput = $_GET['code'];
$link = mysqli_connect($host,$username,$password,$database) or die(mysqli_connect_error());
function useCode($link,$codeinput)
{
$result = mysqli_query($link, "SELECT * FROM codes WHERE code=" . mysqli_real_escape_string($codeinput)) . " LIMIT 1";
if($result && $row = mysqli_fetch_assoc($result));
{
mysqli_query($link, "DELETE FROM codes WHERE id=" . $row['id']);
return $row['id'];
}
return FALSE;
}
$punten = useCode($link, $codeinput);
echo $punten;
?>
mysqli_real_escape_string() functie mist een $link, en heeft dus twee argumenten nodig.
Dan moet je even kijken naar mysqli_query, daar mist ook foutafhandeling met mysqli_error($link). Ook de Gewijzigd op 31/10/2014 19:52:04 door - Ariën -
Verder kan je me iets meer uitleg geven? Ik heb je link gevolgd maar daar staat ook een optie zonder $link
Ik krijg nu deze Error met dit als code:
Catchable fatal error: Object of class mysqli_result could not be converted to string in /membri/pelistar/Codes/codesalien.php on line 13
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$host = "localhost";
$username = "pelistar";
$password = "";
$database = "my_pelistar";
$codeinput = $_GET['code'];
$link = mysqli_connect($host,$username,$password,$database) or die(mysqli_connect_error());
function useCode($link,$codeinput)
{
$result = mysqli_query($link, "SELECT * FROM codes WHERE code=" . mysqli_real_escape_string($link,$codeinput)) . " LIMIT 1"or die(mysqli_connect_error());;
if($result && $row = mysqli_fetch_assoc($result));
{
mysqli_query($link, "DELETE FROM codes WHERE id=" . $row['id']);
return $row['id'];
}
return FALSE;
}
$punten = useCode($link, $codeinput);
echo $punten;
?>
$host = "localhost";
$username = "pelistar";
$password = "";
$database = "my_pelistar";
$codeinput = $_GET['code'];
$link = mysqli_connect($host,$username,$password,$database) or die(mysqli_connect_error());
function useCode($link,$codeinput)
{
$result = mysqli_query($link, "SELECT * FROM codes WHERE code=" . mysqli_real_escape_string($link,$codeinput)) . " LIMIT 1"or die(mysqli_connect_error());;
if($result && $row = mysqli_fetch_assoc($result));
{
mysqli_query($link, "DELETE FROM codes WHERE id=" . $row['id']);
return $row['id'];
}
return FALSE;
}
$punten = useCode($link, $codeinput);
echo $punten;
?>
Dit is de link die ik volg: http://pelistar.altervista.org/Codes/codesalien.php?code=12345