Script wordt te vroeg opgevraagd.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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>';
}
?>
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>';
}
?>
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<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>
<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,
Gewijzigd op 21/04/2014 19:34:59 door - Pepijn -
Kijk maar eens goed.
Bedoel je dat die 2e bovenaan bij } else { moet?, even proberen
Nop kijk eens bij regel 11.
Toevoeging op 21/04/2014 19:40:21:
Het script zelf werkt, echter plaatst het niks in mijn database.
Toevoeging op 21/04/2014 19:40:36:
Het werkt!, vergeten af te sluiten :P
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
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>';
endif;
?>
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>';
endif;
?>
Gewijzigd op 21/04/2014 19:41:08 door Wouter Van Marrum
Ach, dit werkt prima
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$debug = true; //zet op false als je de site inline zet voor publiek. Zij hoeven geen lastige foutmeldingen te zien als er iets misgaat.
if ($_SERVER['REQUEST_METHOD']=="POST") {
$result = mysql_query("UPDATE users SET test = '".mysql_real_escape_string($test)."'");
if($result) {
echo '<div id="succes">Your information has been successfully updated! <a href="index.php">Click here</a></div>';
} else {
echo '<div id="error">Er is een fout opgetreden.</div>';
if(isset($debug)) { echo '<div id="error">'.mysql_error().'</div>'; }
}
}
?>
$debug = true; //zet op false als je de site inline zet voor publiek. Zij hoeven geen lastige foutmeldingen te zien als er iets misgaat.
if ($_SERVER['REQUEST_METHOD']=="POST") {
$result = mysql_query("UPDATE users SET test = '".mysql_real_escape_string($test)."'");
if($result) {
echo '<div id="succes">Your information has been successfully updated! <a href="index.php">Click here</a></div>';
} else {
echo '<div id="error">Er is een fout opgetreden.</div>';
if(isset($debug)) { echo '<div id="error">'.mysql_error().'</div>'; }
}
}
?>
Ik raad om deze constructie te blijven gebruiken, en htmlspecialchars alleen te gebruiken bij het tonen van de output.
Er zit goede foutafhandeling in, en het zorgt voor logische afhandeling van formulieren.
Gewijzigd op 22/04/2014 09:46:26 door - Ariën -
naar mijn mening hoort htmlspecialchars() gebruikt te worden in combinatie met "echo" en niet voordat je data in een database zet.
Naar mijn mening ook. En als je dat niet doet, is mysql_real_escape_string niet meer nodig, aangezien htmlspecialchars het al voor je oplost.
Jep, die zag ik over het hoofd.
Telefoon, kan typfouten bevatten
Toevoeging op 22/04/2014 12:04:02:
Het lijktt mij veilger als de real esc string erook in zit.
Telefoon, kan typfouten bevatten
Als je htmlspecialchars gebruikt voor het invoeren in de database vrees ik het tweede....
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?
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/
Toevoeging op 23/04/2014 16:40:12:
--aanvulling:
ik zie dat jij hierboven ook inderdaad eerst SELECT doet en dan pas UPDATE
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.
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.
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?
(Wat betekent nvm?)
(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.