Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: SQL Datumswert 0000-00-00 ausblenden

    robrob

    • Neu im Forum
    • Beiträge: 12
    SQL Datumswert 0000-00-00 ausblenden
    am: 22. Juli 2015, 21:48:01
    Guten Abend zusammen!

    Zwei kleine Fragen:
    1) Ich habe einen Userbereich und jedem dieser User steht ein Formular, bestehend aus zwei kleinen Textfeldern zur Verfügung. Bei Drücken auf den Button (z.B. "Abschicken") werden die eingegebenen Daten an die Datenbank anhand der angemeldeten User-ID übergeben und in einer neuen Tabelle zusammen mit dem Eingabedatum wieder ausgegeben. Klappt wunderbar. Bei jenen Usern, die das Formular noch nicht ausgefüllt haben, wird das Datum "0000-00-00 00:00:00" angezeigt. Wie kann ich das ausblenden und nur bei einem quasi gültigem Wert anzeigen lassen?

    2) Sofern der Button betätigt worden bzw. sofern Daten eines Users eingegeben und der der Datenbank angelegt worden sind, kann man den Button disablen, sodass der User sozusagen nur einmal die Möglichkeit besitzt, Daten anzugeben? Diese also nicht "editieren" kann?

    Ich habe dazu leider keine Informationen gefunden oder ich suche vermutlich nach den falschen Begriffen :(

    Für Unterstützung wäre ich sehr dankbar!

    Schönen Abend derweil.

    Linkback: https://www.modified-shop.org/forum/index.php?topic=33386.0
    rechtstexte für onlineshop

    Godzilla

    • Schreiberling
    • Beiträge: 489
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #1 am: 22. Juli 2015, 22:32:59
    Bei jenen Usern, die das Formular noch nicht ausgefüllt haben, wird das Datum "0000-00-00 00:00:00" angezeigt. Wie kann ich das ausblenden und nur bei einem quasi gültigem Wert anzeigen lassen?

    Die aktuelle Uhrzeit bis auf die Sekunde genau kannst du nur per Javascript anzeigen. Du hast ja schließlich keinen Live-Stream.

    Was das Formular betrifft:

    Code: PHP  [Auswählen]
    <input type="hidden" id="date" value="{$smarty.now}">
     

    {$smarty.now} kannst du noch mit der gewünschten Formatierung versehen:
    http://www.smarty.net/docsv2/de/language.modifier.date.format.tpl

    robrob

    • Neu im Forum
    • Beiträge: 12
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #2 am: 23. Juli 2015, 00:31:32
    Das Format "0000-00-00 00:00:00" wird ja durch die Datenbank automatisch hinterlegt und in die Spalte einfügt. Wird der Button gedrückt, ändert sich das Datum samt Uhrzeit auf den Zeitpunkt des Bestätigens.

    In der Tabelle steht nun jedoch bei jedem User, der das Formular noch nicht ausgefüllt hat, o.g. 00-Format, welches ich gerne einfach ausblenden lassen möchte. Ich dachte da an eine Art If-Schleife, aber irgendwie find ich da keinen Anfang...

    web0null

    • Experte
    • Beiträge: 1.998
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #3 am: 23. Juli 2015, 03:09:37
    zu 1)
    Was willst du genau machen? (Screenshot)
    • ein Datum eintragen was der User auswählen kann?
    • ein Datum automatisch eintragen lassen zum Zeitpunkt des Absendens?

    Ein "hidden" Feld mit dem aktuellem Datum ist jedenfalls unnötig, das geht mit einem SQL Befehl, bzw. kann man den Datentyp so einstellen das es automatisch eingetragen wird.
    Wenn das Datum automatisch eingetragen werden soll, brauchst du kein Input Feld.

    zu 2)
    Datenbankabfrage des User mit seiner ID machen -> wenn vorhanden, Button Ausblenden mit einem if-Konstrukt.

    Gruß

    Fakrae

    • Viel Schreiber
    • Beiträge: 997
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #4 am: 23. Juli 2015, 07:19:14
    Ich vermute du benutzt xtc_draw_input_field?
    In dem Fall wirst du da ja irgendwo deine SQL-Zeit haben, vermutlich als Variable. Ersetz mal die ($variable) durch ($variable!=="0000-00-00 00:00:00" ? $variable : "")
    (Ohne die Klammern)

    robrob

    • Neu im Forum
    • Beiträge: 12
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #5 am: 24. Juli 2015, 01:09:58
    Danke erstmal für die Antworten!

    Ich erläutere das Problem nochmal neu mit Screenshot.

    Also ich habe eine Tabelle in einer SQL-Datenbank. In einer Spalte davon wird das Datum ausgegeben (CURRENT_TIMESTAMP). Sofern ein Benutzer ein Formular nicht ausgefüllt hat, erscheint der Datumswert 0000-00-00 00:00:00 in dieser Spalte und ebenso in der Tabelle, welche ausgegeben wird. Ich möchte aber, sofern dieser Wert zutrifft, dass das Datum ausgeblendet wird.
    Nur, wenn der Benutzer das Formular ausgefüllt hat, soll das Datum angezeigt werden. Z.B. 2015-07-23 15:45:15.

    Habe es schon mit diversen if-Schleifen versucht, aber offensichtlich sehe ich den Wald vor lauter Bäumen nicht.
    Darf ich in diesem Fall die Spalte nicht in der Datenbank direkt mit CURRENT_TIMESTAMP erstellen, sondern direkt innerhalb des Quellcodes definieren?

    Es soll also einfach nur ein Wert in der Zelle angezeigt werden, sofern dieser nicht "0000-00-00 00:00:00" entspricht. Sorry, wenn es womöglich eine dumme Frage eines Anfängers ist, stecke diesbzgl. echt noch in den Kinderschuhen und recherchen haben mich nicht weitergebracht.

    Schönen Abend!

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Fakrae

    • Viel Schreiber
    • Beiträge: 997
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #6 am: 24. Juli 2015, 06:34:22
    Genau das müsste mein Code-Schnipsel eigentlich tun. Gib uns vielleicht einfach mal den Code, an dem du deine Anzeigefelder erzeugst.

    webald

    • modified Team
    • Beiträge: 2.791
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #7 am: 24. Juli 2015, 07:51:12
    0000-00-00 00:00:00 ist bei einem Datumsfeld wie leer oder null. Ein Datumsfeld, in dem Nichts steht, wie bei einem Varchar-Feld etwa gibt es nicht.

    Lerne zu unterscheiden zwischen Datenspeicherung und Anzeige/Formatierung bei der Ausgabe. Fakrae hat Dir das ja eigentlich schon gezeigt wie das geht.

    Was mir aber bei Deinem Tabellen-Design noch aufgefallen ist: Warum verwendest Du ein Timestamp-Feld und kein Datetime? Kennst Du die Unterschiede?

    robrob

    • Neu im Forum
    • Beiträge: 12
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #8 am: 24. Juli 2015, 09:57:58
    Hier der Code, wo u.a. das Datum nach Betätigen des Buttons in die Datenbank übermittelt wird.
    Code: PHP  [Auswählen]
    $datum1 = DATE(current_date);
    if ($_REQUEST["btnConfirm"] == "Bestätigen")
       {
         $SQL = "UPDATE tb_Shop
                     SET      Mitarbeiter = '"
    .($_REQUEST["Mitarbeiter"] == "" ? "" : $_REQUEST["Mitarbeiter"])."', Bemerkung = '".($_REQUEST["Bemerkung"] == "" ? "" : $_REQUEST["Bemerkung"])."', Username = '".$_SESSION["Username"]."', Datum = '".$datum1."'
                     WHERE   ID = '"
    .$ShopID."'";

                            $result = mysql_query($SQL) or die (SQL_ErrorMessage($SQL));

    Und hier wird das Datum ausgegeben.

    Code: PHP  [Auswählen]
    echo "<td align='center' width='130'>".mysql_result($result, $i, "Datum")."</td>";

    Der Code von Fakrae hab ich ausprobiert, aber es hapert, glaube ich, am Ausgabepunkt.

    webald

    • modified Team
    • Beiträge: 2.791
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #9 am: 24. Juli 2015, 10:14:27
    Wenn das Deine Abfrage ist um Daten in der DB einzufügen oder zu aktualisieren, dann viel Spass. Am Ende hat jede ShopID geau einen Mitarbeiter und das vermutlich sogar mehrfach.

    Ohne Dir zu nahe treten zu wollen, aber ich glaube, Du weißt nicht so genau was Du da machst. Nimm dir ein kleines Testrpojekt mit einem Formular um Daten zu erfassen und die Tabelle auszugeben. Trenne Eingabeformular und Ausgabeseite. Wenn dasa alles klar ist kannst du das gerne auch in enier Seite zusammenfassen. Danach hast Du alles gelernt was Du für die Lösung Deines Problems brauchst.

    Fakrae

    • Viel Schreiber
    • Beiträge: 997
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #10 am: 24. Juli 2015, 11:06:58
    Code: PHP  [Auswählen]
    $_REQUEST["Mitarbeiter"] == "" ? "" : $_REQUEST["Mitarbeiter"]
    das ist meine Lieblingsstelle :D
    Prüfe ob Mitarbeiter leer ist, wenn es leer ist, speichere leer, wenn es nicht leer ist, speichere den Inhalt... wenn du bei einem leeren Inhalt sowieso einen leeren Inhalt speicherst, warum prüfst du dann überhaupt? ;-)
    Gleiche Geschichte beim Thema "Bemerkung"

    Mein Code funktioniert nicht, weil du direkt auf dein Datenbank-Ergebnis zugreifst. Du kannst das trotzdem lösen, indem du http://php.net/manual/de/function.str-replace.php benutzt, aber dein ganzes Code-Konstrukt ist mieserabel (sorry, ist einfach so).

    Statt
    Code: PHP  [Auswählen]
    echo "<td align='center' width='130'>".mysql_result($result, $i, "Datum")."</td>";
    müsstest du
    Code: PHP  [Auswählen]
    echo "<td align='center' width='130'>".str_replace("0000-00-00 00:00:00","",mysql_result($result, $i, "Datum"))."</td>";
    versuchen - das könnte helfen, aber trotzdem solltest du dir mal genau überlegen was du tun möchtest und wie du das löst - der Code sieht einfach nicht durchdacht aus.

    robrob

    • Neu im Forum
    • Beiträge: 12
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #11 am: 24. Juli 2015, 17:01:57
    Ja, ich bin quasi blutiger Anfänger und habe mir einige Codeschnipsel zusammengesetzt ohne großartig drüber nachzudenken. Ist natürlich der falsche Weg, ich weiß. Da es funktioniert hat, habe ich nicht viel daran verändert.

    Ich versuche mich Stück für Stück mehr mit der Materie zu befassen und dazuzulernen. Ihr habt mir dabei schon um einiges weitergeholfen.

    @Fakrae: Das mit der Datumsanzeige hat wunderbar geklappt. Ich danke dir vielmals!

    Danke auch für eure Ehrlichkeit zum Code. Wie erwähnt, stecke noch weit am Anfang :-)

    Beste Grüße!

    webald

    • modified Team
    • Beiträge: 2.791
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #12 am: 24. Juli 2015, 17:06:41
    Ich will noch mal kurz auf das TimeStamp-Feld kommen.

    Wenn mir die Hitze nicht allzu sehr zugesetzt hat, dann hat ein Timestamp-Feld nur eine Wertebereich von 1970-2038 und den weiteren Nachteil dass zwar in UTC gespeichert wird, aber die Zeitzone des Servers für die Ausgabe verwendet wird. Ein Umzu in eine andere Zeit zone hat dann bei gleichen Werten in der Datenbank unterschiedliche Ausgaben zur Folge. Ich wäre als bei Deinem Vorhaben für ein Datetime-Feld.

    robrob

    • Neu im Forum
    • Beiträge: 12
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #13 am: 24. Juli 2015, 17:50:09
    Danke für deinen Tipp.

    Nun, dieses Projekt findet nur innerhalb eines kleinen Kreises Verwendung, daher wird es mit den Zeitzonen nicht zu genannten Problemen kommen.
    Ich hatte mir die Unterschiede zwischen TIMESTAMP und DATETIME nach deinem vorherigen Post durchgelesen und kam daher zu dieser Entscheidung.

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Re: SQL Datumswert 0000-00-00 ausblenden
    Antwort #14 am: 27. Juli 2015, 18:28:24
    Du solltest dringend den User-Input schützen/escapen bevor du ihn in die DB schreibst sonst ist deine DB über kurz oder lang gehackt.
    Mit der Aussage
    Zitat von: robrob
    ... ich bin quasi blutiger Anfänger...
    sollte dir auch klar sein, daß es sicherheits-relevante Dinge gibt wenn man eine Web-Implementation codiert die dir evtl nicht bekannt sind.

    Benutze am Besten nicht $_REQUEST['Mitarbeiter'] sondern $_POST['Mitarbeiter'] (entsprechend im form-tag des verwendeten HTML-Formulars die Methode "post" verwenden) und als ein Minimum an Schutz für von Usern eingegebene Daten sollte mysql_real_escape_string() verwendet werden vor dem Schreiben in die DB. Noch besser ist zusätzlich die explizite Prüfung auf z.B. strlen() und die Prüfung auf unerlaubte oder lediglich erlaubte Zeichen mittels preg_match().
    Auch sollte ein Formular Fehlermeldungen ausgeben wenn unerlaubte Zeichen verwendet werden.

    Gruß,
    noRiddle