Tutorial -> Daten in Datenbank eintragen + Auslesen

  • Hallo, da man hier ueberall im Forum ließt, "Wie schreibe ich Daten in eine Datenbank, und lese sie dann wieder aus à la Newsscript" dachte ich mir, das ich mal ein kleines "tutorial" schreibe, wie man sowas auf die Beine stellt.

    Im Grunde genommen ist es ganz einfach. Man schreibt Daten in ein Formular schickt das weiter an eine Andere Datei, die wiederrum sendet alles an die Datenbank. In einem weiteren Script ließt man die Daten wieder aus, und Formatiert sie.
    Also, al erstes mal, brauchen wir die Serverdaten. Die speichern wir am besten in eine Datei, und fuegen sie dann im dem Befehl include an der Gewuenschten Stelle wieder ein, das Spart Platzt.
    Also, hier die Datei, nennt sie wie ihr wollt,vorteilhaft waere config
    config.php:

    So, da wir die Datei jetzt haben, koennen wir weiter dazu gehn, die Benoetigten Tabellen anzulegen. Hierzu geht ihr in euer PHPmyAdmin tool, geht auf eure Datenbank und klickt Links in der Navigation auf das kleine Button wo: ´SQL´ steht, und fuegt folgenden Code ein, erklaerungen stehen weiter unten:

    Das Feld id ist dazu da, jedem Eintrag eine "identitaet" zu verliehen.
    Ich denke die restlichen Felder erklaeren sich von Alleine, sie "stehen" zu ihrem Namen ;)

    So, nun kommen wir zu dem Formular, wo wir die Daten eintragen muessen. Ich habe mal eins vorbereitet, es ist ganz klein, total unformatiert, und dient nur zum Zweck, ich hoffe verschoenerungen koennt ihr selbst vornehmen. Auch hierzu folgen erklaerungen weiter unten.

    Die Datei, die in action="" steht, ist die Datei, die die Daten nachher weiter zur Datenbank sendet, dazu aber gleich mehr. Hier ist method="post" angebracht, weil unter "Get" die Daten ueber die URL weitergetragen werden, und das sinnlos ist, und auch unschoen Aussieht, wenn man eine Ellenlange URL hat.
    Wichtig: Die Woerter die bei input unter name="" stehen, muessen Identisch mit Spaltennamen in eurer Datenbank sein. Bitte die bezeichnungen alle klein Schreiben, da es nachher zu unschoenen Komplikationen kommen kann.

    Jetzt brauchen wir noch die oben angesprochene "datei.php".
    Was muss in der Datei enthalten sein?

      Sie muss zur verbindung zur Datenbank aufbauen
      Sie muss die Daten verarbeiten koennen
      Sie muss die Daten zur Datenbank senden koennen

    Das hoert sich zunaechst schwerer an, als es wirklich ist.
    Auch hier wieder eine Beispiel-Datei. Erklaerungen wieder unten
    datei.php

    Oben bauen wir eine Verbindung zur Datenbank auf mit dem INSERT INTO befehl sagen wir, in welche Tabelle geschrieben werden soll. Wenn ihr aufgepasst habt, sollten euch die Restlichen Zeilen auch bekannt vorkommen. Das NOW() schickt die Aktuelle Uhrzeit mit Datum mit.
    Die echo-befehle sind recht eindeutig. ;)

    Das groebste ist geschafft. Wenn alles glatt laeuft, sollten die Datenbank jetzt friedlich in der Datenbank ruhen.
    Jetzt muessen wir die Daten wieder auslesen. Auch dazu gibt es ein Script, wie zu erwarten ;)
    Was muss das Script koennen?

      Es muss zur Datenbank verbindung aufbauen
      Es muss die Daten auslesen
      Es muss die Daten Ausgeben, wenn moeglich Formatiert


    Hier wieder erst das script, dann die beschreibung:
    news.php


    Das script ist schon etwas laenger, und Bedarf auch etwas mehr obacht.
    Der obere Teil ist bekannt.
    Mit dem "SELECT" befehl, waehlen wir die Tabelle aus. Mit FROM sagen wir
    welche Spalten wir ansprechen wollen. In diesem falle steht da *. Das * steht fuer alle Spalten, die es in dieser Tabelle gibt, es koennte auch nur

    Zitat

    `inhalt`,
    `titel`,
    `autor`

    stehen.
    Das ORDER BY gibt aus, in welcher "Reihenfolge" die Daten ausgegeben werden sollen. Das wohl am Sinnvollsten ist
    datum DESC da es die Daten nach dem Datum des Eintrags ausgibt, die Neuste News zuerst.
    Die Formation koennt ihr auch mit Tabellen handhaben, ich habe hier nur fuer mich CSS gewaehlt. Bei der Formation braucht ihr keine Angst davor haben, das ihr den HTML text mit dem Php-gefasel vermischt, denn der PHP-code wurde quasi "abgeklemmt"
    Ihr fuegt die Daten aus der Datenbank mit dem Folgenden Code ein:

    Zitat

    <?=$row['titel']?>


    Da wo Titel steht, kommt die Gewuenschte Spalte hin. Das nl2br() sorgt dafuer, das
    ihr Automatisch Zeilenumbrueche bekommt.
    Dieses Script hat noch ein kleines Extra. Ihr koennt es benutzen, oder es lassen. Ihr koennt auf Knopfdruck eure Daten aus der Datenbank wieder Löschen. Da gebe ich euch aber nur den Code, mit einer Kleinen erklaerung, da es eigentlich Klar sein duerfte.
    Es handelt sich hier um

    Zitat


    Spaetestens jetzt stellt es sich als Heldentat raus, das ihr die Spalten alle klein geschrieben habt, da euch diese Funktion sonst nicht zur Verfuegung stehen wuerde. Ich habe die datei del.php genannt. Hier der Code
    del.php


    Danke an `phore` der diese Funktion fuer mich schrieb ;)

    Das wars mit der Kunst. Ihr koennt dieses Script acuh fuer ein log-in Teil nehmen, zumindest die Anmelde-Formulare, und die datei.php jedoch muesst ihr diese fuer euch abaendern, wer will schon Anstatt Kennwort - Autor stehen haben?!? ;)
    Ich hoffe ich habe es verstaendlich geschrieben, und ihr wisst jetzt, wie ihr es angehen sollt.
    Dieses Script hier dient nur als Hilfe, wenn etwas nicht klappt, macht nich mich dafuer Schuldig, sondern versucht erstmal selbst den Fehler rauszusuchen. Und fuer Schaeden uebernehme ich keinerlei Haftung. ;)

    Wenn irgendwelche Fragen auftreten, oder noch Unklarheiten sind, stehe ich gerne mit Tat unr Rat zur verfuegung.

    Mit Freundlichen Gruessen

    Sibbi

    //Edit
    Ich habe vergissen die .css datei mitzu schicken. Dann habt ihr schonmal eine Vorstellung, wie es nachher alles aussieht.
    Hier ist sie:
    style.css

  • Hallo

    Ich hab jetzt mal dein Script versucht(großes Lob an dich für die Mühe :D )
    Aber ich hab da ein problehm.
    Der SQL-Befehl ist irgendwie falsch,weil wenn ich den Befehl eingebe,kommt dieser Fehler:

    Zitat

    MySQL meldet:
    #1064 - You have an error in your SQL syntax near 'collate latin1_general_ci default NULL,
    `titel` varchar(100) collate latin1_gen' at line 3

    Wäre sehr dankbar wenn mir jemand helfen würde


    MFG
    foff

  • Das Problem liegt, wie in der Fehlermeldung schon angedeutet wird, bei deiner Query-Syntax.
    Du müsstest uns also deinen gesamten String angeben, damit wir dir helfen können.

    Viele Grüße

    Mir nicht

  • Ein String ist eine Zeichenkette , am einfachsten ist, wenn du vorerst immer an String = Wort denkst....

    er/ sie meint, du sollst die komplette Anfrage , wie du sie in deinem Dokument hast einmal hier posten, weil es eventuell Schreibfehler sein können ,weswegen es nicht funktioniert ^^.

    Sämtlicher Code erhebt keinen Anspruch auf syntaktische Korrektheit geschweige denn Ausführbarkeit und ist für die Implementation außerhalb der Beispiele nicht geeignet.
    [Blockierte Grafik: http://www.snippr.de/social/img/logo.png]
    Kein Support für kommerzielle Scripts | Kein kostenloser Support via ICQ

  • hi und danke erstmal dafür

    ich hab alles ausprobiert und genauso gemacht klappt auch alles gut nur das löschen nicht
    der code sieht so aus

    <? include('config.php'); ?>

    <? @mysql_connect(name, pw[geheim] ^^) OR die(mysql_error());
    mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());


    if ($_GET['action'] == 'delete') {
    mysql_query("
    DELETE FROM
    `news`
    WHERE
    `id` = '{$_GET['news_id']}'
    LIMIT 1
    ");
    echo "<script type=\"text/javascript\">window.location.href='news.php';</script>";

    }

    ?>

    was habe ich falsch gemacht?

  • Sicher, dass du auch richtig auf Delete verlinkt hast?
    Ein Hinweis:
    Seid euch darüber im Klaren, dass ihr euch dazu noch einen Login schreiben solltet, also dass das jeder löscht und erstellt geht noch nicht einmal in der Wikipedia. ;)

    Noch eine Frage:
    Wofür ein <input></input> ???

    Schön, dass du das gemacht hast. ;)

  • hi ich war der unregistrierte ^^
    ja ich lass darüber dann eine htaccess laufen ich hab so ne art admin bereich daraus gemacht ^^
    drot trägt man news usw. ein und auf der startseite werden sie angezeigt

    und dürfe richtig verlinkt sein es kommt diese meldung:
    Notice: Undefined index: action in /www/mein pfad/del.php on line 7

    sieht wie gesagt so aus:
    <? include('config.php'); ?>

    <? @mysql_connect(host, db, db pw) OR die(mysql_error());
    mysql_select_db(MYSQL_DATABASE) OR die(mysql_error());


    if ($_GET['action'] == 'delete') {
    mysql_query("
    DELETE FROM
    `news`
    WHERE
    `id` = '{$_GET['news_id']}'
    LIMIT 1
    ");
    echo "<script type=\"text/javascript\">window.location.href='index.php';</script>";

    }

    ?>

    danke erstmal

  • undefined index: action.... $_GET['action'] existiert nicht...
    wie sieht der link aus, auf den du klickst um zum delete zu kommen?
    index.php?action=delete&news_id=123 <- so?

    nur mal so als kleine anmerkung...
    übergabe variablen schreibt man NIEMALS dierekt in eine Datenbank ohne sie zu prüfen.... wenigstens ein addslashes($_POST['bla']) ist ein MUSS!
    sonst kommt irgendwann doch nochmal einer auf diese Seite und löscht deine komplette DB, weil man nicht auf sicherheit geachtet hat, denn man kann sonst jeden sql befehle ausführen den man möchte.

    gruß

  • ich weiss ich bin ja auch erst am probieren aber danke schonmal ^^
    http://ps3n.de/st/del.php
    so rufe ich die auf

    noch 2 fragen wenn da sgeklärt ist.
    kann ich per php meine vorhandenen datensätze bearbeiten, dass ich nicht jedes mal in phpmyadmin muss?
    wäre super cool wenn mir jemand ne antwort darauf gibt
    und kann ich ne blätterfunktion einbauen? ich hab schon duzende im internet gesehen aber keine aht richtig funktioniert

    ich wäre so dankbar ~.^

    ich hab grad erst php angefangen zu lernen

    aber schonmal vielen dank

  • hi

    ersteinmal finde ich es ziemlich sinnlos immer wieder in den PHP Modus zu wechseln und dann wieder rauszugehen, wenn du am ende die Ausgabe doch per echo machst ;)

    wenn du die del.php direkt aufrufst ist das schön und gut, in deiner if-Abfrage möchtest du aber $_GET['action'] und $_GET['action ist nur gesetzt wenn du del.php?action=delete aufrufst

    das '=delete' ist nur da, damit deine IF-Abfrage auch zutrifft.
    Du solltest vielleicht die IF-Abfrage so schreiben:
    if (isset($_GET['action']) AND $_GET['action'] == 'delete')

    Das sorgt dafür, dass der Inhalt nicht geprüft wird, wenn die Varaible schon nicht gesetzt ist. Somit wäre ein Notice entfernt. Das ändert allerdings nichts daran, dass dein Script so noch lange nicht fertig ist und funktionieren kann.

    was die Meldung von PHPMyAdmin angeht, so hatte ich die auch schon mehrfach und das Problem liegt hier an dem "collate latin1_general_ci " solche Angaben mochte PHPMyAdmin bei mir nie verarbeiten und ich bin sicher, wenn du diese Vorgaben aus dem String entfernst, wird es funktionieren.

    greetz

    chilly

  • also hi ^^
    ich hab das ganze jetzt mal anders gemacht aber danke für eure hilfe
    nur wenn der, der sich das ausgedacht und geschriebn hat nicht meldet ist das nicht so gut für meine vielen fragen ^^

    danke

  • Warum?
    er hat alles geschrieben, was man wissen muss. Du müsstest dir nur die Arbeit machen es auch ordentlich zu lesen. Wenn du dich mit dem, was du alles kopiert hast, auseinander setzen würdest, hättest du mit sicherheit keine Probleme gehabt.

    Ansonsten kann ich nur folgendes empfehlen: http://tut.php-q.net/
    Damit habe ich angefangen ;)

    greetz

    chilly

  • Super Tutorial, gut erklärt und nachvollziehbar.

    Ich habe alles so gemacht wie du es erklärt hast. Entweder habe ich aber doch einen Fehler gemacht oder irgendwas anderes stimmt da nicht.

    Code
    Not Found The requested URL /Root/index/admin/datei.php was not found on this server.
     Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
      Apache/2.2 Server at max-root.bplaced.net Port 80

    Kann mir jemand helfen und sagen was ich falsch gemacht habe, bzw. woran es liegen könnte?

    Vielen Dank im voraus.

    -MfG Santos-

    Don't follow me, I run into walls.

    2 Mal editiert, zuletzt von MyXoToD (14. August 2009 um 13:12)

  • Da hast du wohl die Datei anders bennant, falsch hochgeladen oder faksch aufgerufen. Beachte: Bei Linux (viele Anbieter nutzen dies als Webserver, so wie in deinem Falle) unterscheidet sich die Groß- und Kleinschreibung, also wenn die Datei "Datei.php" heißt, kannst du sie nicht mit "datei.php" aufrufen. Am besten immer alles klein schreiben.