Goedemiddag,
Ik heb dit stuk script:

<?php
}

include('connect-db.php');

if (isset($_POST['submit']))
{
$youtubeurl = mysql_real_escape_string(htmlspecialchars($_POST['youtubeurl']));
$youtubesongname = mysql_real_escape_string(htmlspecialchars($_POST['youtubesongname']));
$suggested = htmlentities($_SESSION['user']['username']);

if ($youtubeurl == '' || $youtubesongname == '')
{
$error = 'Please fill in all required fields!';
renderForm($youtubeurl, $youtubesongname, $error);
}
else
{
mysql_query("INSERT djnotes SET youtubeurl='$youtubeurl', youtubesongname='(By: $suggested) $youtubesongname'")
or die(mysql_error());

header("Location: ../private.php");
}
}
else
{
renderForm('','','');
}
?>

De gedachte achter dit stuk was dat hij de username van de ingelogde gebruiker pakt en hem bij $suggested plakt. Het inlog script is een ander script op dezelfde pagina maar als ik <?php echo htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8'); ?> zet op de pagina komt er wel de username tevoorschijn. Hij kan hem blijkbaar dus niet doorgeven aan de database.

$suggested = htmlentities($_SESSION['user']['username']);
Dus stel ik log in als Patrick dan komt er "(By: ) Youtube - Nummer" te staan zodra ik het formulier invul, terwijl ik graag wil dat er "(By: Patrick) Youtube - Nummer" komt.

Zou iemand mij hier kunnen helpen op welke manier het wel gaat werken?
Mocht ik te onduidelijk zijn laat het a.u.b. weten.

Mvg, Patrick.
gebruik je wel session_start();?
Het is trouwens niet nodig om deze input op voorhand te escapen met htmlspecialchars(). Dit zou je moeten doen bij het weergeven van deze data in een HTML-document. Je hoeft alleen maar te escapen in de "output context" waarin je op dat moment werkt (in dit geval MySQL, wat het gebruik van mysql-escape-functionaliteit zeker rechtvaardigt), maar je hoeft niet meteen iets compleet onschadelijk te maken zonder dat duidelijk is in wat voor context je deze data uiteindelijk gaat gebruiken.

Stel dat je dadelijk om wat voor reden dan ook data wilt exporten naar een text of CSV bestand. Deze data was op voorhand al ge-escaped voor gebruik in een HTML of XML document, maar dat is niet de context (.txt, .csv) waarin je die data dan gebruikt en is dan mogelijk ook niet goed geformatteerd voor die context.

"Never escape on input"
precies: htmlspecialchars gebruik je eigenlijk alleen in combinatie met echo of print.


Ik zou trouwens niet direct de zinsnede

'(By: $suggested) $youtubesongname'

opslaan in de database, maar
daarvoor 2 kolommen gebruiken in de database waarin je $suggested en $youtybesongname opslaat.

Daarmee kun je dus in een later stadium eenvoudig de zin anders weergeven of eventueel in het Nederlands tonen.

Dat regel je dan meer in je template.

NB:
INSERT INTO tabel SET kolom = 'foo', kolom2='bar'

is een rare syntax die mysql accepteert, maar andere databases niet.
Gebruikelijk is

INSERT INTO tabel
(kolom, kolom2)
VALUES
('foo', 'bar')

Reageren