Problem mit php bzw. eintragen von texten/namen

Wir sammeln alle Infos der Bonusepisode von Pokémon Karmesin und Purpur für euch!

Zu der Infoseite von „Die Mo-Mo-Manie“
  • Also, ^^
    Hier ich habe ein problem.
    Nach 2 einträgen will bei phpmyadmin bzw. in der tabelle nichts mehr eingetragen werden hier die codes:
    select.php

    PHP
    <?phpmysql_connect("localhost", "root", "");mysql_select_db("test");$abfragen = "SELECT * FROM test";$query = mysql_query($abfragen);while($aus = mysql_fetch_object($query)){echo "<center>";echo "$aus->name";echo "$aus->id";echo "<br>";echo "$aus->text";echo "<br>";echo "$aus->date";echo "<hr width='500'><br>";echo "</center>";}?>


    eintragen.php

    HTML
    <html><head /><body><form action="bestaetigen.php" method="POST">Username: <input type="name" name="user"><br>Text:<br><textarea cols="20px" rows="10px" name="text"></textarea><br><input type="submit" name="date"></form></body></html>


    bestaetigen.php


    Der code ist jetzt mal auf die schnelle gemacht >.>
    und dann noch wie speichert mysql das datum, bei mir kommt immer nur 0000-00-00-00
    und dann will ich es verhindern das man html benutzen kann.
    ABER wenn in der textarea ein zeilenumbruch gemacht wird soll, auch im eintrag einer sein ^^

  • Also wenn du noch die Tabellenstruktur der MySQL-Tabelle angeben könntest, wärs einfacher^^"
    Was ich so aber schon sagen kann:
    Wegen dem Datum: In PHP werden Zeitangaben immer als Unix-Timestamp gehandhabt. Den kann man zwar umformatieren, aber es geht auch einfacher. Du kannst nämlich die MySQL-Funktion FROM_UNIXTIME verwenden. Dabei wird ein Unix-Timestamp automatisch in das MySQL-Datumsformat umgewandelt. Hier mal in kleines Beispiel. Datenbank-Connect etc. hab ich mal weggelassen, da das nicht wichtig is:

    PHP
    <?php
    
    
    $timestamp = time();
    $sql = "INSERT INTO example_table VALUES(FROM_UNIXTIME($timestamp))";
    
    
    ?>


    In der MySQL-Tabelle muss dann aber der entsprechende Datentyp für die Spalte gesetzt sein (DATE, TIME oder DATETIME).


    Und was das verhindern von HTML-Betrifft: Es gibt da so tolle PHP-Funktionen, die automatisch nen normalen Zeilenumbruch in einen HTML-Umbruch verwandeln oder eine Funtkion, die automatsch alle HTML-Spezifischen Zeichen in die entsprechenden Entities verwandelt. Wichtig ist hier aber die Reihenfolge, in der die Funktionen auf den String angewendet werden. Und da es ein bisschen zu viel arbeit ist, jede der Funktionen genau zu erklären, hier mal ein paar Links:
    htmlentities()
    htmlspezielchars()
    nl2br()

  • ok danke ^^
    Das löst einige meiner probleme aber,
    aber wie soll ich das mit dem zeilenumbruch in den code einfügen?!
    e:
    er trägt immernoch keine einträge mehr ein ôo

  • Also was mir auch grad noch aufgefallen ist: In deinem Script ist ein MySQL-Injection exrem einfach, da die Usereingaben in keiner weiße escaped werden. Einfach um dein Scipt abzusichern, hab ich noch mal die entsprechende Funktion miteingefügt.
    Außerdem kann das mit dem Datum ja gar nicht funktionieren. Du übernimmst das Datum ja aus dem Submit-Button des Formulars. Der liefert dir ja aber gar keinen Unix-Timestamp. Hab das auch mal entsprechend abgeändert:


    Dass das jetzt direkt so klappt, bin ich mir nicht ganz sicher. Is einfach mal so aus dem Kopf geschrieben und nicht getestet. Ließe sich über ne Funktion, die den Übergebenen String automatisch escaped etc. auf jedenfall eleganter lösen^^


    Edit: Jetzt hab ich doch rly vergessen, die MySQL-Timestamp Funktion hinzuzufügen <.<
    habs nochmal schnell geändert.

  • ja, ich weiß ich wollte nur was ausprobieren und hab den code hin geschmiert ^^
    Aber das mit den einträgen geht immernochnicht also, er trägt nach 2 nichts mehr ein

  • Also ich habs jetzt mal ausgetestet. Funtkioniert alles, HTML- und MySQL-Syntax wird richtig escaped, eingegebene Zeilenumbrüche im Textfeld werden auch dargestellt. Und das mit dem Problem, dass nach zwei einträgen nichts mehr geht, kann ich nicht nachbilden. Bei mir funktionierrts immer noch und ich hab schon den sechsten Testeintrag gemacht. Vielleicht liegts ja an deiner Tabellen-Struktur. Ich (bzw. PhpMyAdmin :P ) hab/hat die Tabelle mit folgendem Query erstellt:

    SQL
    CREATE TABLE `test`.`test` (
    `id` INT( 100 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `name` VARCHAR( 10 ) NOT NULL ,
    `text` MEDIUMTEXT NOT NULL ,
    `date` DATETIME NOT NULL
    ) ENGINE = MYISAM
  • ich habs raus warum er nichts einträgt >.<'
    Ich habe vergessen id auf AUTO_INCREMENT zu stellen >.> bei dem phpmyadmin von xampp übersieht man das leicht ^^
    A_I nja...jetzt hab ich's ja :D
    kann geclosed werden

  • k, dann will ich mal so freundlich sein, und closen. Hab nur noch eine Sache zu sagen:
    Wenn du das Ausgabe-Format des Datum bzw. der Zeit selber bestimmen willst, solltest du im SELECT-Query noch die MySQL-Funktion UNIX_TIMESTAMP auf die Date-Felder anweden. Dann kannst du die Ausgabe ganz normal per strftime() regeln.