Door
Peter Overdam
op 17-11-2012 11:36
gewijzigd op 17-11-2012 18:06
4.624 views
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']) ."' ";
?>
Hij zou zoals hij er nu staat goed moeten zijn (hij is ge-update!)
Of ik moet weer even snel ergens overheen kijken maar daar wil ik niet vanuit gaan :$
Er wordt gechecked of het id en de serial kloppen met de $_GET-waarden:
- $check_result = $mysqli->query("select id, serial from companion where id = ". intval($_GET['id']) . " and serial = '".$serial_data. "' limit 1");
Als de query lukt:
- if( $check_result ):
Dan wordt active op 1 gezet:
- $sql = "update companion set active = 1 where id = '".(int)$_GET['id']."' limit 1";
- $result = $mysqli->query($sql);
Maar als een query lukt wil dat nog helemaal niet zeggen dat er ook iets is gevonden. Zoals het nu is wordt elk id in een $_GET, ongeacht de serial, op active = 1 gezet.
Marco mag ik jou heel hartelijk bedanken voor je inzet en dat op je vrije zaterdag. Ik ga dit script eens even goed bekijken met mijn PHP Boeken om wat bij te leren zodat ik het nieuwe gedeelte snap.
Zit wel iets in ja, volgens mij is het gewoon het simpelste om dit doen:
[code]
<?php
$sql = "UPDATE companions SET active = 1
WHERE id = " . (int) $_GET['id'] . "
AND serial = '" . $mysqli->real_escape_string($_GET['serial']) . "
AND active <> 1";
$result = $mysqli->query($sql)
if ($result) {
if ($mysqli->affected_rows === 1) {
echo 'Je account is geactiveerd';
}
else {
echo 'Je hebt je acoount reeds geactiveerd of een onjuiste waarde opgegeven';
}
}
else {
echo 'We hebben vandaag geen zin in nieuwe leden, probeer het morgen nog maar eens';
}
// dit stukje weg halen of uit zetten als je hem online/'live' zet...
echo '<pre>'.print_r($_GET, true).'<pre>';
error_reporting(E_ALL);
ini_set('display_errors', 1);
// Get the needed data
if( isset($_GET['id']) && isset($_GET['serial']) ):
$check_result = $mysqli->query("select id, serial from companion where id = ". intval($_GET['id']) . " and serial = '".$serial_data. "'");
if( $check_result ):
$sql = "update companion set active = 1 where id = ".(int)$_GET['id']." and active <> 1 and serial = '" . $serial_data . "' limit 1";
$result = $mysqli->query($sql);
if ( $result ):
if ( $mysqli->affected_rows === 1 ):
echo 'Uw account is geactiveerd';
else: // Al actief of klopt niet...
echo 'Uw account is al geactiveerd of uw gegevens kloppen niet.<br /> mocht dit probleem zich blijven voordoen neem dan contact op met de webmaster.';
endif;
else: // ging wat fout
echo 'Verkeerde activatie gegevens, controleer de url in uw activatie mail.<br /> mocht dit probleem zich blijven voordoen neem dan contact op met de webmaster.';
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;
Afgezien van dat ik today over een X aantal zaken heen heb gekeken tuurlijk mag dat...
Vergeet je niet de array bovenaan uit te zetten want ik zie dat hij nog aanstaat bij je :P
En de tekst loopt nog een beetje achter de kolom aan de rechterkant.
@Marco
Dat.moet ik inderdaad nog ff uitzetten ga dat ff straks doen en het klopt dat die tekst erachter loopt daar marge moet ik nog een beetje aanpassen maar dat komt goed.