Hey mensjes, ik heb een script om iets om te slaan in een database, echter werkt deze niet.

<?php

if (!isset($_SESSION['id'])) {

echo '<div id="error">You must be logged on to see this page!</div>';
} else {

$uQuery = mysql_query("SELECT * FROM users WHERE id = '" . $_SESSION['id'] . "'") or die(mysql_error());
$uFetch = mysql_fetch_assoc($uQuery);

if (isset($_POST['submit']))
$test = htmlspecialchars($_POST['test']);
mysql_query("UPDATE users SET test = '" . mysql_real_escape_string($test) . "'") or die(mysql_error());
echo '<div id="succes">Your information has been successfully updated! <a href="index.php">Click here</a></div>';
}

?>

<form method="post" action="profielaanpassen.php" enctype="multipart/form-data">
<textarea id="test" name="test" style="width: 350px; height: 190px;"><?php
echo str_replace('<br />', '', $uFetch['test']);
?></textarea>
<input type="submit" name="submit" value="Opslaan" />
</form>


Het probleem is: Ik krijg gelijk al:
Your information has been successfully updated! Click here, en ik krijg een notice:
Notice: Undefined variable: test in /home/pepijar28/domains/pepijnvanderstap.eu/public_html/pages/pages.php on line 15

Wat ik zelf al begreep was, ik roep die echo te vroeg uit,
en " test " is niet gedefineerd, maar ik krijg het niet voorelkaar om dit goed te krijgen.
Mvg,
Het lijktt mij veilger als de real esc string erook in zit.


Telefoon, kan typfouten bevatten

[size=xsmall]Toevoeging op 22/04/2014 12:04:02:[/size]

Het lijktt mij veilger als de real esc string erook in zit.


Telefoon, kan typfouten bevatten
Maar komt dat omdat je weet wat je doet, of omdat je eigenlijk niet weet wat er zou moeten gebeuren....?

Als je htmlspecialchars gebruikt voor het invoeren in de database vrees ik het tweede....
Nu vraag ik me af, als dit gepost is, dan zie ik de oude dingen nog qua database gegevens.
Nu wil ik dat je gelijk de gegevens die je POST ziet.

Voor de mensen die het niet begrijpen:
Als je "Kaas" veranderd naar "Worst" Dan zie je als je op Aanpassen klikt nog steeds "Kaas", pas als je de pagina opnieuw laadt, zie je "Worst.
ergens een else invoegen?
Dat komt dan vaak omdat mensen in het script de verkeerde volgorde hanteren:

als je eerst een SELECT ... FROM tabel doet.

En pas later een UPDATE tabel, dan zal de nog niet aangepaste data getoond worden. Ook als je het tonen nog uitstelt tot na het aanpassen: PHP wordt niet ingelicht dat de datatbase inhoud veranderd is.

Nog logischer is het om na een POST actie de nodige aanpassingen uit te voeren en daarna middels header('Location: ....); de browser via GET de pagina nog een keer te laten opvragen.
Dat voorkomt ook dat je 2x een post doet als je opo F5 drukt.

http://wiki.pfz.nl/post-redirect-get/

[size=xsmall]Toevoeging op 23/04/2014 16:40:12:[/size]

--aanvulling:
ik zie dat jij hierboven ook inderdaad eerst SELECT doet en dan pas UPDATE
>> ergens een else invoegen?

Wat is dit nu weer voor een dooddoener? Ergens een else invoegen? Wat voor antwoord verwacht je hier nu zelf op?

Gewoon logisch nadenken. Als je de oude gegevens ziet, dan moet je dus nagaan waarom dat zo is en de oude gegevens updaten met de nieuwe gegevens.
@Ivo
Ik ga er even tijd voor nemen om het door te lezen, bedankt!

@Ozzie en Ivo
Dus ik moet mijn UPDATE zeker eerst doen?

@Ozzie
Nvm.
>> Nvm.

Wat bedoel je hiermee?

Volg de tip van Ivo. Na het posten een header uitvoeren naar een andere pagina. Op die pagina zet je dan "Uw gegevens zijn aangepast."
Ik ben er mee bezig, maar dat lijkt me wel veel gedoe.. Zijn er geen andere mogelijkheden?
Dat is helemaal niet veel gedoe. Probeer het nu eerst eens.

(Wat betekent nvm?)
tja, als 2 regels uit je openings post 3 regels omhoog schuiven al veel gedoe is...
(en er dan een header() regels achter te plaatsen.)


daarnaast is het wel raadzaam om een WHERE aan je update query toe te voegen en ook een setje { } bij je if statement.

Reageren