+ Antworten
Ergebnis 1 bis 18 von 18

PHP Projekt - Formulardaten zur Datenbank übergeben (Xampp)

Eine Diskussion über PHP Projekt - Formulardaten zur Datenbank übergeben (Xampp) im Forum Technik Ecke. Teil des Off Topic-Bereichs; Haudi! Ich habe ein Problem mit meinem PHP Projekt. Ich sitze hier nun mehr den ganzen Tag auf der Arbeit ...

  1. #1
    Feldwebel
    Avatar von cifixi0n
    Registriert seit
    30.12.2002
    Ort
    Dortmund
    Alter
    31
    Beiträge
    1.459
    Name
    Christian
    Nick
    Cifixi0n

    PHP Projekt - Formulardaten zur Datenbank übergeben (Xampp)

    Haudi!

    Ich habe ein Problem mit meinem PHP Projekt. Ich sitze hier nun mehr den ganzen Tag auf der Arbeit und habe noch rein gar nichts zu stande gebracht, weil ich einfach nicht weiss wie.
    Bitte keine Links auf Tutorials oder dergleichen. Ich brauche etwas "handfestes".
    Falls jemand eine Idee oder dergleichen hat... bitte den Code modifizieres bzw. posten.

    Das Hauptproblem stellt die Verbindung mit der Datenbank dar. Im PHP Code soll über ein Formularfeld Eingaben getätigt und an die Datenbank übergeben werden.
    Wie bereits erwähnt fehlt mir einfach das Wissen wie ich vorgehen muss, da ich völlig Talentfrei in Sachen Anwendungsentwicklung bin.

    Als Datenbank/Webserver dient Xampp in einer lokalen Umgebung.
    Ich habe die Datenbank (Zusätzlich alle Tabellen einzeln als Bild), alle PHP Dateien sowie eine Projektbeschreibung im Anhang dazugelegt.
    Die Beschreibung hier direkt zum einsehen:

    _____________________________________________________________________

    ----Artikeldatenbank mit Frontend--- (Warenkorb)

    -Die Datenbank wird mit SQL gestaltet.
    -Das Frontend wird per Quelltext im Browser realisiert. (.htm / .php Dateien)

    Das Programm soll die Möglichkeit bieten, einen Preisvergleich - unterschiedlicher Hersteller - durchzuführen.

    Datenbank:
    artikeldb

    Gelistete Tabellen:
    adresse, haupttab, lieferant

    Gelistete Objekte in Tabelle "adresse":
    Hersteller, Sitz, Ansprechpartner, Telefonnummer, Email, Strasse, Hausnummer, Ort, Plz, HerstellerID

    Gelistete Objekte in Tabelle "haupttab":
    ID, Warenart, Produkt, HerstellerID, Preis, Artikelnummer, Verfuegbarkeit, Herstellungsdatum, Lieferkosten, Lieferant, Gesamtpreis

    Gelistete Objekte in Tabelle "lieferant":
    Name, strasse, ort, plz, lieferantID

    Beschreibung des Ablaufs:

    Startseite wird aufgerufen.
    Die Buttons (Neuen Händler hinzufügen), (Neue Ware hinzufügen), (Günstigstes Angebot ermitteln),
    (Session speichern) und (Session abrufen) stehen zu Beginn zur Verfügung.
    Über (Neuen Händler hinzufügen) können über Eingabefelder Händler in die SQL Datenbank hinzugefügt werden.
    Über (Günstigstes Angebot ermitteln) wird die Berechnung des günstigsten Artikels der Händler durchgeführt und ausgegeben.

    Über (Session speichern) werden alle Sessions gelistet mit den dazu gehörigen Objekten.
    Über (Session abrufen) können alle bereits abgespeicherten Session eingesehen werden.


    Jede Session ist einzeln anwählbar und gibt Auskunft über die Objektdaten.
    Mit Auswahl der Session wird der Gesamtpreis der jeweiligen Hersteller deutlich vorgehoben und der günstigste Anbieter
    unterstrichen.

    *Mit Sessions sind abgeschlossene Preisvergleiche mit Hersteller und Preisangaben Datensätze gemeint.*


    Möglichkeiten des Anwenders:

    Der Anwender soll in der Lage sein, sämtliche Daten anzulegen, zu verändern oder zu löschen.
    Alles mithilfe von Schaltflächen.
    ____________________________________________________________________

    Danke für alle Hilfen und Bemühungen!
    Angehängte Dateien Angehängte Dateien

  2. #2
    Obergefreiter
    Avatar von d4rkkenny
    Registriert seit
    22.11.2002
    Alter
    29
    Beiträge
    218
    Hi,

    ich hab nur mal ganz kurz drüber geschaut.

    Also:

    Bei deiner eingabe.php
    Warum machst du um jedes input in seperates form tag, welches noch nichtmal wieder geschlossen wird?

    Es reicht doch eine form in die du dann deine ganzen inputs packst
    Bsp.:
    Code:
    <form action="verarbeitung.php">
        <input type="text" name="feldname1" />
        <input type="text" name="feldname2" />
        <input type="text" name="feldname3" />
        <input type="submit" name="speichern" value="Speichern" />
    </form>

    Nachdem du in der verarbeitung.php die db-connection offen und und die db selektiert hast kannst du du über mysql_query den sql-insert schicken.

    Zugriff auf deine übergebenen input-werte erhälst du entweder übert $_GET wenn du "gettest" über $_POST wenn du "postest" oder unabhängig von der methode über $_REQUEST.

    Um z.b. an den eingabewert von feldname2 zu kommen $_REQUEST['feldname2']

    und ein insert sieht dann z.b. so aus:

    Code:
    $query = "INSERT INTO meinetabelle ('tbl_feld_name', 'tbl_feld_name2', 'tbl_feld_name3') VALUES ('".mysql_escape_string($_REQUESt['feldname'])."', '".mysql_escape_string($_REQUESt['feldname2'])."', '".mysql_escape_string($_REQUESt['feldname3'])."', )";
    
    mysql_query($query) or die('insert failed: '.mysql_error().' | '.$query);

  3. #3
    Oha, da müssen wir wohl einige Punkte durchgehen. Da ich jedoch schon sehr müde bin werde ich es einmal nur grob erklären.




    Bei fast jedem PHP Projekt bietet es sich an eine Datei zu erzeugen, welche von jeder weiteren Datei eingebunden wird und grundlegende Definitionen und Funktionen stellt.

    Um eine gute Projektstruktur zu bewahren legen wir dazu zunächst einen neuen Ordner namens include an.
    Code:
    mkdir include
    Des Weiteren werden wir einen Ordner für unsere Templates und ggf. vorhandene Bilder benötigen
    Code:
    mkdir image
    mkdir template
    Sofern später noch die Nutzung von Javascript, CSS, externen Systemen oder eine Sprachverwaltung geplant ist würde ich folgende weitere Ordner hinzufügen (ggf. auch nur eine Auswahl davon)
    Code:
    mkdir css
    mkdir external
    mkdir javascript
    mkdir translation
    Im Hauptverzeichnis sollten sich nur diejenigen Dateien befinden, welche man später auch direkt aufrufen soll.


    Danach erzeugen wir eine neue PHP-Datei namens global.php
    Code:
    notepad include/global.php
    Falls ihr einen Editor wie notepad++ oder eine IDE bevorzugt könnt ihr natürlich auch diese nutzen.
    Sofern es in eurem Editor möglich ist würde ich empfehlen die Formatierung auf "UTF-8 ohne BOM" einzustellen.

    In dieser Datei werden wir zunächst den Pfad zum Hauptverzeichnis und unsere Verbindung zur Datenbank erzeugen.

    Wir werden die Datenbankverbindung im Zeichen der Zeit mit PDO realisieren.
    PDO stellt im Rahmen von PHP derzeit die Erweiterung dar, welche im Umgang mit gängigen Datenbank genutzt werden sollte.

    1.  
    2. <?php
    3. define('DIR', dirname(__FILE__) . '/..');
    4.  
    5. $Database = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');
    6.  
    Dieder Quelltext sorgt dafür, dass eine Verbindung zur Datenbank "database" mit dem Nutzer "user" und Kennwort "password" hergestellt wird, auf welche wir über "$Database" zugreifen können.

    Der eine oder andere wird sich nun vllt. fragen, warum diese Datei nicht mit "?>" endet. Dies liegt daran, dass sämtlicher Inhalt einer PHP Datei der nicht von "<?php ?>" (oder Abkürzungen wie "<? ?>", "<% %>") eingeschlossen wird direkt ausgegeben wird.
    Da man jedoch versehentlich sehr schnell ein Leerzeichen an das Ende seiner Datei platziert ohne dies zu bemerken würde dies zu einer ungewollten Ausgabe führen, was nicht nur das Layout unkorrekt oder unschön machen könnte, sondern auch eine spätere Änderung des Headers unterbindet, was z.B. zum erzeugen von Cookies / Sessions wichtig ist.
    Wenn man nun also "?>" weglässt bedeutet dies für den PHP-Interpreter, dass der gesamte Rest als PHP zu verstehen ist.

    Um nun die erste Ausgabe zu erzeugen werden wir zunächst ein Template erstellen und danach eine PHP-Datei, welche dieses Template ausgibt.
    Zusätzlich werden wir das aktuelle Datum eintragen lassen.
    Code:
    notepad template/index.html
    1.  
    2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3. <title>Mein eigenes Webprojekt</title>
    4. </head>
    5. Es ist der <?=date('d.m.y') ?>.
    6. Heute habe ich meine erste eigenen HTML-Seite erzeugt.
    7. </body>
    8. </html>
    9.  

    Es ist herbei zu beachten, dass der gängige W3C Standard vorschreibt, dass wir zunächst einen DTD definieren.
    Des Weiteren sollte man nicht nur in PHP-Dateien, sondern auch hier auf einen guten Einrückstil achten.

    Nähere Informationen zu HTMl gibt es übrigens bei SELFHTML.

    Wie man leicht erkennt haben wir direkt HTML mit PHP gemischt. Dies war sehr lange ein Unding, was jedoch dazu geführt hat, dass man PHP nie selbst als sehr mächtige Template-Engine verstanden hat. Diese Technik ist unteranderem durch Artikel wie "Beyond the Template-Engine" abermals bekannt geworden.

    Kommen wir nun zu unserer PHP-Datei.

    Code:
    notepad index.php
    1.  
    2. <?php
    3. require DIR . '/template/index.html';
    4.  
    Ein Aufruf dieser Datei sollte nun unser zuvor erstelltes Template ausgeben.

    Da es nun des Öfteren dazu kommen wird, das wir obiges Gerüst benötigen macht es Sinn dies als Komponente zu definieren.
    Dazu werden wir nun innerhalb unsere Template-Ordners einen weiteren Unterordner erstellen.

    Code:
    cd template
    mkdir include
    Als Konvention werden würde ich festlegen, dass nur diejenigen Dateien Templates innerhalb von /template/include aufrufen dürfen, welche sich in /include befinden.


    Wir zerlegen nun unsere index.html in zwei einzelnen Dateien, einer global.html in /templates/include und unserer bestehenden index.html in /template.

    Code:
    notepad template/index.html
    1.  
    2. Es ist der <?=date('d.m.y') ?>.
    3. Heute habe ich meine erste eigenen HTML-Seite erzeugt.
    4.  

    Code:
    notepad template/include/global.html
    1.  
    2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    3. <title>Mein eigenes Webprojekt</title>
    4. </head>
    5. <?=$body ?>
    6. </body>
    7. </html>
    8.  

    Damit wir nun aber überhaupt ein Template in die Variable "$body" zu speichern werden wir zunächst eine kleine Template-Funktion schreiben. Generell würde ich an dieser Stelle eine Klasse vorziehen, aber OOP sparen wir uns lieber für das nächste mal auf.

    Wir werden der Funktion sowohl den Namen der zu verarbeitenden Template, als auch die verwendeten Variablen übergeben.

    Code:
    notepad include/template.php
    1.  
    2. function fetch_template($filename, array $vars = array())
    3. {
    4. $filepath = DIR . '/template/' . $filename;
    5.  
    6. if(!file_exists($filepath))
    7. {
    8. throw new Exception(sprintf('could not find %s'), $filepath);
    9. return null;
    10. }
    11.  
    12. extract($vars);
    13. require $filepath;
    14. $template = ob_get_contents();
    15. return $template;
    16. }
    17.  

    Die ob_*-Funktionen steuern die Ausgabe und sorgen dafür, dass der Inhalt unseres Templates nicht gesendet, sondern in "$template" gespeichert wird.

    Nachdem wir nun eine Template-Funktion erzeugt haben müssen wir sie auch einbinden.
    Dies tun wir in der global.php

    Code:
    notepad include/global.php

    1.  
    2. define('DIR', dirname(__FILE__) . '/..');
    3.  
    4. require 'template.php';
    5.  
    6. $Database = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');
    7.  

    Nachdem wir nun sichergestellt haben, dass wir auf unsere Template-Funktion zugreifen können sollten wir auch die index.php anpassen.

    Code:
    notepad index.php
    1.  
    2. define('DIR', dirname(__FILE__) . '/..');
    3.  
    4. $body = fetch_template('eingabe.html',array(
    5. 'success' => $success
    6. ));
    7. require DIR . '/template/include/global.html';
    8.  

    Nachdem wir dies nun geklärt haben wenden wir uns nun einer komplizierteren Aufgabe zu, einem Formular.

    Bevor wir damit jedoch anfangen können müssen wir wohl ein paar grundsätzliche Sachen klären.

    Ein Formular (bzgl. das gesamte Formular) wird von einem "<form>"-Tag umschlossen

    1.  
    2. <form action="" method="post">
    3. Hallo, ich bin ein _noch_ nutzlose Formular
    4. </form>
    5.  

    Mit "action" gibt man an, an welche Datei die Formulardaten geschickt werden. Lässt man dieses Feld frei, so werden diese Daten an die gleiche Datei zurück geschickt, welche das Formular erstellt hat (dies will man meistens).
    Mit "method" gibt man an, ob die Daten über die URL ("get") oder versteckt über das HTTP-Protokoll ("post") geschickt werden sollen. Es ist dabei zu beachten, dass man über "get" nur eine begrenzte Anzahl an Daten verschicken kann.
    Ich würde mich für in diesem Fall für "post" entscheiden.

    1.  
    2. <form action="" method="post">
    3. <input type="text" name="id" />
    4. Juh, man kann schon etwas eingeben
    5. </form>
    6.  

    Durch den "<input>"-Tag wird ein Eingabefeld definiert.
    Der Parameter "type" kann die Werte "text" (einfaches Eingabefeld), "password" (geschütztes Eingabefeld), "hiddden" (verstecktes Feld), "file" (Erweitertes Eingabe Feld zum hinzufügen von Daten - dafür muss zusätzlich "enctype="multipart/form-data"" im "<form>"-Tag gesetzt sein), ...
    Dieser Parameter steht jedoch nicht für den Datentyp der Eingabe ("int", "float", "char", "date", ..).
    Der Parameter "size" steht für die rein optische Länge des Eingabefeldes.

    Code:
    notepad template/eingabe.html
    1.  
    2. Willkommen!
    3. <br />
    4. Hier können Lieferantendaten eingeben und in/über eine SQL Datenbank eingegeben/abgefragt werden.
    5. <br />
    6. Die Datensätze sind in einzelnen Sessions organisiert. Daher..
    7. <br />
    8. Jede Session beinhaltet eine komplette Übersicht aller relevanten Informationen zu dem Objekt.
    9. <br /><br />
    10.  
    11. <? if($success) { ?>
    12. Ihre Eingabe wurden gespeichert!
    13. <? } ?>
    14.  
    15. <form action="" method="post">
    16. ID:
    17. <input type="text" name="id" />
    18. <br />
    19. Warenart:
    20. <input type="text" name="Warenart" />
    21. <br />
    22. Produkt:
    23. <input type="text" name="Produkt" />
    24. <br />
    25. HerstellerID:
    26. <input type="text" name="HerstellerID" />
    27. <br />
    28. Preis:
    29. <input type="text" name="Preis" />
    30. <br />
    31. Artikelnummer:
    32. <input type="text" name="Artikelnummer" />
    33. <br />
    34. Verfuegbarkeit:
    35. <input type="text" name="Verfuegbarkeit" />
    36. <br />
    37. Herstellungsdatum:
    38. <input type="text" name="Herstellungsdatum" />
    39. <br />
    40. Lieferkosten:
    41. <input type="text" name="Lieferkosten" />
    42. <br />
    43. Lieferant:
    44. <input type="text" name="Lieferant" />
    45. <br />
    46. Gesamtpreis:
    47. <input type="text" name="Gesamtpreis" />
    48. <br />
    49. <input type="submit" name="send" value="Abschicken" />
    50. </form>
    51.  

    Nun müssen wir noch unsere zugehörigen PHP-Datei erstellen

    Code:
    notepad eingabe.php
    1.  
    2. <?php
    3. $success = false;
    4. if(isset($_POST['send']))
    5. {
    6. $id = (isset($_POST['id'])) ? $_POST['id'] : 0;
    7. $warenart = (isset($_POST['Warenart'])) ? $_POST['Warenart'] : 0;
    8. $produkt = (isset($_POST['Produkt'])) ? $_POST['Produkt'] : 0;
    9. $herstellerId = (isset($_POST['HerstellerID'])) ? $_POST['HerstellerID'] : 0;
    10. $preis = (isset($_POST['Preis'])) ? $_POST['Preis'] : 0;
    11. $artikelnummer = (isset($_POST['Artikelnummer'])) ? $_POST['Artikelnummer'] : 0;
    12. $verfuegbarkeit = (isset($_POST['Verfuegbarkeit'])) ? $_POST['Verfuegbarkeit'] : 0;
    13. $herstellungsdatum = (isset($_POST['Herstellungsdatum'])) ? $_POST['Herstellungsdatum'] : 0;
    14. $lieferkosten = (isset($_POST['Lieferkosten'])) ? $_POST['Lieferkosten'] : 0;
    15. $lieferant = (isset($_POST['Lieferant'])) ? $_POST['Lieferant'] : 0;
    16. $gesamtpreis = (isset($_POST['Gesamtpreis'])) ? $_POST['Gesamtpreis'] : 0;
    17.  
    18. $DatabaseStatement = $Database->prepare('
    19. INSERT INTO
    20. `haupttab`
    21. SET
    22. `ID` = :id,
    23. `Warenart` = :warenart,
    24. `Produkt` = :produkt,
    25. `HerstellerID` = :herstellerId,
    26. `Preis` = :preis,
    27. `Artikelnummer` = :artikelnummer,
    28. `Verfuegbarkeit` = :verfuegbarkeit,
    29. `Herstellungsdatum` = :herstellungsdatum,
    30. `Lieferkosten` = :lieferkosten,
    31. `Lieferant` = :lieferant,
    32. `Gesamtpreis` = :gesamtpreis
    33. ');
    34.  
    35. $DatabaseStatement->bindValue(':id', $id);
    36. $DatabaseStatement->bindValue(':warenart', $warenart);
    37. $DatabaseStatement->bindValue(':produkt', $produkt);
    38. $DatabaseStatement->bindValue(':herstellerId', $herstellerId);
    39. $DatabaseStatement->bindValue(':preis', $preis);
    40. $DatabaseStatement->bindValue(':artikelnummer', $artikelnummer);
    41. $DatabaseStatement->bindValue(':verfuegbarkeit', $verfuegbarkeit);
    42. $DatabaseStatement->bindValue(':herstellungsdatum', $herstellungsdatum);
    43. $DatabaseStatement->bindValue(':lieferkosten', $lieferkosten);
    44. $DatabaseStatement->bindValue(':lieferant', $lieferant);
    45. $DatabaseStatement->bindValue(':gesamtpreis', $gesamtpreis);
    46. $success = $DatabaseStatement->execute();
    47. }
    48.  
    49. $body = fetch_template('eingabe.html',array(
    50. 'success' => $success
    51. ));
    52. require DIR . '/template/include/global.html';
    53.  

  4. #4
    Feldwebel
    Avatar von cifixi0n
    Registriert seit
    30.12.2002
    Ort
    Dortmund
    Alter
    31
    Beiträge
    1.459
    Name
    Christian
    Nick
    Cifixi0n
    Danke für die Antworten und Anmerkungen. Ich nehme mich, sobald Luft da ist, der Sache an.
    Mir sind am gestrigen tag selbst noch viele Unstimmigkeiten aufgefallen. Mal schauen was ich davon in den Antworten so wiederfinde

  5. #5
    Feldwebel
    Avatar von cifixi0n
    Registriert seit
    30.12.2002
    Ort
    Dortmund
    Alter
    31
    Beiträge
    1.459
    Name
    Christian
    Nick
    Cifixi0n
    Haudi!

    Nachdem ich mich mit der Thematik gründlicher auseinander gesetzt habe, bin ich leider immer noch nicht weitergekommen, was das einfügen der übergebenen Formulardaten, an die Datenbank anbelangt.
    Mehr als nach Vorgabe eines Buches zu programmieren ist bei mir nicht drin.
    Von Abstraktionen und freier Programmierung ganz zu schweigen.
    Möchte euch beiden trotzdem danken für die Mühe! Und ganz vergeben wars ja doch nicht.


    @ d4rkkenny

    Die Sache mit der "form" Geschichte hat so weit geklappt.
    Aber den 2. Teil mit dem Code verstehe ich nicht. In das Feld 'tbl_feld_name3' gehört ja offensichtlich der Name meiner mit "Post" bzw. "Get" übergebenen Variablen. Aber das spätere "VALUES" und der darauffolgende Code ist mir ein Rätsel.


    @ Osbes

    Leider ist mir das einfach viel zu kompliziert. Ich kann mit dem Code einfach nichts anfangen.
    Mein Verständnis dafür ist gerade zu mikroskopisch.
    Die beiden 49 Zeiler Code am Ende deines Textes, habe ich versucht an meine Situation anzupassen,
    ohne die zusätzlichen Dateien zu erstellen, welche du oben genannt hast.
    Eine Fehlermeldung habe ich zwar nicht bekommen. Allerdings auch keinen Eintrag in die Datenbank.
    Mal schauen was ich daraus noch machen kann.

  6. #6
    Wie sieht denn dein aktueller Quelltext aus?

  7. #7
    Feldwebel
    Avatar von cifixi0n
    Registriert seit
    30.12.2002
    Ort
    Dortmund
    Alter
    31
    Beiträge
    1.459
    Name
    Christian
    Nick
    Cifixi0n
    Huhu

    Beigefügt sind die angepassten PhP Dateien.
    Angehängte Dateien Angehängte Dateien

  8. #8
    Oha, das ist jetzt alles doch sehr "gemixt".

    Ich beziehe mich jetzt erstmal nur auf die Datei "verarbeitung.php".

    Du hast hier sowohl HTML eingebunden, als auch
    1.  
    2. $body = fetch_template(DIR . '/template/global.html');
    3. require('include/global.html');
    4.  
    was schon mal semantisch falsch ist, da die Templates dazu dienen sollen die Logik von der Darstellung zu trennen, was zu einer besseren Wartbarkeit und Erweiterbarkeit führt.

    Ich würd daher die Datei zunächst zu
    1. <?php
    2. $db_server='localhost';
    3. $db_user='root';
    4. $db_passwort='';
    5. $db_name='sb';
    6.  
    7. $verbindung=mysql_connect($db_server,$db_user,$db_passwort);
    8. if(!$verbindung)
    9. die("der Server kann nicht erreicht werden.");
    10. if(!mysql_select_db($db_name,$verbindung))
    11. die("Die Datenbank kann nicht angesprochen werden.");
    12.  
    13.  
    14. $success = false;
    15. if(isset($_POST['send']))
    16. {
    17. $id = (isset($_POST['id'])) ? $_POST['id'] : 0;
    18. $warenart = (isset($_POST['Warenart'])) ? $_POST['Warenart'] : 0;
    19. $produkt = (isset($_POST['Produkt'])) ? $_POST['Produkt'] : 0;
    20. $herstellerId = (isset($_POST['HerstellerID'])) ? $_POST['HerstellerID'] : 0;
    21. $preis = (isset($_POST['Preis'])) ? $_POST['Preis'] : 0;
    22. $artikelnummer = (isset($_POST['Artikelnummer'])) ? $_POST['Artikelnummer'] : 0;
    23. $verfuegbarkeit = (isset($_POST['Verfuegbarkeit'])) ? $_POST['Verfuegbarkeit'] : 0;
    24. $herstellungsdatum = (isset($_POST['Herstellungsdatum'])) ? $_POST['Herstellungsdatum'] : 0;
    25. $lieferkosten = (isset($_POST['Lieferkosten'])) ? $_POST['Lieferkosten'] : 0;
    26. $lieferant = (isset($_POST['Lieferant'])) ? $_POST['Lieferant'] : 0;
    27. $gesamtpreis = (isset($_POST['Gesamtpreis'])) ? $_POST['Gesamtpreis'] : 0;
    28.  
    29. $DatabaseStatement = $Database->prepare('
    30. INSERT INTO
    31. `haupttab`
    32. SET
    33. `ID` = :id
    34. `Warenart` = :warenart
    35. `Produkt` = :produkt
    36. `HerstellerID` = :herstellerId
    37. `Preis` = :preis
    38. `Artikelnummer` = :artikelnummer
    39. `Verfuegbarkeit` = :verfuegbarkeit
    40. `Herstellungsdatum` = :herstellungsdatum
    41. `Lieferkosten` = :lieferkosten
    42. `Lieferant` = :lieferant
    43. `Gesamtpreis` = :gesamtpreis
    44. ');
    45.  
    46. $DatabaseStatement->bindValue(':id', $id);
    47. $DatabaseStatement->bindValue(':warenart', $warenart);
    48. $DatabaseStatement->bindValue(':produkt', $produkt);
    49. $DatabaseStatement->bindValue(':herstellerId', $herstellerId);
    50. $DatabaseStatement->bindValue(':preis', $preis);
    51. $DatabaseStatement->bindValue(':artikelnummer', $artikelnummer);
    52. $DatabaseStatement->bindValue(':verfuegbarkeit', $verfuegbarkeit);
    53. $DatabaseStatement->bindValue(':herstellungsdatum', $herstellungsdatum);
    54. $DatabaseStatement->bindValue(':lieferkosten', $lieferkosten);
    55. $DatabaseStatement->bindValue(':lieferant', $lieferant);
    56. $DatabaseStatement->bindValue(':gesamtpreis', $gesamtpreis);
    57. $success = $DatabaseStatement->execute();
    58. }
    59.  
    60. $body = fetch_template(DIR . '/template/global.html');
    61. require 'include/global.html';
    62. ?>
    umschreiben.
    Achtung, hier sind immernoch Fehler drin, ich will nur alles Stück für Stück dokumentieren.

    Danach sollten wir noch wie angesprochen das "?>" entfernen, da es in einer reinen PHP-Datei eher zu unbeabsichtigten Fehler führen kann.

    Als nächstes fällt auf, dass die Funktion "fetch_template" nicht definiert wurde (es handelt sich hierbei um keine Funktion welche PHP sozusagen mitliefert).
    Dies folgt sehr stark darauf, die die von mir konzipierte Ordner-Struktur mit den zugehörigen Dateien nicht existiert.
    Ich würde dir empfehlen dies erstmal einfach hinzunehmen und die Datein anzulegen, auch wenn dir deren exakte Funktionsweise noch nicht klar ist.
    Es ist viel besser am Anfang eine ordentliche Projektstruktur aufzubauen, als dies später zu realisieren (viele Projekte sterben daran auch, da es dann meist schon viel zu aufwendig ist).

    Daher solltest du zunächst folgende Ordner anlegen
    Code:
    mkdir include
    mkdir template
    in dem "include"-Ordner solltest du des Weiteren folgende Dateien einfügen:

    template.php
    1.  
    2. <?php
    3. function fetch_template($filename, array $vars = array())
    4. {
    5. $filepath = DIR . '/template/' . $filename;
    6.  
    7. if(!file_exists($filepath))
    8. {
    9. throw new Exception(sprintf('could not find %s'), $filepath);
    10. return null;
    11. }
    12.  
    13. extract($vars);
    14. require($filepath);
    15. $template = ob_get_contents();
    16. return $template;
    17. }
    18.  

    global.php
    1.  
    2. <?php
    3. define('DIR', dirname(__FILE__) . '/..');
    4.  
    5. require 'template.php';
    6.  
    7. $Database = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');
    8.  

    Wie man sieht habe ich in der global.php auch direkt die Datenbank eingebunden, aber dazu komme ich gleich nochmal.

    Damit nun die "verarbeitung.php" auch mit der "global.php" und somit auch der "template.php" arbeiten kann müssen wir diese noch einbinden und zwar über
    1.  
    2. require './include/global.php'
    3.  

    Unsere "verarbeitung.php" sollte nun wie folgt aussehen:
    1.  
    2. <?php
    3. require './include/global.php';
    4.  
    5. $db_server='localhost';
    6. $db_user='root';
    7. $db_passwort='';
    8. $db_name='sb';
    9.  
    10. $verbindung=mysql_connect($db_server,$db_user,$db_passwort);
    11. if(!$verbindung)
    12. die("der Server kann nicht erreicht werden.");
    13. if(!mysql_select_db($db_name,$verbindung))
    14. die("Die Datenbank kann nicht angesprochen werden.");
    15.  
    16. $success = false;
    17. if(isset($_POST['send']))
    18. {
    19. $id = (isset($_POST['id'])) ? $_POST['id'] : 0;
    20. $warenart = (isset($_POST['Warenart'])) ? $_POST['Warenart'] : 0;
    21. $produkt = (isset($_POST['Produkt'])) ? $_POST['Produkt'] : 0;
    22. $herstellerId = (isset($_POST['HerstellerID'])) ? $_POST['HerstellerID'] : 0;
    23. $preis = (isset($_POST['Preis'])) ? $_POST['Preis'] : 0;
    24. $artikelnummer = (isset($_POST['Artikelnummer'])) ? $_POST['Artikelnummer'] : 0;
    25. $verfuegbarkeit = (isset($_POST['Verfuegbarkeit'])) ? $_POST['Verfuegbarkeit'] : 0;
    26. $herstellungsdatum = (isset($_POST['Herstellungsdatum'])) ? $_POST['Herstellungsdatum'] : 0;
    27. $lieferkosten = (isset($_POST['Lieferkosten'])) ? $_POST['Lieferkosten'] : 0;
    28. $lieferant = (isset($_POST['Lieferant'])) ? $_POST['Lieferant'] : 0;
    29. $gesamtpreis = (isset($_POST['Gesamtpreis'])) ? $_POST['Gesamtpreis'] : 0;
    30.  
    31. $DatabaseStatement = $Database->prepare('
    32. INSERT INTO
    33. `haupttab`
    34. SET
    35. `ID` = :id
    36. `Warenart` = :warenart
    37. `Produkt` = :produkt
    38. `HerstellerID` = :herstellerId
    39. `Preis` = :preis
    40. `Artikelnummer` = :artikelnummer
    41. `Verfuegbarkeit` = :verfuegbarkeit
    42. `Herstellungsdatum` = :herstellungsdatum
    43. `Lieferkosten` = :lieferkosten
    44. `Lieferant` = :lieferant
    45. `Gesamtpreis` = :gesamtpreis
    46. ');
    47.  
    48. $DatabaseStatement->bindValue(':id', $id);
    49. $DatabaseStatement->bindValue(':warenart', $warenart);
    50. $DatabaseStatement->bindValue(':produkt', $produkt);
    51. $DatabaseStatement->bindValue(':herstellerId', $herstellerId);
    52. $DatabaseStatement->bindValue(':preis', $preis);
    53. $DatabaseStatement->bindValue(':artikelnummer', $artikelnummer);
    54. $DatabaseStatement->bindValue(':verfuegbarkeit', $verfuegbarkeit);
    55. $DatabaseStatement->bindValue(':herstellungsdatum', $herstellungsdatum);
    56. $DatabaseStatement->bindValue(':lieferkosten', $lieferkosten);
    57. $DatabaseStatement->bindValue(':lieferant', $lieferant);
    58. $DatabaseStatement->bindValue(':gesamtpreis', $gesamtpreis);
    59. $success = $DatabaseStatement->execute();
    60. }
    61.  
    62. $body = fetch_template('eingabe.html',array(
    63. 'success' => $success
    64. ));
    65. require DIR . '/template/include/global.html';
    66.  

    Ich habe noch einen kleinen Fehler beseitigt den ich wohl in meiner Müdigkeit eingebaut habe und zwar sollte es
    1. require DIR . '/template/include/global.html';
    und nicht
    1. require 'include/global.html';
    lauten, da der Pfad zur Datei sonst nicht stimmt.
    Außerdem sollte es
    1. $body = fetch_template(eingabe.html');
    und nicht
    1. $body = fetch_template(DIR . '/template/global.html');
    lauten, da er für den Inhalt ja die eingabe.html laden soll und die "fetch_template"-Funktion den zugehörigen Dateipfad schon hinzufügt.


    Nun hast du hier sowohl die sehr alte Funktion "mysql_connect" genutzt um eine Verbindung zur Datenbank aufzubauen, beziehst dich jedoch auf die Variable "$Database", welche nicht definiert war.

    Diese Variable habe ich jetzt in der global.php definiert und dort auch die Verbindung zur Datenbank hergestellt (somit können die alten "mysql_*"-Funktionen gelöscht werden).
    Dies ist auch der Punkt, auf den ich nochmal zurückkommen wollte.
    Hinzu kommt ein Fehler von mir, den ich wohl nicht mehr rechtzeitig korregiert habe, denn die einzelnen Eingaben im SQL-Befehl müssen mit einem Komma verbinden sein, also

    1.  
    2. `ID` = :id,
    3. `Warenart` = :warenart,
    4. `Produkt` = :produkt,
    5. `HerstellerID` = :herstellerId,
    6. `Preis` = :preis,
    7. `Artikelnummer` = :artikelnummer,
    8. `Verfuegbarkeit` = :verfuegbarkeit,
    9. `Herstellungsdatum` = :herstellungsdatum,
    10. `Lieferkosten` = :lieferkosten,
    11. `Lieferant` = :lieferant,
    12. `Gesamtpreis` = :gesamtpreis
    13.  
    und nicht
    1.  
    2. `ID` = :id
    3. `Warenart` = :warenart
    4. `Produkt` = :produkt
    5. `HerstellerID` = :herstellerId
    6. `Preis` = :preis
    7. `Artikelnummer` = :artikelnummer
    8. `Verfuegbarkeit` = :verfuegbarkeit
    9. `Herstellungsdatum` = :herstellungsdatum
    10. `Lieferkosten` = :lieferkosten
    11. `Lieferant` = :lieferant
    12. `Gesamtpreis` = :gesamtpreis
    13.  

    Somit sollte die Datei nun so aussehen:
    1. <?php
    2. require './include/global.php';
    3.  
    4. $success = false;
    5. if(isset($_POST['send']))
    6. {
    7. $id = (isset($_POST['id'])) ? $_POST['id'] : 0;
    8. $warenart = (isset($_POST['Warenart'])) ? $_POST['Warenart'] : 0;
    9. $produkt = (isset($_POST['Produkt'])) ? $_POST['Produkt'] : 0;
    10. $herstellerId = (isset($_POST['HerstellerID'])) ? $_POST['HerstellerID'] : 0;
    11. $preis = (isset($_POST['Preis'])) ? $_POST['Preis'] : 0;
    12. $artikelnummer = (isset($_POST['Artikelnummer'])) ? $_POST['Artikelnummer'] : 0;
    13. $verfuegbarkeit = (isset($_POST['Verfuegbarkeit'])) ? $_POST['Verfuegbarkeit'] : 0;
    14. $herstellungsdatum = (isset($_POST['Herstellungsdatum'])) ? $_POST['Herstellungsdatum'] : 0;
    15. $lieferkosten = (isset($_POST['Lieferkosten'])) ? $_POST['Lieferkosten'] : 0;
    16. $lieferant = (isset($_POST['Lieferant'])) ? $_POST['Lieferant'] : 0;
    17. $gesamtpreis = (isset($_POST['Gesamtpreis'])) ? $_POST['Gesamtpreis'] : 0;
    18.  
    19. $DatabaseStatement = $Database->prepare('
    20. INSERT INTO
    21. `haupttab`
    22. SET
    23. `ID` = :id,
    24. `Warenart` = :warenart,
    25. `Produkt` = :produkt,
    26. `HerstellerID` = :herstellerId,
    27. `Preis` = :preis,
    28. `Artikelnummer` = :artikelnummer,
    29. `Verfuegbarkeit` = :verfuegbarkeit,
    30. `Herstellungsdatum` = :herstellungsdatum,
    31. `Lieferkosten` = :lieferkosten,
    32. `Lieferant` = :lieferant,
    33. `Gesamtpreis` = :gesamtpreis
    34. ');
    35.  
    36. $DatabaseStatement->bindValue(':id', $id);
    37. $DatabaseStatement->bindValue(':warenart', $warenart);
    38. $DatabaseStatement->bindValue(':produkt', $produkt);
    39. $DatabaseStatement->bindValue(':herstellerId', $herstellerId);
    40. $DatabaseStatement->bindValue(':preis', $preis);
    41. $DatabaseStatement->bindValue(':artikelnummer', $artikelnummer);
    42. $DatabaseStatement->bindValue(':verfuegbarkeit', $verfuegbarkeit);
    43. $DatabaseStatement->bindValue(':herstellungsdatum', $herstellungsdatum);
    44. $DatabaseStatement->bindValue(':lieferkosten', $lieferkosten);
    45. $DatabaseStatement->bindValue(':lieferant', $lieferant);
    46. $DatabaseStatement->bindValue(':gesamtpreis', $gesamtpreis);
    47. $success = $DatabaseStatement->execute();
    48. }
    49.  
    50. $body = fetch_template('eingabe.html',array(
    51. 'success' => $success
    52. ));
    53. require DIR . '/template/include/global.html';

    Kommen wir nun zu den HTML-Dateien.

    Zunächst solltest du einen DTD definieren, sonst schalten einige Browser in den Quirks-Modus oder interpretieren die Seite gänzlich falsch.

    Wenn ich mir deinen Quelltext so anschaue, ist für dich wohl HTML 4.01 Transitional geeignet.

    Daher solltes du vor dem "<html>"-Tag folgendes hinzufügen:
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

    Wie schon angesprochen machen wir dies in der /template/include/global.html

    Diese sollte wie folgt aussehen:
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    2. <title>Artikel DB</title>
    3. </head>
    4. <?=$body ?>
    5. </body>
    6. </html>

    Die /template/eingabe.html sieht dann wie folgt aus:
    1. Willkommen!
    2. <br>
    3. Hier können Lieferantendaten eingeben und in/über eine SQL Datenbank eingegeben/abgefragt werden.
    4. <br>
    5. Die Datensätze sind in einzelnen Sessions organisiert. Daher..
    6. <br>
    7. Jede Session beinhaltet eine komplette Übersicht aller relevanten Informationen zu dem Objekt.
    8. <br><br>
    9.  
    10. <? if($success) { ?>
    11. Ihre Eingabe wurden gespeichert!
    12. <? } ?>
    13.  
    14. <form action="" method="post">
    15. ID:
    16. <input type="text" name="id">
    17. <br>
    18. Warenart:
    19. <input type="text" name="Warenart">
    20. <br>
    21. Produkt:
    22. <input type="text" name="Produkt">
    23. <br>
    24. HerstellerID:
    25. <input type="text" name="HerstellerID">
    26. <br>
    27. Preis:
    28. <input type="text" name="Preis">
    29. <br>
    30. Artikelnummer:
    31. <input type="text" name="Artikelnummer">
    32. <br>
    33. Verfuegbarkeit:
    34. <input type="text" name="Verfuegbarkeit">
    35. <br>
    36. Herstellungsdatum:
    37. <input type="text" name="Herstellungsdatum" >
    38. <br>
    39. Lieferkosten:
    40. <input type="text" name="Lieferkosten">
    41. <br>
    42. Lieferant:
    43. <input type="text" name="Lieferant">
    44. <br>
    45. Gesamtpreis:
    46. <input type="text" name="Gesamtpreis">
    47. <br>
    48. <input type="submit" name="send" value="Abschicken">
    49. </form>

    Zu guter letzt müssen wir jetzt noch die "verarbeitung.php" in "eingabe.php" umbennen.

    Ich habe dies jetzt bei mir auch getestet und es als Anhang hinzugefügt.

    Es heißt im übrigen PHP und nicht PhP
    Angehängte Dateien Angehängte Dateien

  9. #9
    Feldwebel
    Avatar von cifixi0n
    Registriert seit
    30.12.2002
    Ort
    Dortmund
    Alter
    31
    Beiträge
    1.459
    Name
    Christian
    Nick
    Cifixi0n
    Auch auf die Gefahr hin zum Teufel gejagt zu werden ...
    Deiner Ausdauer und Bereitschaft hier zu helfen gebührt Huldigung!
    Leider gibt es immer noch Schwierigkeiten.

    Ich hab mich genau an deine Beschreibung gehalten und die Order + Code erstellt.
    Trotzdem konnte ich kein zufriedenstellendes Ergebnis verbuchen.
    Nachfolgend stelle ich nochmal alle Files zur Verfügung, nebst Erklärung der Sachlage.

    ______________________________________
    "b00223_b_uf_version"
    Das war meine erste Version die ich nach deiner Anleitung erstellt habe. Gab ein kleines Verständnisproblem mit den Unterordnern. Und in der "eingabe.php" habe ich noch zu beginn "<?php" eingefügt zwecks test.
    Sollte sich ja um eine PHP Datei handeln und deshalb erforderlich oder ?!

    Beim ausfüllen und absenden des Formulars über "eingabe.php" erscheint folgende Fehlermeldung:
    Code:
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'user'@'localhost' (using password: YES)' in C:\xampp\htdocs\include\global.php:6 Stack trace: #0 C:\xampp\htdocs\include\global.php(6): PDO->__construct('mysql:host=loca...', 'user', 'password') #1 C:\xampp\htdocs\eingabe.php(2): require('C:\xampp\htdocs...') #2 {main} thrown in C:\xampp\htdocs\include\global.php on line 6
    ______________________________________
    b00223c_uf_version
    Hierbei handelt es sich im grunde fast um die gleichen Dateien, wie in "b00223b_uf_version".
    Ein unterschied ist das ich hier komplett den Code übernommen habe.

    Fehlermeldung hier:
    Code:
    require './include/global.php'; $success = false; if(isset($_POST['send'])) { $id = (isset($_POST['id'])) ? $_POST['id'] : 0; $warenart = (isset($_POST['Warenart'])) ? $_POST['Warenart'] : 0; $produkt = (isset($_POST['Produkt'])) ? $_POST['Produkt'] : 0; $herstellerId = (isset($_POST['HerstellerID'])) ? $_POST['HerstellerID'] : 0; $preis = (isset($_POST['Preis'])) ? $_POST['Preis'] : 0; $artikelnummer = (isset($_POST['Artikelnummer'])) ? $_POST['Artikelnummer'] : 0; $verfuegbarkeit = (isset($_POST['Verfuegbarkeit'])) ? $_POST['Verfuegbarkeit'] : 0; $herstellungsdatum = (isset($_POST['Herstellungsdatum'])) ? $_POST['Herstellungsdatum'] : 0; $lieferkosten = (isset($_POST['Lieferkosten'])) ? $_POST['Lieferkosten'] : 0; $lieferant = (isset($_POST['Lieferant'])) ? $_POST['Lieferant'] : 0; $gesamtpreis = (isset($_POST['Gesamtpreis'])) ? $_POST['Gesamtpreis'] : 0; $DatabaseStatement = $Database->prepare(' INSERT INTO `haupttab` SET `ID` = :id, `Warenart` = :warenart, `Produkt` = :produkt, `HerstellerID` = :herstellerId, `Preis` = :preis, `Artikelnummer` = :artikelnummer, `Verfuegbarkeit` = :verfuegbarkeit, `Herstellungsdatum` = :herstellungsdatum, `Lieferkosten` = :lieferkosten, `Lieferant` = :lieferant, `Gesamtpreis` = :gesamtpreis '); $DatabaseStatement->bindValue(':id', $id); $DatabaseStatement->bindValue(':warenart', $warenart); $DatabaseStatement->bindValue(':produkt', $produkt); $DatabaseStatement->bindValue(':herstellerId', $herstellerId); $DatabaseStatement->bindValue(':preis', $preis); $DatabaseStatement->bindValue(':artikelnummer', $artikelnummer); $DatabaseStatement->bindValue(':verfuegbarkeit', $verfuegbarkeit); $DatabaseStatement->bindValue(':herstellungsdatum', $herstellungsdatum); $DatabaseStatement->bindValue(':lieferkosten', $lieferkosten); $DatabaseStatement->bindValue(':lieferant', $lieferant); $DatabaseStatement->bindValue(':gesamtpreis', $gesamtpreis); $success = $DatabaseStatement->execute(); } $body = fetch_template('eingabe.html',array( 'success' => $success )); require DIR . '/template/include/global.html';
    ______________________________________
    <Osbes_uf_version>
    Hier müsste ich jetzt irgendwie meine "Startseite.php" mit allem drum und dran einbringen. Das wäre wieder ein eigenes Kapitel ^^ ..
    Aber auch wenn ich direkt die "eingabe.html" unter "\template" aufrufe, habe ich zwar mein Formularfeld zur Verfügung und es gibt auch keinen direkten fehler nach dem abschicken. Aber die Daten werden auch hier nicht in die Datenbank geschrieben

    ...
    Damit über die ganze Prozedur das Hauptziel nicht aus den Augen gerät:
    Mein Ziel ist es, Über die "Startseite.php" ein Link zu "Eingabe.php" aufzurufen in ein Formular Eingaben entgegen nimmt und diese über die "Verarbeitung.php" an die SQL-Datenbank (Xampp) weiterschickt und einträgt.
    Andere/bessere Vorgehensweise natürlich auch gern. Aber es soll zu diesem Ziel führen.

    Datenbankname: artikeldb
    User: root
    Passwort:



    ...
    Konkrete Fragen fallen mir ggf. später noch ein. Erstmal den Kopf freikriegen.
    Danke schonmal für die Hilfe!
    Angehängte Dateien Angehängte Dateien

  10. #10
    Ok, also die Fehlermeldung bei der 1. Version ("b00223_b_uf_version") weißt schon auf das Entscheidene Problem hin:

    Access denied for user 'user'@'localhost' (using password: YES)
    Dies bedetet, dass PDO keine Verbindung zur MySQL-Datenbank herstellen konnte.
    Dies liegt wohl daran, dass du keinen Benutzer "user" hast (oder das Passwort nicht stimmt, aber ich gehe schwer davon aus, dass erstes schon der Fall ist).

    Die Definition für den Nutzer steht in der /include/global.php, derzeit ist es:
    1. $Database = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');

    Nach deinen Angaben müsste es
    1. $Database = new PDO('mysql:host=localhost;dbname=artikeldb', 'root');
    lauten.

    Die Allg. Definition ist findest du im Handbuch unter folgendem Punkt:
    http://www.php.net/manual/de/ref.pdo...connection.php




    Bei der 2. Version, der "b00223c_uf_version" sehe ich leider bei deiem Beitrag keine Fehlermeldung, sondern ein Teil des Quellcodes.

    Ich habe es mal bei mir eingebunden und der Fehler ist das fehlende "<?php", was du bei der 1. Version hinzugefügt hattest (muss ich wohl vergessen haben )
    Damit der Interpreter weiß, dass nun Quelltext der Skriptsprache PHP kommt, muss "<?php" gesetzt werden.
    Nur ein "?>" muss nicht gesetzt werden, sofern man nicht explizit den "PHP-Bereich" beenden will und darunter etwas anderes (z.B. HTML) einbinden will.

    Wenn man dies setzt erhält man jedoch eine weitere Fehlermeldung und zwar:
    Parse error: syntax error, unexpected $end in C:\xampp\htdocs\b00223c_uf_version\include\global.php on line 6
    Dies liegt daran, dass in der /include/global.php etwas fehlt.
    Dort steht zum Schluss:
    1. $Database = new PDO('mysql:host=localhost;dbname=database', 'user', 'password'
    hier müsste noch die schließende Klammer und ein Semikolon hin, also
    1. $Database = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');

    Danach kommst du wieder zum gleichen Fehler wie bei der 1. Version ("b00223_b_uf_version").




    Templates sind nur "Teile" einer HTML Seite, welche man bei Bedarf zur gesamten Seite zusammen setzt. Der Grund dass man dies tut ist, dass z.B. jede Seite den gleichen Grundaufbau hat (das steht in unserer /template/include/global.html), oder etwas das gleiche Menu usw.
    Damit man dies nicht immer neu tippen muss oder jede Datei bei einer Änderungen umschreiben muss, definiert man dies einmal in einem Template und bindes es dann bei Bedarf in die anderen Templates ein.

    Aus diesem Grund ruft man ein Template auch nicht direkt auf, da es selbst nicht die Fähigkeit besitzt andere Templates einzubinden.
    Das ist auch der gleiche Grund, warum das Formular nichts speichern konnte, da nur die PHP-Datei die dazu nötige Logik hat.
    Korrekt wäre hier ein Verweis auf die eingabe.php

    Es sollte außerdem nicht
    1. <a href=". ./eingabe.php">Neuen Händler hinzufügen</a>
    sondern
    1. <a href="./eingabe.php">Neuen Händler hinzufügen</a>
    lauten, denn "../" verweist auf den übergeordneten Ordner, während "./" auf den gleichen Ordner zeigt.
    Und da beide Dateien im gleichen Ordner liegen ist "./" angebracht.

    Entsprechend der eingabe.php legen wir dann zunächst wieder ein Template an und zwar /template/index.html

    mit folgendem Inhalt:
    1. Willkommen!<br>
    2. Hier können Lieferantendaten eingeben und in/über eine SQL Datenbank eingegeben/abgefragt werden.<br>
    3. Die Datensätze sind in einzelnen Sessions organisiert. Daher..<br>
    4. Jede Session beinhaltet eine komplette Übersicht aller relevanten Informationen zu dem Objekt.<br><br>
    5.  
    6. <a href="./eingabe.php">Neuen Händler hinzufügen</a>
    7. <br><br>
    8. <a href="./ware.php">Neue Ware hinzufügen</a>
    9. <br><br>
    10. <a href="./angebot.php">Günstigstes Angebot ermitteln</a>
    11. <br><br><br><br><br>
    12. <a href="./auslesen.php">Datenbank auslesen</a>
    13. <br><br><br><br><br>
    14.  
    15. Nach einem durchgeführten Preisvergleich kann das Ergebniss des Vergleichs abgespeichert und später erneut aufgerufen werden.<br>
    16. <ul>
    17. <li>Mit "Session speichern" wird ein Vergleich mehrerer Hersteller und dessen Ergebniss
    18. unter einer fortlaufenden ID nebst Datum abgespeichert.</li>
    19. <li>Mit "Session abrufen" kann ein früher erstellter Vergleich erneut aufgerufen werden.</li>
    20. </ul>
    21. <br><br>
    22. <a href="./sessions.php">Session speichern</a>
    23. <br><br>
    24. <a href="./sessiona.php">Session abrufen</a>
    25. <br><br>

    und in das Hauptverzeichnis die Datei index.php mit dem Inhalt:
    1.  
    2. <?php
    3. require './include/global.php';
    4.  
    5. $body = fetch_template('index.html');
    6. require DIR . '/template/include/global.html';
    7.  

    Des Weiteren habe ich index.php und nicht startseite.php verwendet, da der Apache Server standardmäßig so eingestellt ist, dass er bei einem reinen Aufruf des Ordner - also ohne Angabe der Datei - versucht Dateien wie (index.html, index.php, ...) zu laden.

    D.h. wen du auf http://www.united-forum.de/ gehst, lädt Apache in Wirklichkeit http://www.united-forum.de/index.php

    Ich habe es in meinem Beispiel vom letzten Beitrag einmal hinugefügt und die PDO Daten deinen Angaben nach angepasst.
    Angehängte Dateien Angehängte Dateien

  11. #11
    Feldwebel
    Avatar von cifixi0n
    Registriert seit
    30.12.2002
    Ort
    Dortmund
    Alter
    31
    Beiträge
    1.459
    Name
    Christian
    Nick
    Cifixi0n
    Grüß dich!

    Ich habe jetzt die von dir vorgeschlagenen Veränderungen übernommen und auch mit deinerm Upload verglichen. Von dem Standpunkt siehts gut aus, aber funktionieren tut es nach wie vor nicht.
    Ich habe zwar keine Fehlermeldungen mehr, aber dafür auch sonst keine Anzeige außer einem weißen Bildschirm.
    Über die "index.php" im Hauptverzeichnis sollte doch über die ganzen Templates Verlinkungen die Funktion meiner "Startseite.php" übernommen und angezeigt werden oder nicht ?
    Ich schätze, dass die ganze Verlinkung probleme macht.

    Zwecks test habe ich die Ordnerstruktur mit meinen bereits erstellen Dateien vervollständig. Aber sowohl mit als auch ohne, habe ich das gleiche Problem. Woran liegt das ?

    Ein ungleichmäßigkeit ist mir aufgefallen unter "template\include\global.html." Den Code habe ich aus deinem Exemplar übernommen und eingefügt. Den ursprünglichen Code dafür ausgeklammert. Hat aber natürlich auch keinen Effekt gebracht.
    Angehängte Dateien Angehängte Dateien

  12. #12
    Also ich habe deine Version gerade runtergeladen und meine MySQL Daten angegeben und damit geht es problemlos.

    Hast du auch die Tabelle 'haupttab' entsprechend angelegt ?

    Kommentare in HTML werden mit

    1.  
    2. <!--
    3. Dies ist ein Kommentar
    4. -->
    5.  

    gemacht, nicht mit
    1.  
    2. /*
    3. Dies ist ein Kommentar in PHP und anderen Sprachen (aber nicht HTML)
    4. */
    5.  

    Füge einmal in der eingabe.php unter
    1. $success = $DatabaseStatement->execute();

    noch folgendes hinzu:
    1. print_r($DatabaseStatement->errorInfo());

    Damit werden Fehler während der Verarbeitung der SQL-Anweisung angezeigt.

  13. #13
    Feldwebel
    Avatar von cifixi0n
    Registriert seit
    30.12.2002
    Ort
    Dortmund
    Alter
    31
    Beiträge
    1.459
    Name
    Christian
    Nick
    Cifixi0n
    hehe ... meine Fehlerhafte Kommentarfunktion hatte was gutes

    In der besagten Datei "template\include\global.html" wurde mir
    Code:
    /* */
    angezeigt. Nachdem ich das Kommentar nebst Code gänzlich gelöscht habe, wurde es auch nicht besser.

  14. #14
    Hast du
    1. print_r($DatabaseStatement->errorInfo());
    schon hinzugefügt ?

    Wir können gerne auch per Skype darüber reden.

  15. #15
    Feldwebel
    Avatar von cifixi0n
    Registriert seit
    30.12.2002
    Ort
    Dortmund
    Alter
    31
    Beiträge
    1.459
    Name
    Christian
    Nick
    Cifixi0n
    Jo habe ich. Deswegen konnte ich die Meldung erst jetzt sehen.

    ...
    Hast du alternativ Ts2/Ts3 ?!

    Würde dir die Daten bei Bestätigung zukommen lassen.

  16. #16
    Ja, TS habe ich auch (bevorzuge aber Mumble, aber ist ok ^^)

  17. #17
    Feldwebel
    Avatar von cifixi0n
    Registriert seit
    30.12.2002
    Ort
    Dortmund
    Alter
    31
    Beiträge
    1.459
    Name
    Christian
    Nick
    Cifixi0n
    Wie im ts besprochen das aktuelle.
    Angehängte Dateien Angehängte Dateien

  18. #18
    Feldwebel
    Avatar von cifixi0n
    Registriert seit
    30.12.2002
    Ort
    Dortmund
    Alter
    31
    Beiträge
    1.459
    Name
    Christian
    Nick
    Cifixi0n

    Erfolg!

    Haudi!

    Nach einigen Problemen ist das Problem gelöst!
    Nochmal vielen Dank an Osbes für die kompetente Hilfe. Gibt Orden

    Ps: * Du musst erst andere Beiträge von anderen Usern bewerten bevor du Osbes erneut bewerten kannst*
    ....werde das dann beizeiten nachholen

+ Antworten

Ähnliche Themen

  1. xampp unter windows7
    Von Bohseronkel im Forum Technik Ecke
    Antworten: 3
    Letzter Beitrag: 08.01.2010, 15:06
  2. Antworten: 8
    Letzter Beitrag: 23.02.2008, 12:18
  3. datenbank auf unserer hp!
    Von OHHvT/Funztnet im Forum -MUM-
    Antworten: 7
    Letzter Beitrag: 12.03.2004, 13:45

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •