Beiträge von cottton

    ja sorry, muss man ja wieder bind nutzen -.-


    Ich sag ja - nur fummelei dieses mysqli :p

    Korrekt, und damit unsinnig. Wusste ja nicht, ... egal.

    Dann solltest Du bei dem bleiben, was Du momentan nutzt.
    Am besten mal von vorn: weg von object - hin zu $data['name']

    Lass Dich nicht von dem vielen Code verwirren, Was da drin passiert kann Dir erstmal egal sein.
    Du musst nur wissen, dass Du mit ->connect(...) eine Verbindung herstellst, und mit ->exe() die sql Query ausführst.

    Kopier Dir einfach den Code von oben mal in ein neues Script und führe es aus.
    Dann änderst Du zB:

    PHP
    $db = new Sql(); 
    $db->connect('localhost', 'username', 'password', 'database'); 
    $sql = "SELECT l_id, l_titel, l_titel_url, l_header, l_header_titel, l_inhalt FROM web_leistungen WHERE l_titel_url = :titel_platzhalter"; 
    $para = array(
        'titel_platzhalter' => 'objektschutz'
    );
    $data = $db->exe($sql, $para);

    Die Klasse kann alleine in einem File liegen und mit require_once eingebunden einmal werden.
    Dann connectest Du einmal und feuerst fröhlich Deine Sql-Anfragen an den Sql-Server =)

    Naja, Deine erste Funktion bezog sich auf das Ausgeben von einem Datensatz.
    Wenn Du mehrere Datensätze (Zeilen aus der Tabelle) erwartest, dann muss man umbauen.

    Zu Deiner Frage: ja, evtl ist es einfacher, wenn Du die Abfragen direkt in die PHP Files schreibst.
    Dann hast Du jederzeit den Überblick, was da gerade passiert, und kannst auch mal schnell was anpassen.

    Nimm mal das hier - eine einfach Klasse um irgendwas aus der db zu "holen":

    Wenn Dir bei Gelegenheit die Klasse genauer ansiehst und fragen hast - einfach fragen =)

    Also hier funktionierts.
    Aber siehe: (Kann Dir jetzt aber erstmal egal sein) http://php.net/manual/en/mysqli-stmt.get-result.php

    Zitat

    Available only with mysqlnd.


    (Spiel Spass mit mysqli :p )
    ___________________
    Aber lass Dich von mir nicht verrückt machen =)
    Guckst Du hier:

    Ja, der Kack ... ich mag den mysqli Quark nich. Zu viele "Bastelei" um ein einfaches Thema: Daten vom Sql Server holen.
    Siehe http://php.net/manual/de/book.mysqli.php -- unendlich viele Funktionen ... egal, Ansichtssache. (trotzdem der Tipp: http://php.net/manual/de/book.pdo.php)

    PHP
    function leistung($mysqli, $wo) {
        $stmt = $mysqli->prepare("SELECT l_id, l_titel, l_titel_url, l_header, l_header_titel, l_inhalt FROM web_leistungen WHERE l_titel_url =?");
        $stmt->bind_param("s", $wo);
        $stmt->execute(); 
     
        $res = $stmt->get_result(); // <- das hier hatte gefehlt
        return $res->fetch_object(); 
    }
     
    $entry = leistung($mysqli, 'objektschutz');

    sorry, hatte die Zeile übersehen:

    PHP
    $stmt->bind_result($l_id, $l_titel, $l_titel_url, $l_header, $l_header_titel, $l_inhalt);


    Du holst das Ergebnis in einer Funktion, die dann

    PHP
    return $stmt->fetch();


    ausgibt.
    Die Vars $l_id ect sind also in der Funktion "gefangen". Und wenn die Funktion ausläuft, sind die Vars "weg".

    Eine Möglichkeit wäre:

    Da Du aber glaube ich das Ergebnis als Object haben willst (ist auch einfacher):

    PHP
    function leistung($mysqli, $wo) {
        $stmt = $mysqli->prepare("SELECT l_id, l_titel, l_titel_url, l_header, l_header_titel, l_inhalt FROM web_leistungen WHERE l_titel_url =?");
        $stmt->bind_param("s", $wo);
        $stmt->execute(); 
     
        return $stmt->fetch_object();
    }
     
    $entry = leistung($mysqli, 'objektschutz');

    kann eigentlich sicher sein, dass das Limnit von einem User nicht manipuliert werden kann, wird ja kein GET oder POST übergeben, aber sicher ist sicher.


    Korrekt, denn später änderst Du mal was am Code und hast "vergessen", dass Du NICHT geprüft hast =)
    (deswegen ja auch mein Kommentar: Ein Limit einbauen)

    Zwecks include_once (oder include, require, require_once):
    Stell Dir vor, dass der Code aus der eingebundenen Datei an diese Stelle geschrieben wird. (denn im Grunde passiert das)

    EDIT2:
    Das Problem liegt nicht an Win/Linux, sondern an PHP 5.5.15 <> PHP 5.6.2.
    pack() liefert auf PHP 5.6.2 entweder Multibytes,
    oder mb_ functions sind auf PHP 5.6.2 buggy.

    Fakt:
    PHP 5.5.15 -- mb_strlen( pack("I", 194) ) === 4
    PHP 5.6.2 -- mb_strlen( pack("I", 194) ) === 3

    Was genau jetzt hier falsch läuft weiß ich noch nicht.


    EDIT:
    Kürzer:
    warum bekomme ich auf "nicht Windows" 3 byte wenn $sequence >= 194 ?
    bsp:


    EDIT END

    Moin,
    weiß jemand was ich hier nicht sehe oder weiß?
    Die Funktion encodeHeader() sollte eigtl immer 4 byte zurückgeben - macht sie auch auf Windows (xampp).
    Aufm Linux Server nicht. Da bekomme ich IMMER ab $sequence 194 nur 3 byte (nutze mb_strlen()) -
    obwohl (und das versteh ich überhabt nicht) vardump() einen string von 4 ausgibt.
    output Bsp:

    Zitat


    $sequence: 194
    $packed_header: mb_strlen: 3
    var_dump($packed_header): string(4) "�@"


    Wie gesagt - Auf win xampp bekomm ich immer 4 byte. Warum aber nicht bei Linux?

    Evtl kann mir auch jemand gleich erklären was ($sequence + 1) & 0x3fffffff bewirkt =)

    tip am Rande: falls $sort und/oder $limit von außen (vom Benutzer) kommen kann:

    Moin,
    hab da ein Problem mit einer Maskierung.
    Ich bekomme über Socket maskierte Pakete die (logisch) demaskiert werden müssen.
    Läuft alles soweit, außer bei einem "Drittanbieter-Paket".

    Die Gegenstelle (der Server) sendet immer schön nach Protokoll seine Pakete.
    Aber irgendwann kommt "da drüben" ein Drittanbieter ins Spiel. Der übergibt wohl dem Server seine Pakete um sie senden zu lassen.
    Dadurch wird das komplette Protokoll über den Haufen geschmissen und das Paket kommt als raw String beim Client (also bei mir) an.

    Das Problem: ich finde nirgends (seit ner Woche) das Protokoll oder irgend einen Hinweis, wie der Drittanbieter seine Pakete maskiert.

    Versuchs noch mal kurz:
    Fall "normal":
    Server sendet Paket maskiert.
    Client (ich) empfange Paket (manchmal über mehrere Lesevorgänge) und demaskiere das Paket.
    Alles OK.

    Fall "Drittanbieter":
    Server sendet Paket maskiert - aber dieses Mal bekam Server Daten vom Drittanbieter zum Senden und
    - sendet erstes nach Protokoll (kann demaskiert werden)
    - sendet alle weiteren Pakete als raw String

    Dieser raw String enthält jetzt mehrere Pakete dessen Protokoll ich nicht kenne.
    Hab schon festgestellt, dass dieser raw String die Pakete per "\n" trennt.
    Also bekomme ich die Drittanbieter Pakete einzeln aus dem raw String heraus.

    Das Problem ist wie gesagt: ich weiß nicht, wie ich diese Pakete demaskieren kann.

    Bsp für ein "ordentliches" Paket nach Protokoll:

    Code
    0000 0040 3800 0000 0200 0000 0200 0000 4f4b 0020 0000 0031 4231 3839 3831 3530 3441 3443 4232 4234 4232 3237 3435 3634 3134 4436 4143 3700


    decode zb hier: http://www.string-functions.com/hex-string.aspx

    Wenn ich das Paket demaskiere bekomme ich:

    Code
    // $this->unmask($this->hexstr($str)) -- hex to string, dann unmask
    Array(
        [0] => OK
        [1] => 1B18981504A4CB2B4B227456414D6AC7
    )


    Also alles OK.

    Das "Problem-Paket" ist im Anhang, da einfach zu groß. (Anhang hier: html-seminar.de/woltlab/attachment/739/)
    Wenn ich das von hex to string Konvertiere bekomme ich:


    Das sind nun alles Pakete die per "\n" verbunden wurden.
    Dabei ist das erste (erste Zeile) ein Paket nach Protokoll und kann wir gewohnt demaksiert werden (ich bekomme mein Array).
    Alle anderen sind nun allerdings unbekannt maskiert.

    Hat jemand eine Idee, wie ich die Maskierung heraus bekomme?

    habs jetzt nicht getestet, aber ich glaube da fehlt ein Leerzeichen:

    PHP
    // anstatt:
    header("Location:" . $zeile["link"]);
    // das hier:
    header("Location: " . $zeile["link"]); // leerzeichen nach Location:


    Und wie The Scout schon sagte: VOR der ersten Ausgabe. Dazu zählt auch eine warning oder notice die von PHP geworfen werden.
    Nicht mal ein Leerzeichen darf vorher an den Browser gehen.
    siehe: http://de2.php.net/manual/de/function.header.php

    immer prüfen, was an e-msgs oder stauscode geliefert wird.


    ich bekomme

    Zitat

    Error: SSL certificate problem: unable to get local issuer certificate


    kenne die Seite aber nicht, ...
    musst halt mal sehen, was Du an status oder emsg bekommst.