Beiträge von cottton

    Das geht schon beim select los:

    "SELECT * FROM users WHERE email='$email'"

    Wenn $email, was ja über $_POST reinkommt, jetzt den Inhalt

    ' OR id = 1; -- x

    hat, dann wird diese Query daraus;

    SELECT * FROM users WHERE email='' OR id = 1; -- x'

    Und id 1 könnte ja schon mal der admin sein :)


    BTW: ich sehe gerade, dass Du die SELECT-Query abschickst, BEVOR Du $email definierst:

    PHP
    // hier feuerst du die query ab:    
    $result = $mysqli->query("SELECT * FROM users WHERE email='$email'");
    
        $first_name = $_POST['firstname'];
        $last_name  = $_POST['lastname'];
    // aber HIER definierst du $email erst
        $email      = $_SESSION['email'];

    Das heißt, Du suchst nach einer email "".

    So rum sollte es laufen:

    Siehe comments:

    PHP
    if ( $mysqli->query($sql) ) {
        // ...
    } else {
        // hier $mysqli->error nutzen, um fehler mitzubekommen
        // siehe http://php.net/manual/de/mysqli.error.php#refsect1-mysqli.error-examples
    }

    Evtl gibts nen Fehler, den Du nicht ausgibst.

    Achtung: SQL-Injection möglich.

    Verwende PLatzhalter (->prepare(".... where email = ?")) und NICHT variablen direkt in der Query!

    Siehe: http://php.net/manual/de/mysq…repare-examples

    Du nutzt ein komisches format. Nutze besser 'Y-m-d H:i:s' statt Y.m.d H:i:s

    Das hier sollte funktionieren:

    curl_exec gibt true oder false,

    es sei denn Du gibst die Option

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

    an, was Du ja gemacht hast.

    Probier mal die Option beim zweiten Call erneut zu setzen:

    Und was kommt beim var_dump raus?

    Code
    $var = "username=" . $username . "&password=" . $pin . $password";

    bei $password hast Du ein offenes ".

    Setze mal am Anfang des Scripts das hier ein:

    Code
    error_reporting(E_ALL);
    ini_set('display_errors', 1);

    So bekommst Du Fehler gemeldet.

    PHP curl -> login -> Firma

    Bei Firma läuft auch PHP?

    Du hast sicherlich eine Datei, in der eine Session geschrieben wurde.

    Die läuft bei Inaktivität aus. Bei PHP default 1440 Sekunden.

    Normalerweise wird die Session erneuert, bei jedem Aufruf.

    Sind zB 1000 Sekunden vergangen, und Du setzt eine neue Request auf, dann wird die Session "erneuert" und Du hast wieder 1440 Sekunden.

    Um ein Timeout zu umgehen, kannst Du

    1. die Einstellungen bei der Firma ändern,

    oder

    2. aller x Sekunden eine Request absetzen.

    Zu 2. könntest Du einen Endpoint anlegen, der nur dafür da ist, um die Session zu erneuern (refresh).

    Eine Dritte Möglichkeit wäre, bei abgelaufener Session einen erneuten Login durchzuführen.

    Dazu muss aber der Server (Firma) eine Brachbare Meldung zurückgeben.

    Zb Http response: 401 Unauthorized

    Dein Script erkennt dann, dass die Session abgelaufen ist, und setzt einen erneuten Login ab.

    Ich empfehle die re-login Methode (3.).

    Denn egal warum Du nicht mehr eingeloggt bist, Du loggst Dich wieder ein und weiter gehts.

    Ich sehe keinen Fehler.

    Evtl sind die Parameter schuld.

    Mach doch mal ein var_dump auf $plz und $wohnort.

    Du bekommst keinen Fehler, sondern ein leeres array. Das sollte im Normalfall bedeuten, dass es keine Rows gibt, auf die die WHERE-Bedingung zutrifft.

    Ok, dann wie im code in meinem vorigen Post die Platzhalter verwenden.

    Bei der Stelle allerdings SELECT {$sid}, {$id} nutzt Du GET und SESSION values direkt in der Query.

    Ich verstehe nicht, wie das funktionieren soll.

    SELECT 12, 5 FROM ... -- das macht doch keinen Sinn. Es gibt doch sicherlich keine Spalten in der Tabelle dafür.

    Davon mal abgesehen:

    PLatzhalter können nur für values genutzt werden.

    Tabellennamen oder Spaltennamen können also nicht per Platzhalter eingefügt werden.

    Nicht funktionierendes Bsp :

    SELECT :placeholder_foo, :placeholder_bar FROM ...

    Um das aber per Variablen sicher zu gestalten nutzt man zB Whitelists.

    Oder du legst ein Regex drüber, und entfernst alle nicht gültigen Zeichen.

    Hier mal ne funtion, die ich dafür oft benutzt hab:

    PHP
        public function letterNumberUnderscoreOnly($string)
        {
            return preg_replace("/[^\w]/", '', (string)$string);
        }

    Gibt sicherlich noch andere Möglichkeiten.

    Die query und sub-queries versteh ich nicht. Kenn ja den Hintergrund|System nicht.

    Kann auch nix sehen. Sehe keine Tippfehler o.ä.

    Wenn Du keine Werte bei den get-Funktionen bekommst, dann wurden die set-Funktionen wohl nicht ausgerufen.

    Order Du benutzt eine andere Instanz (also zB nicht die var, mit der Du die setter aufgerufen hast).

    nur geraten, fehlt ja code :)

    Edit: Posts überschnitten.

    Poste doch mal den Code, mit dem Du die Klasse ansprichst.

    zB

    PHP
    $object = new MyClass();
    $object->setBookedDays();
    var_dump($object->getBookedDays());

    Noch ein Hinweis zur PDO:

    Man kann 2 verschiedene Arten Platzhalter verwenden (wie im Artikel beschrieben, den Du geposted hast).

    Entweder mit ? (Fragezeichen,) oder per :namen.

    Gewöhne Dir am besten gleich die :platzhalter_mit_benennung an.

    Den Fragezeichensalat like VALUES(?, ?, ?) oder WHERE foo = ? AND bar = ? AND baz = ?

    würde ich mir an Deiner Stelle nicht antun :)

    Die values sind nicht vorhanden, die Du binden willst.

    Mach mal var_dump() auf die row p_id und die session id:

    Ich verstehe allerdings auch nicht, warum es ein INSERT INTO bei einem Button "Show" gibt.

    Evtl wolltest Du dort ein SELECT ?

    Maike1976

    Editiere deinen Post. Du hast die Zugangsdaten geposted!

    $db = @mysql_connect("***"; "***"; "***") or die(mysql_ERROR());

    Das Passwort ist jetzt Müll. Das war öffenlich im Netz. Auf jeden Fall ändern.


    EDIT;

    Zum syntax error:

    Code
    $db = @mysql_connect(
        "**"; // <--     "**"; // <--    "**") or die(mysql_ERROR());

    Semikolon gehört dort nicht hin, sondern Komma

    Code
    $db = @mysql_connect(
        "**", 
        "**", 
        "**")
    or die(mysql_ERROR());

    Wenn Du bei Dir jetzt PHP 7 am laufen hast, wirst Du auf die Schnelle nicht weiterkommen.

    In PHP7 gibt es (wenn ich mich richtig erinnere) keine mysql_ funtions mehr. (nicht mehr unterstützt/zu alt).

    Könntest mit PHP 5.6 testen. Solltest dann aber mysql_ auf mysqli_ oder PDO umstellen.

    mysqli_ http://php.net/manual/de/mysqli.examples-basic.php

    PDO http://php.net/manual/de/pdo.connections.php

    Du hast keine p_id in der $row.

    Aber Du hast eine u_post.p_id.

    BTW:

    Daten die ausgegeben werden immer maskieren.

    Auch, wenn sie aus Deiner db sind.

    zB

    PHP
    <li><h2><?php echo htmlspecialchars($row['username']); ?></h2></li>

    Auch ids und was nicht alles.

    Was ausgegeben wird, wird maskiert.

    :)

    Ich empfehle Dir DATE zu nutzen (Du nutzt bestimmt gerade VARCHAR bei "termin")

    Siehe https://www.php-kurs.com/beispiel-termi…p-und-mysql.htm

    Code
    CREATE TABLE `termine` (  
        `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,  
        `datum` DATE NOT NULL ,  
        `titel` VARCHAR( 256 ) NOT NULL ,  
        `beschreibung` BLOB NOT NULL
    ) ENGINE = MYISAM ;

    `datum` DATE

    Bei Dir ist das Feld "termin" genannt.

    Dein Feld "termin "sollte also so aussehen:

    Code
    `termin` DATE NOT NULL

    Beim einfügen der Daten musst Du dann natürlich auf das Format achten: 'Y-m-d H:i:s'

    (siehe bsp http://php.net/manual/de/date…format-examples)

    Beim lesen der Daten bekommst Du dann zB 2017-10-14 20:25:00

    Das entspricht Jahr-Monat-Tag Stunden:Minuten:Sekunden

    Das lässt sich dann auch leicht sortieren.

    (Natürlich kannst Du auch schon beim Auslesen der Daten sortieren. zB "SELECT * FROM `table` WHERE ... ORDER BY `termin` ASC;")