Mein erster php und mysql Code, frage gibt es darin einen Fehler, wenn ja welcher?

  • -- phpMyAdmin SQL Dump
    -- version 4.1.12
    -- http://www.phpmyadmin.net
    --
    -- Host: 127.0.0.1
    -- Erstellungszeit: 06. Jul 2014 um 11:02
    -- Server Version: 5.6.16
    -- PHP-Version: 5.5.11


    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";



    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;


    --
    -- Datenbank: `test`
    --


    -- --------------------------------------------------------


    --
    -- Tabellenstruktur für Tabelle `test`
    --


    CREATE TABLE IF NOT EXISTS `test` (
    `kondakt_id` int(11) NOT NULL,
    `vorname` varchar(50) NOT NULL,
    `nachname` varchar(50) NOT NULL,
    `strasse_und_hausnummer` varchar(50) NOT NULL,
    `plz` text NOT NULL,
    `stadt` varchar(50) NOT NULL,
    `telefonnummer` varchar(50) NOT NULL,
    `emailadresse` varchar(50) NOT NULL,
    PRIMARY KEY (`kondakt_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;



    ============================




    <!DOCTYPE html>
    <html>
    <head>
    <title/>Tabelle mit Datenbank-Content fuellen</title>
    <meta charset="utf-8" />
    </head>
    <body>
    <h1>Tabelle mit Datenbank-Content f&uuml;llen</hl>
    <?php
    mysql_connect('localhost`, `root´, `admin`) or die (mysql_error());
    mysql_select('tutorial' ) or die (mysqlerror());
    $sql = "SELECT * FROM Kontakte";
    $query = mysql_query ($sql)or die(mysql_error());


    echo '<table border>';
    echo `<tr>`;
    echo '<th>Vorname</th>';
    echo '<th>Nachname</th>';
    echo '<th>Straße und Haus-Nr.</th>';
    echo '<th>PLZ</th>';
    echo '<th>Stadt</th>';
    echo '<th>Telefonnumer</th>';
    echo '<th>eMail-Adresse</th>';
    echo '<tr>';



    while($fetch = mysql_fetch_assoc($query)) {




    echo '<tr>';
    echo `<td>' . $fetch['vorname'] . '</td>';
    echo `<td>' . $fetch['nachname'] . '</td>';
    echo `<td>' . $fetch['strasze_und_hausnummer'] . '</td>';
    echo `<td>' . $fetch['plz'] . '</td>';
    echo `<td>' . $fetch['stadt'] . '</td>';
    echo `<td>' . $fetch['telefonnummer'] . '</td>';
    echo `<td>' . $fetch['emailadressa'] . '</td>';


    echo `<td>';


    }


    echo `<table>';

  • Hallo! :)
    Also .. Bitte suche im Forum mal nach -den eigenen Code lesbar präsentieren-
    Dein Code wird so nicht funktionieren .... wenn man mal die ersten paar Zeilen anschaut...

    Zitat
    PHP
    <?php
        mysql_connect('localhost`, `root´, `admin`) or die (mysql_error());
        mysql_select('tutorial' ) or die (mysqlerror());
        $sql = "SELECT * FROM Kontakte";
        $query = mysql_query ($sql)or die(mysql_error());
    
    
    
    
        echo '<table border>';

    Sieht man das etwas nicht stimmt.. Du musst auf den Unter schied zwischen

    Code
    ' <- einfachem Anführungszeichen (benutzt man in php/js/sql als sting anfang/ende {es werden in php KEINE veriablen darin geparst})
    " <- Doppeltem anführungszeichen (fast gleich wie bei einfachen {variablen WERDEN geparst})
    `<- Schrägem Anführungszeicen ... wie auch immer das Ding heist :DD (benutzt man gleube nur in sql für tabellen und datenbank namen {achtung! nur in SQL code! und nicht einmal ` und einmal ´})
    ´<- Schrägem Anf. nach RECHTS ... (soweit ich weiß, für NICHTS benutzen)

    ACHTEN!!!


    PHP
    <?php
        mysql_connect('localhost', 'root', 'admin') or die (mysql_error());
        mysql_select('tutorial' ) or die (mysqlerror());
        $sql = "SELECT * FROM `Kontakte`";
        $query = mysql_query ($sql)or die(mysql_error());
    
    
    
    
        echo '<table border>';

    In Zeile 3 sind die functions mysqli_select_db() UND mysql_error() FALSCH geschrieben!
    aber sieht doch schon besser aus? :)


    So dann noch das hier..

    PHP
    //VERALTET <- dürfte auch eine schöne php fehlermeldung ausgeben...
    mysql_[...]
    //IST NEUER und das richtige!
    mysqli_[...]

    Wenn du mal ein großes Projekt mit viel PHP/Mysql Kram anfangen willst... mal nach PDO umschauen ....
    Und 1 Echo reicht...

    PHP
    echo'
        <td>'.$ergebniss['eins'].'</td>
        <td>'.$ergebniss['zwei'].'</td>
    ';

    Joo :)


    Hier noch das was du jetzt eig. erwartest.. ;)

  • An dieser Stelle nun der Hinweis: Bitte aufhören den Neulingen PDO ans Herz zu legen, dies ist für das anfängliche Verständnis mehr als ungeeignet :!: Dazu kann man im fortgeschrittenen Stadium kommen.

  • Danke!


    Was mache ich, wenn ich eine 2 Seite mache?
    Muss ich da noch einmal das " mysql_connect('localhost`, `root´, `admin`)
    scheiben?


    Oder wie kann ich da die Datenbank ansprechen?

  • Das ist der Standardweg, es gibt auch Erweiterungen mit deren Hilfe eine Verbindung zur Datenbank in einer Session gespeichert werden kann, das ist jedoch nicht ganz so einfach, ein Sicherheitsrisiko und nicht wirklich notwendig.


    Also ganz einfach pro Seite ein mysql_connect, dies kannst du auch in eine externe Datei schreiben und importieren: require_once() - php.net


    Wenn du dabei Hilfe brauchst helfen wir dir gerne weiter.

  • Ja, Wolf das ist in guter Anfang, wo ich weitermachen kann!


    Danke dir Basiii!


    Wenn ich jetzt eine Internetseite mache mit mehreren Seiten und das Ganze auf Englisch,


    französisch, italienisch, deutsch machen würde, wo der komplette Übersetzungsinhalt aus der Datenbank kommt, wie kann man sowas umsetzen?


    Mein Vorschlag:
    1.) Datenbank erstellen
    2.) Tabelle für Übersetzung
    3.) Übersetzungs_id
    4.) 4 spalten machen für deutsch, englisch, französisch, italienisch wie müsste jetzt sowas lauten?

    Zitat


    <td>'.$datensatz_deutsch['deutsch_text_begruessung'] .'</td>
    <td>'.$datensatz_englisch['englisch_text_begruessung'] .'</td>
    <td>'.$datensatz_franzäsisch['franzäsisch_text_begruessung'] .'</td>
    <td>'.$datensatz_italienisch['italienisch_text_begruessung'] .'</td>

    Oder wird das alles in die CSS Datei reingeschrieben, dass wenn jetzt die englische Sprache gewünscht wird, auch die englische Sprache angezeigt wird!

  • Ich denke das ist ein ganz 'klein bisschen' zu viel für den anfang :ironie:
    Sagen wir es so ... meine Variantre wäre es 4 Tabellen zu erstellen die eine heist deutsch die andere englisch .... darin werden die Jeweiligen Inhalte gespeichert und je nachdem welche sprache angeklickt wurde, werden die Inhalte aus der jeweiligen Tabelle geholt.


    Aber an deiner Stelle würde ich mich erstmal mir EINER tabelle beschäftigen und erfahrung mit php /sql sammeln..!

  • Wie spreche ich dann das deutsche Wort an?


    Tabelle Deutsch:
    Spalte 2 Stück
    1.) deutsch - 2.) Begrüßung


    Da ein "Ausgabefeld Nummer 1" die Zahl 1 eintragen für das deutsche Wort "Begrüßung"
    finde ich jetzt nicht so gut!


    Als ID wäre besser "D (für Deutsch) und dass Wort: Begrüßung


    Denn ich möchte ungerne das Ganze, später erneut umzuändern,
    darum möchte ich es jetzt schon
    einfügen!

  • Also, damit ich das richtig verstehe:
    Du möchtest auf deiner Seite im Grunde nur die IDs der jeweiligen Phrase angeben und dann, je nachdem welche Sprache vom Nutzer gewählt wurde, die passende Phrase für die ID einsetzen?
    Da gäbe es zwei Möglichkeiten:

    SQL
    -- Mit einer Tabelle und einer Spalte pro Sprache
    SELECT `sprachenid` FROM `sprachentabelle` WHERE `id` = `platzhalterid`;
    
    
    
    
    -- Mit einer Tabelle pro Sprache (tabelle hat das Sprachenkürzel als Namen)
    SELECT `phrase` FROM `sprachenid` WHERE `id` = `platzhalterid`;
  • Ich weiß jetzt nicht, ob wir gemeinsam von dem gleichen sprechen!


    Beispiel:
    Satz 1, aus der Datenbank: Was machst du heute?
    Satz 2, aus der Datenbank: Was gibt es bei dir heute Abend zum Abendessen?
    Satz 3, aus der Datenbank: Ich fahre mit dem Auto zur Arbeit!


    Jetzt kommt ein englischer Besucher auf meine Homepage, und klickt oben auf die englische Sprache, so das er die drei Sätze in Englisch lesen kann!
    Das gleiche soll möglich sein, wenn ein Italiener, oder ein Franzose auf die Seite kommt, das er es in seine Sprache lesen kann!


    SQL
    -- Mit einer Tabelle und einer Spalte pro Sprache
    SELECT `sprachenid` FROM `sprachentabelle` WHERE `id` = `platzhalterid`;
    
    
    
    
    -- Mit einer Tabelle pro Sprache (tabelle hat das Sprachenkürzel als Namen)
    SELECT `phrase` FROM `sprachenid` WHERE `id` = `platzhalterid`;


    Nun würde mich interessieren, wie man meine 3 Sätze richtig darstellt!

  • Das ist relativ leicht, du hast grundsätzlich eine Datenbank, zu der du dich verbindest, wie wolf oben erklärt hat.


    Danach musst du dich entscheiden, ob du in dieser Datenbank nur EINE Tabelle, aber mit MEHREREN Spalten (pro Sprache eine Spalte) haben willst, oder MEHRERE Tabellen (pro Sprache eine), die dann allerdings nur jeweils zwei Spalten haben.
    Wie du es machst ist egal, Hauptsache ist, dass die gleichen Phrasen (zB "Ich komme mit dem Auto" - "I'll come by car." ...) die gleiche ID haben.


    Danach ist es leicht: Erste Spalte einer/der Tabelle ist die ID, danach kommt die entsprechende Phrase. Bei einer Tabelle sähe es dann ungefähr so aus:

    Code
    +-----------------+
    | id |  de  | en  |
    +-----------------+
    +-----------------+
    | 01 | Auto | Car |
    +-----------------+
    | 02 |  ... | ... |

    Wenn du mehrere Tabellen hast, ist in jeder halt nur eine Sprache enthalten, dann heißen die TABELLEN "DE", "EN" usw.


    Zuletzt musst du wie gesagt nur noch die ID des Satzes auswählen, dann kannst du den entsprechenden Satz aus jeder verfügbaren Sprache abgreifen, indem du den Ländercode wechselst.
    D.h. dass in deiner Templatedatei im Grunde kein Text, sondern nur die IDs der Phrasen sind, der Text wird aus der Tabelle geladen.


    Das ist jetzt die Varainte, die mir einfällt, wenn jemand einen leichteren Weg kennt, bitte melden, ich wüsste nicht, was für einen Anfänger sonst in Frage käme.


    Um das an einem konkreten Beispiel zu festigen:
    Die Tabelle oben heißt jetzt "Languages". Um nun aus "Languages" die Phrase "Auto" zu erhalten, sähe die Abfrage folgendermaßen aus:

    SQL
    SELECT `de` FROM `Languages` WHERE `id` = 01;


    Du musst also nur wissen, weche ID die Phrase hat und welche Sprache du haben willst. Um nun anstelle von "Auto" ein "car" zu erhalten, tauschst du einfach nur das `de` gegen ein `en` aus.

  • Ich würde Mehrsprachigkeit gar nicht unbedingt per Datenbank umsetzen - so hast du das Problem, dass du nur mit PHP drankommst. Was machst du wenn du mal z.B. mit Javascript ran musst, jedes Mal nen AJAX-Aufruf? Nebenbei müsstest du die Datenbankspalten alle als TEXT deklarieren, weil dir VARCHAR mit seinen 255 Zeichen tendenziell nicht für alle Fälle ausreicht.
    XML-Dateien eignen sich da wesentlich besser und sind flexibler..

  • Zitat

    Denn ich möchte ungerne das Ganze, später erneut umzuändern,
    darum möchte ich es jetzt schon
    einfügen!


    Das wirst du eh noch 219.374.648.632 mal machen, keine Sorge! :D


    Ich denke das @The Scouts Lösung eine sehr gute ist. (wenn man mal von Lauras Argumenten absieht«wo sie vollkommen recht hat).


    Aber ich wiederhole mich noch einmal ... erstmal damit anfangen EINE Tabelle, daraus mal bestimmte Datensätze ausgeben lassen, lösungen finden und dich mit php/sql VERTRAUT machen!
    Ich habe auch so angefangen wie du ... aber das ist eher zum scheitern verurteilt... wenn du ein bisschen mehr php kannst, und dich damit vertraut gemacht hast, wie man durch Benutzereingaben bestimmte Inhalte aus der Tbl anzeigt.. dann ist der Zeitpunkt gekommen wo du mit soetwas anfangen kannst. Keine sorge, dauert nicht so lange aber lohnt sich.


    Versuche mal ein Script zu schreiben was dir den Datensatz mit der id und aus der Tabelle lang holt und anzeigt...
    Hier die url:

    Code
    http://example.com/index.php?id=3&lang=de


    Wenn man den link so anklickt .. soll man dann den Datensatz mit der ID 3 aus der tabelle DE angezeigt bekommen....


    Dann hast du eine gute Grundlage! :)

  • Danke dir The
    Scout
    ,


    ich habe dich verstanden, so schwer ist das ganze eigentlich nicht!
    Ich habe mir es schwerer vorgestellt!


    Von lauras
    Kann ich keine Tote Texte einfügen?
    So geht das, soviel ich weiß:
    '#Ich fahre mit dem Auto zur Arbeit!#


    Von wolf
    http://example.com/index.php?id=3&lang=de


    Meinst du diese Seite?
    http://www.iana.org/domains/reserved


    Wenn ich das ganze dann auf 10 und 15 Sprachen erweitere, ist die Datenbanklösung doch besser!
    Was sagt eigentlich die Datenbank Tuning, Datenbank Geschwindigkeit?
    Ist es dann besser, eine große Languages Tabelle oder mehre kleine Tabellen?
    Eine große Languages Tabelle, dürfte besser zu pflegen sein!

  • Wenn ich das ganze dann auf 10 und 15 Sprachen erweitere


    oO?
    Das ist mal ein Vorhaben.
    Eine word by word Übersetzung macht hier dann wohl keinen Sinn mehr.
    Für kleinere Systeme wie zB beim Login macht das Sinn. Dort wird aus dem Schlüssel "user" Werte in verschiedenen Sprachen : "User", "Benutzer", ...


    Für Ganze Texte/Seiten gibts mMn bessere Methoden:
    - google tools zum Übersetzen ganzer Seiten
    - ganze Texte in verschiedenen Sprachen anbieten/anspeichern


    Wenn Du also selbst die Übersetzungen speichern/anbieten willst, dann würde ich die genannten SQL Varianten nutzen und die ganzen Texte darin abspeichern (je nach länge als TEXT, MEDIUMTEXT, LONGTEXT).
    Ob eine Tabelle für alle Sprachen oder pro Sprache eine Tabelle häng dann wohl von der Menge ab -> wird es unübersichtlich, dann mehrere Tabellen.
    (wobei mit "unübersichtlich" nicht wirklich die Ansicht der Tabellen gemeint ist)

  • Ich werde meine Übersetzung in 2 varianten machen!


    1.) So darstellen das es besuchergerecht angezeigt wird (mehr Seiten)!


    2.) Dann einen Übersetzungsseite alles auf eine Seite, wo das Ganze auf der Übersetzerseite steht.
    Das hießt, auf der Übersetzerseite kann eine Übersetzerin die ganze Texte überprüfen oder eventuell verbessern.


    Das heißt wiederum, die Übersetzerin vergisst keine Seite. Anschließend kann es die Übersetzerin freischalten, so dass es alle Besucher die verbesserte Übersetzung gleich einsetzen kann, wenn Sie es freischaltet.


    Nur weiß ich jetzt noch nicht ganz, wie man so eine Übersetzungsfreigabe macht!
    Ich könnte es mir es so vorstellen, wenn man in ein neben stehende Kästchen ein Kreuz macht, dann hat die Übersetzerin als richtig empfunden und kann veröffentlicht werden.

  • in den Tabellen legst Du einfach eine spalte "public" an

    Code
    id  |key    |en     |de     |public 
    -----------------------------
    1   |key... |text...|text...|0
    2   |key... |text...|text...|1
    3   |key... |text...|text...|0
  • Hallo zusammen,


    ich habe eine HTML E-Mail Signatur, die eine
    Grafik enthält. Wenn ich das Fenster einer E-Mail nicht komplett öffne,
    dann wird, aus Platzgründen, ein Teil der E-Mail Signatur nach unten
    verschoben, was normal ist. Was aber nicht normal ist: das Geschriebene
    unterhalb der Signatur wird nach oben verschoben, überdeckt einen Teil
    der Signatur und wird dabei unleserlich.
    Wie kann ich dieses Problem beheben? Danke Euch im voraus! Grüße

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!