Beste Mensen,

Ik ben momenteel bezig om mijn scripts te beveiligen tegen SQL injection en dit is is allemaal vrij nieuw voor mij, echter krijg ik telkens een fatal error en ik zie niet direct waar de fout zit. Ik krijg de volgende melding.

Fatal error: Call to undefined function mres() in /var/www/vhosts/7/125190/webspace/httpdocs/mijndomein.nl/modules/account/activate-account.php on line 17

Line 17 is hieronder afgebeeld:

<?php
$check_sql = "SELECT id, serial FROM companion WHERE id=". intval($_GET['id']) ." AND serial='". mres($_GET['serial']) ."' ";
?>

Hoop dat iemand mij hiermee verder kan helpen.

Greetz
Peter
Dus wat zegt hij met het nieuwe account....
welke link staat er in de mail en welke code...

welk resultaat krijg je uit je array die je had als je op de pagina komt vanuit de email...

krijg je nog overige meldingen ?
@Marco
Bij het maken van een account geeft hij netjes aan dat hij is aangemaakt in de DB wordt het account ook correct ingevoerd in mijn mail krijg ik de volgende url.

http://www.mijndomein.nl/account-activeren/90/I7GcDnFiHEMhJd043OAgBP6akpNClKmeoL9f1jb285

En de pagina zelf geeft de volgende gegevens door:

Array
(
[page] => account-activeren
[id] => 90
[serial] => I7GcDnFiHEMhJd043OAgBP6akpNClKmeoL9f1jb285
)
Verkeerde activatie gegevens, controleer de url in uw activatie mail.

Voor de rest krijg ik geen overige meldingen

Greetz
Peter
Oke nou dan moeten we dat nog even oplossen en daarna stuur ik je even een pm...

Maar ik heb de code hierboven weer aangepast want we moeten even kijken of die query goed gaat...
Oke dan heb de laatste versie van het script nu geupload en getest en krijg het volgende terug.

Array
(
[page] => account-activeren
[id] => 90
[serial] => I7GcDnFiHEMhJd043OAgBP6akpNClKmeoL9f1jb285
)
bool(false)
Verkeerde activatie gegevens, controleer de url in uw activatie mail.

@Bart v B,

Heb je ooit is in een framework/classes gekeken ?!? (denk het niet, en anders niet echt goed waarscheinlijk)

want daar worden/kunnen ook functies door andere functies en in functies aangeroepen worden en gebruikt worden.
En Classes nemen andere classes hun eigenschappen over en functies.

En nee dat is niet 1 spijker met 2 hamers slaan!

Ehm.., even denken...
Jij begint even hier over frameworks/classes en doet een aanname dat ik daar waarschijnlijk niets vanaf weet.
Als we het dan toch over classes/frameworks hebben, dan kan ik je vertellen dat ik daar redelijk in thuis ben.
De function zoals de TS het hier in dit topic heeft staan is totaal irrelevant want zoals ik het nu zie staat het niet in een framework. En als dat al zo is, dan is het nog een nutteloze.
We hebben het over een _escape_string() funtction die niet eens gebruikt moet worden in zijn probleem, laat staan dat deze dan zoals bedoeld gebruikt word.
Een class is uitbreidbaar, niet bedoeld voor een ding.

In dit geval gaat het over een funtction escapen dan moet het dus een systeem zijn die dus gebruikt kan worden voor meerdere types b.v. mysql/postgress/mssql/sqllite e.d..
In het geval van de TS is het alleen een mysql dus een totale nutteloze function en kan hij het beter doen rechtstreeks in de query.
Dus zoals hij het nu heeft staan is denk ik beter dan wat het was.
Dat hij van mij nog niet helemaal klopt is true, had even niet verder gekeken hoe het verder geïmplementeerd moest worden, maar dacht dat ik al voldoende hints had gegeven om hem verder te helpen.
Helaas had ik even geen tijd meer om hem verder te helpen. Dus vandaar dat het lijkt op een wilde gok. ;)
Heb je het database object wel aangemaakt? i.e.:
<?php
$mysqli = new mysqli('localhost', 'iemandandersdanderoot', 'w8w00rd', 'dbase5');
?>
Database object is aangemaakt je ziet het niet in het script maar hij wordt wel geinclude in de website.
Ah ik zie hem al (de php junkie is geen sql junkie), verander regel 15 in:
<?php
$check_result = $mysqli->query("select id, serial from companion where id = ". intval($_GET['id']) . " and serial = '".$serial_data. "' limit 1");
?>

mmm je krijgt geen resultaat terug uit de companions...

vervang:
<?php
$check_result = $mysqli->query('select id, serial from companion where id = '. intval($_GET['id']) .' and serial = '.$serial_data.' limit 1');
if( $check_result ):
// Cycle through results
while ( $row = $check_result->fetch_object() ):
echo '<pre>';
echo var_dump($row);
echo '</pre>';
endwhile;
endif;
?>
eens met:
<?php
$check_result = $mysqli->query('select count(*) from companion');
$row = $check_result->fetch_row();
echo '#: ', $row[0];
?>

om even te kijken of we er wat uit kunnen krijgen...
@Marco
Even ter controle script ziet er nu als volgt uit:

<?php

echo '<pre>'.print_r($_GET, true).'<pre>';
// dit stukje weg halen of uit zetten als je hem online/'live' zet...
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Get the needed data
if( isset($_GET['id']) && isset($_GET['serial']) ):

if ( is_numeric($_GET['id']) && !is_null($_GET['id']) && (int)$_GET['id'] && !empty($_GET['id']) && !is_null($_GET['serial']) && !empty($_GET['serial']) && is_string($_GET['serial']) ):
// contoleer de serial...
$serial_data = $mysqli->real_escape_string($_GET['serial']);

$check_result = $mysqli->query('select count(*) from companion');
$row = $check_result->fetch_row();
echo '#: ', $row[0];

echo '<pre>';
echo var_dump($check_result);
echo '</pre>';

if( $check_result ):

$sql = 'update companion set active = 1 where id = '.(int)$_GET['id'].' limit 1';
$result = $mysqli->query($sql);

if ( $mysqli->affected_rows() == 1 ):

echo 'Uw account is geactiveerd';
else: // else als er niks is bijgewerkt in de database...
echo 'Er ging is verkeerd tijdens het updata van de database, probeer het opnieuw a.u.b';
endif;
else: // else als er iets verkeerds is met de activatie serial...
echo 'Verkeerde activatie gegevens, controleer de url in uw activatie mail.';
endif;
else: // else if het id en/of de serial zijn niet correct...
echo 'Een van de mee gegeven data is incorrect, controlleer uw invoer!.';
endif;
else: // else als er geen id of serial gevonden word...
echo 'Er is iets niet goed gegaan neem contact op met de webmaster';
endif;

?>

En ik krijg de volgende gegevens eruit:

Array
(
[page] => account-activeren
[id] => 90
[serial] => I7GcDnFiHEMhJd043OAgBP6akpNClKmeoL9f1jb285
)
#: 2
object(mysqli_result)#2 (5) {
["current_field"]=>
int(0)
["field_count"]=>
int(1)
["lengths"]=>
array(1) {
[0]=>
int(1)
}
["num_rows"]=>
int(1)
["type"]=>
int(0)
}

Fatal error: Call to undefined method mysqli::affected_rows() in /var/www/vhosts/7/125190/webspace/httpdocs/mijndomein.nl/modules/account/activate-account.php on line 28

Reageren