Beiträge von cottton

    Zitat

    Sie müssen mindestens 6 Zeichen für ihr Password angeben

    Das ist ok. Aber das Formular ist wieder leer und ich muss alles noch mal eingeben =)

    Das kannst Du ändern indem Du die Daten in die Felder setzt, die schon gesendet wurden und valid sind.

    PHP
    <?
    // PHP ...
    
    ?>
    <!-- html ... -->
    
    <input type="text" value="<?php echo isset($_POST['name']) ? htmlspecialchars($_POST['name']) : '' ?>">


    Und das "böse" F5.

    Drück mal F5 bei erfolgreicher Registrierung.

    Dann wird das gleiche Formular (die gleichen Daten) noch einmal via Browser abgesandt.

    EDIT: bei Dir passiert btw alles richtig: die email ist schon vergeben - OK

    Das kannst Du mit header('Location: ...') verhindern.

    Wenn du per PHP also feststellst, dass alles io ist, dann leitest Du den User per header("Location: http://www.example.com/register_success"); um.

    Im Prinzip einfach eine "nichts könnende" Seite, die alleine für die Erfolgsmeldung da ist.

    Such mal im Netz nach erneute formular-übermittlung verhindern

    Für den PasswortHash können keine Variablen eingegeben werden, weil die $-Zeichen im Hash weitere Variablen auflösen wollen

    Entweder verstehe ich Dich falsch, oder Du hast nen Denkfehler 8o

    Der hash ist ein String und steckt in der Variable. Wenn da ein $ im String steckt, dann heit das nicht, dass da versucht wird eine neue Variable zu erstellen.

    Es sei denn Du würdest zB eval($hash) nutzen, aber wozu?

    Der Hash ist immer ein anderer beim password_hash(), da der Salt bei jedem Durchgang neu erstellt wird.

    Deshalb kann man zB nicht

    $hash === $ddHash prüfen, sondern muss password_verify() nutzen.

    (der Salt steck im erzeugten Hash. password_verify kann also den gleichen Salt zum hashen des eingegebenen Passwortes nutzen)

    Lust ja, Zeit manchmal nicht so :D

    Register Script sehe ich nichts falsches.

    Aber im Login Script:

    Könnte hier dran liegen:

    PHP
    $password = filter_var($password, FILTER_SANITIZE_STRING);

    Du veränderst hier die Eingabe des Nutzers.

    Das pw musst Du genau so nehmen, wie es der Nutzer eingibt.

    Oder auch daran:

    PHP
    $fetchRow = $stmt->fetch(PDO::FETCH_OBJ);

    fetch zieht eine row - die nächste.

    Evtl sind schon mehrere Nutzer mit dem Namen in der db.

    Das Script würde hier ggf richtig reagieren, wenn der Nutzername einzigartig sein soll.


    Teste mal:

    Den Filter auf dem pw weg: auskommentieren oder löschen

    und

    PHP
    // ...
    $fetchRow = $stmt->fetch(PDO::FETCH_OBJ);
    var_dump($stmt->rowCount());

    kommt da 1 oder > 1 ?

    Wird evtl zu unübersichtlich.

    Würde ein steuerscript (Controller) empfehlen (oder wie gehabt das Eingangs Script).

    Der prüft halt eben ,ob es überhaupt Eingaben gibt und

    Wenn ja, dann erstellt er ein neues Objekt von deiner Klasse.

    Dann würde ich ein setData() nutzen, in das Du dann zb die Post Daten rein schickst.

    kann leider kein bsp Code geben. Bin auf mobile momentan.

    Da drin setzt Du alle Werte und nutzt die jeweiligen Setter.

    Zb setName.

    setName ist jetzt alleine verantwortlich den Wert auf die Eigenschaft name zu setzen. Der Setter prüft, ob der Wert valid ist, und setzt ihn dann.

    Wenn nicht valid, dann Exception.

    Wenn alle Setter in setData durch sind, dann kannst du von aussen die Berechnung anstoßen.

    Wobei ich hier einen getter empfehlen würde.

    Im bsp getCosts().

    getCosts würde jetzt die Berechnung durchführen und den Wert returnen.

    Statt setData könnte man auch eine Factory nutzen. Eine Klasse, die die Rohdaten bekommt, evtl paar Optionen,

    Und dann das Objekt erstellt, alle Werte über die Setter setzt,

    und das Objekt returnt.

    Ich werde Mal sehen, ob ich Sontag wieder am PC bin. Dann kann ich auch Beispiele liefern ;D

    EDIT: Antwort überschnitten :D Ja so ein Dreher passiert.

    Simpler Fehler - zwei mal $this->gemietetVon genutzt.

    :)

    test:

    cottton nachname sie haben vom 2017-06-23 18:09:36 bis zum 2017-06-25 18:09:36 unser Auto, VW Käfer, mit dem Kennzeichen GR-123ABC gemietet. Die Gesamtkosten liegen bei 240€.

    DateTime http://php.net/manual/de/datetime.diff.php

    Wenn das nicht funktioniert - wie sieht denn das Format aus von den 2 die Du vergleichen willst?

    Ich mag empty nicht so richtig. Ist nicht falsch. Ich vermeide es nur so oft es geht,

    da 0, "", false, null,.... use alles empty ist.

    Zum preg_match - sorry. Ich hab das + vergessen:

    PHP
    preg_match("/^[a-zA-Z]+$/", $vName)

    Pattern:

    Code
    /                    delimiter (start pattern)
        ^                start zeile
            [a-zA-Z]     groß und kleinbuchstaben
            +            und davon 1 oder mehrere
        $                ende zeile
    /                    delimiter (end pattern)

    is_numeric prüft nicht, ob eine Zahl im Wort ist.

    Du hast vergessen Vorname usw zu setzen. Da kann noch kein Fehler sein.

    Für den Vorname-setter würde ich das hier vorschlagen:

    Aso.

    Also 20 Projekte per Seite. Das aber auf der OnePage per scroll getriggert?

    Code
    Meine Seite ... [20 Projekte]
    .
    .
    .
    Meine Seite ... [40 Projekte]
    .
    .
    .
    Meine Seite ... [60 Projekte]

    Das sollte sogar per css only funktionieren.

    Aber das ist nicht meine Welt. Wird aber sicherlich hier jemand wissen.

    Live? Wenn Du oder irgendetwas den Wert ändert, dann soll es live auf der Webseite aktualisiert werden?

    Da fallen mir 2 Sachen ein:

    Ajax call alle n Sekunden,

    oder websocket.

    Websocket ist aber evtl overkill.

    Daher empfehle ich den ajax call.

    Bsp:

    index.html

    data.php

    PHP
    <?php
    echo rand(0, 11111);

    Ajax Bsp von hier genutzt: https://stackoverflow.com/a/20371831/3411766

    Die variable $show_errors ist nicht gesetzt.

    Die kommt nicht in die Methode, und Du setzt sie auch nicht.

    Woher kommt, oder soll denn der Wert kommen?

    Wenn von außen, dann brauchst Du einen zusätzlichen Parameter wie zB

    PHP
     function database ($host, $name, $user, $pass, $show_errors)

    oder besser noch Du setzt den Wert über eine eigene Methode (einen "setter"):

    Du prüfst als erstes, ob if (isset($_FILES['bild'])).

    Die abfrage, ob if (empty($_FILES['bild'])) liegt innerhalb des isset.

    Wenn kein Bild hochgeladen würde, käme das Script an dem ersten isset gar nicht erst vorbei.

    Probier mal das hier:

    Das else ist neu.

    Der $error[] = ... wurde in dieses else verschoben.