Beiträge von cottton

    value=<?php echo $z; ?>"
    fehlendes "
    2 mal

    type=text name=arbeitszeit size=20

    ...
    ich suche nicht Deinen code nach Syntaxfehlern ab.
    Wenn was nicht geht, dann gibts Fehlermeldungen. Anhand davon kann man herraus finden, was das Problem ist.

    Du musst echt erstmal alles "Aufräumen".
    Du nutzt immer noch
    $db->error()
    was es nicht gibt.
    Es muss
    $db->error
    heißen, denn es ist eine Variable.

    Und sowas hier
    $erg1 = $db->query ($sql1)
    was machen die 1en dort?

    type=text name=id_projekt size=10
    wo sind die "

    und und und

    (poste php code in nicht in sql)

    Es kommt nix, weil:

    HTML
    name=id_monteur  size=10 value

    Und was ist das mit den 100 tr oO?

    Du musst Dir Deinen code auch mal genauer ansehen.
    Sowas hier:

    PHP
    echo $


    ...

    Das war schon fast richtig. (obwohl es kein "richtig" gibt, denn viele Wege ...)
    So würde ich es machen: (ein while ist mMn "schöner" als ein do while)

    Kommt daraus an, wie Du sie ausgeben willst.
    In der gleichen Zelle? Oder alle in einer eigenen Zelle?

    Ich denke mal Du hast ein Array aus der DB wie zB

    Code
    array(
        0 => array( 'datum' => ..., 'dies' => ..., 'das' => ...),
        1 => array( 'datum' => ..., 'dies' => ..., 'das' => ...),
    ...
    )


    dann machst Du für jedes (foreach()) zB

    PHP
    foreach($db_datensaetze as $key => $array)
    {
        $pdf->Cell (30, 0, "Text mit " . $array['datum'] . " und " . $array['dies'] . " und " .$array['das'] , 0, 0, 'L');   
    }

    Wieso vorbei?
    Du versuchst PHP code, der in der Datenbank in Tabellenfeldern steht, zu laden und auszuführen.
    Das geht (ohne eval()) nicht.

    Teste das mal:
    erstelle mal eine neue Datei (zB test.php)
    und kopiere das hier rein:

    PHP
    <?php
    $a = "echo 5+5;";
    echo $a;
    ?>


    Wenn Du die Datei ausführst, dann wird nicht 10 ausgegeben, sondern der String "echo 5+5;"

    Werte:

    Wenn Du einen String erstellst wie zB:
    "echo $a;"
    Dann ist das ein String (Zeichenkette), aber kein PHP code.

    Ach, na jetz sehe ich erst was Du da machst :D
    Du kannst keinen PHP code aus einem String (db gibts Strings (Daten) zurück) ausführen.
    Genau genommen geht das (eval()) ist aber nicht zu raten, weil man evtl ein Scheunentor öffnet.

    Du solltest besser Werte in die Tabelle schreiben.

    PHP
    // anstatt:
    if($_SERVER[''PHP_SELF''] == 'index.php') echo 'class="active"'
    // in die tabelle zu schreiben, schreibst Du den Wert, der dabei raus kommt in die Tabelle
    if($_SERVER[''PHP_SELF''] == 'index.php') $wert = 'class="active"';


    also $wert (dessen Inhalt) imn die Tabelle

    Zitat

    und zwar mit mein PHP Code der aus der Datenbank kommt nicht ausgeführt sondern wie HTML ausgeben, sprich wenn ich im Quellcode schaue steht dieser 1zu1 da.


    Wenn PHP code im HTML (also im Quelltext der Seite) steht, dann wird der PHP code nicht interpretiert (nicht ausgeführt).
    Daher mein erster Verdacht auf eine .html Datei.

    Teste mal in der Datei ganz am Anfang ein <?php echo phpinfo(); ?>

    Ich sehe Du hast wohl immer ->query() genutzt.
    Damit kann man keine Parameter/Platzhalter in der Sql-Anweisung nutzen.

    Was hier passiert ist ist folgendes:
    Du hast $sql prepared,
    parameter NULL und NULL gebunden (denn $suchstr hast Du UNTER der Anweisung definiert!),
    dann die methode ->query benutzt, welche gar keine Platzhalter (die ?) unterstützt.

    Das kann nicht funktionieren.

    Immer wenn Du Platzhalter (die ?) nutzt, musst Du parameter übergeben/binden mit ->bind_param()
    und mit ->execute() die Anfrage ausführen.
    Guck mal hier:

    Hatte die halbe Einleitung von lauras geklaut :p
    Es gibt ja Anfänger und Anfänger. Ich würde sagen, wenn jemand mit Sql Queries klar kommt, dann wird er auch schon durch sehen.
    EDIT: btw - hier ist noch nix mit "persistent connection". Wollte ich erstmal außen vor lassen. Mach ich evtl morgen.
    Erweiterung "Persistente Verbindung"
    Was ist das?


    (Details siehe: http://php.net/manual/de/pdo.connections.php#example-869 (Beispiel #4 Persistente Verbindungen))

    Was bringt mir das?
    Kurz und einfach:
    Schnellere Reaktionszeiten der Webseite.
    Denn ist beim Seitenaufruf der Verbindungsaufbau zum Sql-Server "schneller", ist das Script eher abgearbeitet.

    Ändern der Sql::connect() Methode für Persistente Verbindungen:
    Als erstes brauchen wir einen neuen parameter $pers_con
    Dieser ist standardmäßig false, da es sich hier um eine zusätzliche Option handelt.

    PHP
    public static function connect($host, $username, $password, $database=null, $pers_con=false)


    In der Methode ::connect() geben wir nun dem __construct der in PHP vordefinierten klasse PDO
    (siehe: http://php.net/manual/de/pdo.construct.php)
    einen vierten Parameter mit.
    Genauer genommen übergeben wir ein Array (array $options) über die wir gleich mehrere Parameter übergeben können.

    Das Array:

    PHP
    array(
        PDO::ATTR_PERSISTENT => $pers_con
    )


    Was wir hier übergeben ist die vordefinierte Konstante PDO::ATTR_PERSISTENT als Schlüssel des Arrays,
    und die Variable $pers_con als Wert, die wir über unseren fünften, neuen Parameter bekommen.
    (Eine Liste der Vordefinierten Konstanten gibt es hier: http://php.net/manual/de/pdo.constants.php,
    und speziell für Mysql-Funktionen hier: http://php.net/manual/de/ref.pdo-mysql.php)

    Einfügen/Anhängen der neuen Option beim Verbindungsaufbau:
    Die Kommentare "NEU: array $options" können natürlich weggelassen werden


    Das wars.
    Jetzt muss nur noch beim Verbindungsaufbau der neue Parameter (ein boolean true) mitgegeben werden,
    falls wir eine Persistente Verbindung wünschen:

    PHP
    try{
        Sql::connect('localhost', 'benutzername', 'password', 'database', true);
    }catch(Exception $e){
        die('Verbindung konnte nicht hergestellt werden. Fehler: ' . $e->getMessage());
    }


    Wäre dann nur noch der Fall, dass man beim Verbindungsaufbau keine Datenbank angeben möchte.
    Dann gibt man momentan einfach den Wert NULL (oder false) an:

    PHP
    try{
        Sql::connect('localhost', 'benutzername', 'password', null, true);
    }catch(Exception $e){
        die('Verbindung konnte nicht hergestellt werden. Fehler: ' . $e->getMessage());
    }


    Es ist aber auch möglich die Reihenfolge der Parameterübernahme in der Methode ::connect() zu ändern:

    PHP
    // vertauschen der parameter $database <==> $pers_con
        public static function connect($host, $username, $password, $pers_con=false, $database=null)


    Der Verbindungsaufbau sieht dann so aus:

    PHP
    try{
        Sql::connect('localhost', 'benutzername', 'password', true);
    }catch(Exception $e){
        die('Verbindung konnte nicht hergestellt werden. Fehler: ' . $e->getMessage());
    }


    _________________________________________________________________________

    Erweiterung "Initial Commands"
    Was ist das?

    Zitat von http://php.net/manual/de/ref.pdo-mysql.php


    Command to execute when connecting to the MySQL server. Will automatically be re-executed when reconnecting.

    Note, this constant can only be used in the driver_options array when constructing a new database handle.


    Frei übersetzt heißt das: beim Verbindungsaufbau (und nur dann) können wir Befehle mitgeben.

    Was bringt mir das?
    Kurz und einfach:
    Schnellere Reaktionszeiten der Webseite.
    Warum?
    Würden wir die Befehle nach dem Verbindungsaufbau als einzellne Queries an den MySQL-Server senden,
    dann hätten wir für jede dieser Queries:
    - php prüft und sendet die Query (Packet) an den MySQL-Server
    - MySQL-Server empfängt und prüft die Query (Packet), führt sie aus und sendet das Ergebnis zurück
    - php empfängt und prüft das Ergebnis (Packet)


    Ändern der Sql::connect() Methode für Initial Commands:
    Als erstes brauchen wir einen neuen parameter $init_cmd
    Dieser ist standardmäßig null, da es sich hier um eine zusätzliche Option handelt.
    null anstatt false:
    der Parameter $pers_con stellte einen Zustand (ein/aus) dar,
    der Parameter $init_cmd kann aber kann Inhalte transportieren, oder nichts (also null)

    PHP
    public static function connect($host, $username, $password, $database=null, $pers_con=false, $init_cmd=null)


    In der Methode ::connect() geben wir nun dem __construct der in PHP vordefinierten klasse PDO
    (siehe: http://php.net/manual/de/pdo.construct.php)
    dem vierten Parameter (dem Array (array $options)) eine weitere Ebene ("Schlüssel => Wert" Paar) mit:

    Das Array:

    PHP
    array(
        PDO::ATTR_PERSISTENT => $pers_con // bekannt von: Erweiterung "Persistente Verbindung",
        PDO::MYSQL_ATTR_INIT_COMMAND => $init_cmd // hier unsere Erweiterung für Initial Commands
    )


    Was wir hier übergeben ist die vordefinierte Konstante PDO::MYSQL_ATTR_INIT_COMMAND als Schlüssel des Arrays,
    und die Variable $init_cmd als Wert, die wir über unseren sechsten, neuen Parameter bekommen.

    Einfügen/Anhängen der neuen Option beim Verbindungsaufbau:
    Die Kommentare "NEU: $init_cmd" können natürlich weggelassen werden


    Das wars.
    Jetzt muss nur noch beim Verbindungsaufbau der neue Parameter (ein String) mitgegeben werden,
    falls wir Initial Commands nutzen möchten:

    PHP
    try{ 
        Sql::connect('localhost', 'benutzername', 'password', 'database', true, "sql_mode = 'STRICT_ALL_TABLES';");
    }catch(Exception $e){
        die('Verbindung konnte nicht hergestellt werden. Fehler: ' . $e->getMessage());
    }


    Wie bei Erweiterung "Persistente Verbindung" kann man die Reihenfolge der Parameter anpassen.

    Was ist "sql_mode = 'STRICT_ALL_TABLES'"; ?
    sql_mode ist eine Variable des MySQL-Servers.
    Hier setzen wir also die Variable sql_mode auf den Wert STRICT_ALL_TABLES.
    Was passiert dann?

    Zitat von http://dev.mysql.com/doc/refman/5.1/en/sql-mode.html#sqlmode_strict_all_tables


    Enable strict mode for all storage engines. Invalid data values are rejected. Additional details follow.


    Falsch Daten werden also zurückgewiesen.
    Was sind Falsche Daten?
    Bsp: (Voraussetzung: wir haben sql_mode auf 'STRICT_ALL_TABLES' gesetzt)
    Wir erstellen eine Tabelle `test`.
    In dieser Tabelle erstellen wir eine Spalte `zahl` vom Typ int().
    Sollten wir nun "ausversehen" eine Query an den MySQL-Server senden, die einen Buchstaben "a" als Wert für `zahl` setzt,
    bekommen wir einen Fehler: "Error Code: 1366. Incorrect integer value: 'a' for column 'zahl' at row 1".
    Der MySQL-Server hindert uns jetzt also daran einen falschen Wert einzutragen (und das ist auch gut so!).

    Was passiert ohne 'STRICT_ALL_TABLES'?
    Wir würden dem Feld `zahl` einen Buchstaben aufdrücken, was aber nicht funktioniert.
    Die Zeile würde eingefügt werden, allerdings mit dem Wert (Typ) NULL.
    Der MySQL-Server würde nicht meckern, gibt ein ~"ok, hab fertig", und wir wissen nicht, was wir falsch gemacht haben.

    Auch zu lange Werte werden abgewiesen. Wenn zB ein Feld `buchstabe` ein Wert "abc" zugewiesen bekommen soll.
    Dann meldet sich er MySQL-Server mit der Fehlermeldung: "Error Code: 1406. Data too long for column 'buchstabe' at row 1".

    Es mach also Sinn, und das Fehler finden einfacher.
    genaueres zu sql_mode: http://dev.mysql.com/doc/refman/5.0…sysvar_sql_mode


    Empfehlung:


    Was sind das für Anweisungen?
    sql_mode = 'STRICT_ALL_TABLES': bereits darüber beschrieben
    NAMES 'utf8': (siehe: http://dev.mysql.com/doc/refman/5.0…connection.html)
    SET CHARSET 'utf8': (siehe: http://dev.mysql.com/doc/refman/5.0…connection.html)