Hallo,

Ik ben dus nog niet zolang bezig met php&mysql, nou heb ik al meerdere tutorials gevolgd maar Dit was de laatste.
en om een beetje te oefenen dacht ik ik maak zelf nog wat mooie functies.

nou heb ik addfriend.php gemaakt :

<?php
include 'core/init.php';
protect_page();
include 'includes/overall/header.php';



if (empty($_GET) === false) {
$required_fields = array('name');
foreach($_GET as $key=>$value) {
if (empty($value) && in_array($key, $required_fields) === true) {
$errors[] = 'Deze gebruiker bestaat niet.';
break 1;
}
}

if (empty($errors) === true) {
if (ctype_alnum($_GET['name']) === false) {
$errors[] = 'Deze gebruiker doet iets wat niet mag.';// log nog toevoegen
}
if (user_exists($_GET['name']) === false) {
$errors[] = 'Deze gebruiker bestaat niet.';
}
if (check_friend($user_data['username'], $_GET['name']) === true) {
$errors[] = 'Deze persoon staat al in u vrienden lijst.';
}
// misschien nog toevoegen dat je jezelf niet als vriend kan hebben
}
}

if (isset($_GET['success']) && empty($_GET['success'])) {
echo 'Je hebt ' . $_GET['name'] . ' toegevoegd aan je vrienden lijst!'; // dit werkt ook niet want de GET bestaat niet meer.
} else {
if (empty($_GET) === false && empty($errors) === true) {

add_friend($user_data['username'], $_GET['name']); // de data word in de functie add_friend nog eens tegen sql-inj beschermt
header('Location: addfriend.php?success');
exit();
} else if (empty($errors) === false) {
echo output_errors($errors);
}
}

include 'includes/overall/footer.php';
?>

Ik kan nou dus een vriend toevoegen via de link addfriend.php?name=naamvanvriend
Het werkt allemaal, maar doe ik het zo wel goed? Ben ik iets vergeten? Of is er en betere andere simpelere manier?

Ik hoor het graag.

Mvg Joey

[size=xsmall]Toevoeging op 19/01/2014 17:59:14:[/size]

is het script zo fout dat niemand geageerd?
Ik ben nog steeds niet verder geholpen dus als iemand wat te melde heeft hoor ik het graag!


Het ligt er ook een beetje aan hoe jouw eigen functies in elkaar steken.
Als het werkt is het toch goed :) Ik zal alleen wel even je GET variabelen die je print in htmlentities() zetten om code uitvoeren onmogelijk te maken.
Wat mij opvalt, is dat je GET requests gebruikt om data toe te voegen aan je database. Dat is weliswaar mogelijk, maar eigenlijk niet de bedoeling. Een GET hoort geen neveneffecten te hebben, en dat is hier wel het geval (er wordt een record toegevoegd aan de database).

Als je het echt wilt doen zoals het hoort, gebruik je POST requests.

Deze code zou ongewenst gedrag kunnen vertonen als je bijvoorbeeld na het toevoegen van een vriend inlogt als een andere gebruiker en daarna de pagina opnieuw bekijkt via bijvoorbeeld je browse-geschiedenis.
Bedankt voor alle informatie,
Voor de mensen die de eigen functies willen zien:

<?php
function sanitize($data) {
return htmlentities(strip_tags(mysql_real_escape_string($data)));
}
function check_friend($issuer, $friends_name) {
$issuer = sanitize($issuer);
$friends_name = sanitize($friends_name);

return (mysql_result(mysql_query("SELECT COUNT(`friends_name`) FROM `friend` WHERE `issuer` = '$issuer' AND `friends_name` = '$friends_name'"), 0) == 1) ? true : false;
}

function user_exists($username) {
$username = sanitize($username);
return (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users` WHERE `username` = '$username'"), 0) == 1) ? true : false;
}

function add_friend($issuer, $friends_name) {
$issuer = sanitize($issuer);
$friends_name = sanitize($friends_name);

mysql_query("INSERT INTO `friend` (issuer, friends_name) VALUES ('$issuer', '$friends_name')");
}
?>

@Willem vp
Ik zou dus echt niet weten hoe ik het met een post moet doen.
Ja via een form dat iedereen zelf de naam in moeten vullen dat kan ik wel.
Maar hoe moet ik het doen als ik ze via een link gelijk iemand wil laten toevoegen?
Joey brouwer op 21/01/2014 18:32:05

Ik zou dus echt niet weten hoe ik het met een post moet doen.
Ja via een form dat iedereen zelf de naam in moeten vullen dat kan ik wel.
Maar hoe moet ik het doen als ik ze via een link gelijk iemand wil laten toevoegen?

Via een form dus. Het toevoegen van een account via een URL is 'not done'. Het heet niet voor niets een GET request; de gedachte erachter is dat dat type request alleen wordt gebruikt voor het opvragen van gegevens.

Reageren