Data wordt niet opgeslagen

  • Heey!


    Vraagje...


    Mijn script werkte voorheen, nu heb ik een paar velden toegevoegd (voornaam,tussenvoegsel,achternaam,woonplaats etc). Nu werkt het nog wel het wordt alleen niet in de database opgeslagen. Kan iemand mij uit de brand helpen?


  • EDIT: stap 0 is natuurlijk het controleren van je errorlogs, kun je hier iets in vinden?
    Ben je ook nagegaan dat $errors leeg is?


    password is een gereserveerd woord, dus wellicht zou die kolom tussen `backticks` moeten staan?


    Voor debugging zou je tijdelijk de header() kunnen verwijderen en mysqli_error() kunnen inspecteren.


    Zou het ook niet beter zijn om enkel een user id op te slaan in de sessie, en elke page-refresh de gebruikersinfo op te halen aan de hand van een id en dan een user object te bakken ofzo? In plaats van dit in je sessie te zetten. Elke keer als je je profiel bijwerkt houdt dit in de huidige opzet ook een potentiële administratieve bijwerkactie van je sessie in. En al die extra administratie is niet nodig als je de informatie gewoon elke pagina ververst (middels een on-the-fly berekend User object).


    Je controleert ook nergens of de query slaagt maar je gooit de nieuwe username zo bam in je sessie :D.


    Ook zou ik registratie en het inloggen zelf splitsen, anders wordt dit een onoverzichtelijke brei. En meer in het algemeen zou je je logica meer in aparte acties kunnen compartimenteren. Elke actie is dan toegespitst op één specifieke handeling. Hoe je dit aan zou kunnen pakken heb ik een blogpost beschreven.


    Daarnaast zou ik geen dingen als $_SESSION['success'] gebruiken, tenzij dit bedoeld is als een soort van flash message, in welk geval ik het $_SESSION['messages'] zou noemen ofzo, om de (zeer) tijdelijke aard van dit soort sessie-inhoud te benadrukken. Dit hele subarray zou ook direct de eerstvolgende page-access geleegd moeten worden nadat deze berichten zijn weergegeven op je pagina.


    Enne, md5() voor password hashing? :/


    Enne, na header('Location: ...') hoort ALTIJD een exit; te staan. Headers zijn onderdeel van output, dus nadat ergens middenin je code header('Location: ...') staat word je niet direct naar de nieuwe locatie getransporteerd, dat gebeurt pas aan het einde van het script. Het aanwezig zijn of het ontbreken van een exit-statement kan het verschil betekenen tussen veilige en onveilige code.


    Je bent gewaarschuwd :evil: .


    Voorbeeld:

    PHP
    <?php
    if (isset($_SESSION['some_required_value']) === false) {
        header('Location: elsewhere.php');
    }
    // gevoelige code die gegevens kan manipuleren
    // ...
    ?>

    Dit is wat er dan achtereenvolgens gebeurt bij aanroep van dit script:
    1. de Location header wordt ingesteld op "elsewhere.php"
    2. de code in het onderdeel "// gevoelige code die gegevens kan manipuleren" >>>WORDT UITGEVOERD <<<
    3. na afloop van het script word je direct doorgestuurd naar "elsewhere.php"


    Daarom is het handig/verstandig om hiervoor een functie/methode te hebben zodat je dit nooit meer per ongeluk vergeet:

    PHP
    <?php
    function redirect($link) {
        header('HTTP/1.1 303 See Other');
        header('Location: '.$link);
        exit; // opdat we dit NOOIT meer vergeten
    }
    ?>

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!