Script wordt te vroeg opgevraagd.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

- Pepijn  -

- Pepijn -

21/04/2014 19:32:17
Quote Anchor link
Hey mensjes, ik heb een script om iets om te slaan in een database, echter werkt deze niet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
}


?>

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>


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 -
 
PHP hulp

PHP hulp

02/05/2024 03:44:33
 
Wouter Van Marrum

Wouter Van Marrum

21/04/2014 19:35:30
Quote Anchor link
Ik zie 2x een if maar 1x ziet er naar mijn idee goed uit.
Kijk maar eens goed.
 
- Pepijn  -

- Pepijn -

21/04/2014 19:36:33
Quote Anchor link
Bedoel je dat die 2e bovenaan bij } else { moet?, even proberen
 
Wouter Van Marrum

Wouter Van Marrum

21/04/2014 19:37:50
Quote Anchor link
Nop kijk eens bij regel 11.
 
- Pepijn  -

- Pepijn -

21/04/2014 19:38:51
Quote Anchor link
Ah, er moet nog een {, even kijken

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
 
Wouter Van Marrum

Wouter Van Marrum

21/04/2014 19:40:48
Quote Anchor link
je kon ook dit doen voor als je denkt dat je te veel "{" krijgt.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;

?>
Gewijzigd op 21/04/2014 19:41:08 door Wouter Van Marrum
 
- Pepijn  -

- Pepijn -

21/04/2014 22:51:57
Quote Anchor link
Ach, dit werkt prima
 
- Ariën  -
Beheerder

- Ariën -

21/04/2014 22:57:44
Quote Anchor link
Dat kan beter.....

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>'; }
    }
}

?>

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 -
 
Ivo P

Ivo P

22/04/2014 09:02:43
Quote Anchor link
naar mijn mening hoort htmlspecialchars() gebruikt te worden in combinatie met "echo" en niet voordat je data in een database zet.
 
Wouter J

Wouter J

22/04/2014 09:09:05
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

22/04/2014 09:45:45
Quote Anchor link
Jep, die zag ik over het hoofd.
 
- Pepijn  -

- Pepijn -

22/04/2014 12:04:01
Quote Anchor link
Het lijktt mij veilger als de real esc string erook in zit.


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
 
Erwin H

Erwin H

22/04/2014 12:09:52
Quote Anchor link
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....
 
- Pepijn  -

- Pepijn -

23/04/2014 16:34:38
Quote Anchor link
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?
 
Ivo P

Ivo P

23/04/2014 16:39:29
Quote Anchor link
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/

Toevoeging op 23/04/2014 16:40:12:

--aanvulling:
ik zie dat jij hierboven ook inderdaad eerst SELECT doet en dan pas UPDATE
 
Ozzie PHP

Ozzie PHP

23/04/2014 16:40:16
Quote Anchor link
>> 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.
 
- Pepijn  -

- Pepijn -

23/04/2014 16:42:56
Quote Anchor link
@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.
 
Ozzie PHP

Ozzie PHP

23/04/2014 16:45:51
Quote Anchor link
>> 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."
 
- Pepijn  -

- Pepijn -

23/04/2014 16:47:34
Quote Anchor link
Ik ben er mee bezig, maar dat lijkt me wel veel gedoe.. Zijn er geen andere mogelijkheden?
 
Ozzie PHP

Ozzie PHP

23/04/2014 16:49:47
Quote Anchor link
Dat is helemaal niet veel gedoe. Probeer het nu eerst eens.

(Wat betekent nvm?)
 
Ivo P

Ivo P

23/04/2014 16:50:35
Quote Anchor link
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.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.