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
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 :$
Volgens mij is de logica niet correct:

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
Fout zat aan mijn kant jongens kennelijk was door een script eerder de active value op 1 gezet waardoor die dus de melding gaf:

Er ging is verkeerd tijdens het updata van de database, probeer het opnieuw

Maar nu geeft hij netjes het volgende aan

Array
(
[page] => account-activeren
[id] => 90
[serial] => I7GcDnFiHEMhJd043OAgBP6akpNClKmeoL9f1jb285
)
Uw account is geactiveerd

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.

Greetz
Peter
@Peter: Probeer het nu nog eens met een nieuw account en dan met het juiste id en een onjuist serial. Volgens mij activeert ie dan ook.
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';
}
@SanThe
Je hebt gelijk nieuw account aangemaakt id 92 en serial opgegeven van oud account en hij zet active op 1.

@Ger
Ik wacht even op antwoord van Marco aangezien hij veel tijd erin heeft gestoken in ieder geval bedankt voor de hulp.

Greetz
Peter
weer 1tje...

<?php

// 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']) ):

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 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;

?>
@Marco
Na uitgebreid testen met verschillende mogelijkheden en opties werkt hij nu helemaal correct. Mag ik jou wederom heel erg bedanken.
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.

Nogmaals heel erg bedankt

Reageren