SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Webseiten professionell erstellen

Webseiten professionell erstellen zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 19.01.2011, 13:49:51
Leaderred Leaderred ist offline
Anfänger
 
Registriert seit: Nov 2010
Alter: 43
Beiträge: 40
Leere date Ausgabe unterbinden

Hallo, gibt es eine Möglichkeit, dass man leere Aus und Eingabe für datumsfelder (0000-00-00) verhindert? Hab schon versuch das durch eine Abfrage auf NULL zu setzen, brachte aber keinen Erfolg. Wenn ich den selben Datensatz in phpmyadmin auf NULL setze, verschwindet 0000-00-00

Habt ihr da eine Idee?
Hatte dazu schon einiges gegoogelt, aber nix brauchbares gefunden. Es gibt wohl eine Einstellung um leere Datumsfelder zu unterbinden, leider weiß ich nicht wie ich das bei einem SQLlite Server einstellen kann

Hab xamplite zum testen hier zu Hause

Eine Möglichkeit um nur die Anzeige von leeren Date Felder zu verhindern würde mir schon reichen. Ist jetzt nicht entscheident dass die mit NULL in der DB stehen

Vielen Dank schonmal
Mit Zitat antworten
  #2  
Alt 19.01.2011, 14:04:56
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Leere date Ausgabe unterbinden

Wesentlich sind die Definitionen beim CREATE TABLE.

Beispiel:

Code:
CREATE TABLE test_datum (
 id INT NOT NULL,
 datum DATE,
 PRIMARY KEY (id)
);

INSERT INTO test_datum VALUES
( 1, CURRENT_DATE),
( 2, NULL),
( 3, '2010-01-02');

SELECT id, datum
  FROM test_datum
 WHERE datum IS NULL;
+----+-------+
| id | datum |
+----+-------+
|  2 | NULL  |
+----+-------+
1 row in set (0.03 sec)


SELECT id, datum
  FROM test_datum
 WHERE datum IS NOT NULL;
+----+------------+
| id | datum      |
+----+------------+
|  1 | 2011-01-19 |
|  3 | 2010-01-02 |
+----+------------+
2 rows in set (0.00 sec)

mysql>
Wie sieht Deine Tabellenstruktur aus? Mach mal..

Code:
mysql>SHOW CREATE TABLE tab1;
Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
  #3  
Alt 19.01.2011, 14:26:21
Leaderred Leaderred ist offline
Anfänger
 
Registriert seit: Nov 2010
Alter: 43
Beiträge: 40
AW: Leere date Ausgabe unterbinden

das Problem ist, dass der ja die datensätze wo so ein Datum enthalten ist ausgeben soll, aber jeweils die Felder ohne Datum leer lassen soll. Also wenn Ausgabe gefüllt ist, soll Bearbeitung und Rückgabe leer sein und nicht 0000-00-00 anzeigen

Tabelle sieht so aus:

Feld Typ Null Standard Verweise Kommentare MIME
gebinfoid* mediumint(11) Nein*
gebietid* smallint(11) Nein* 0*
vname* varchar(25) Ja* NULL*
nname* varchar(25) Ja* NULL*
ausgabe* date Ja* NULL*
bearbeitung* date Ja* NULL*
rueckgabe* date Ja* NULL*
person* varchar(25) Ja* NULL*
timestamp* timestamp Ja* CURRENT_TIMESTAMP*



habs nich über kommandozeile sondern über phpmyadmin erstellt
Mit Zitat antworten
  #4  
Alt 19.01.2011, 15:18:59
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Leere date Ausgabe unterbinden

Ich weiß nicht, ob ich die Frage richtig verstanden habe.

Beispiel:
Code:
SELECT ausgabe, CASE
                 WHEN ausgabe IS NOT NULL THEN NULL
                 ELSE bearbeitung
                END AS bearbeitung,
                CASE
                 WHEN ausgabe IS NOT NULL THEN NULL
                 ELSE rueckgabe
                END AS rueckgabe                

  FROM tabelle1
Am Besten Du macht mal ein komplettes Beispiel mit Testdaten und dem erwünschtem Ergebnis.

Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
  #5  
Alt 20.01.2011, 10:20:22
Leaderred Leaderred ist offline
Anfänger
 
Registriert seit: Nov 2010
Alter: 43
Beiträge: 40
AW: Leere date Ausgabe unterbinden

Ok, hier mal eine abgespeckte Version der Ausgabe:

PHP-Code:
<?PHP

echo "<SPAN ID=BLACK2>Daten bearbeiten:</SPAN><br><br> ";




//FILTER LISTE
include_once ('include/function.php');

if (isset(
$_POST['edit'])) {

$i 0;
$max $_POST[anzahl];

while (
$i <= $max)
{


    
$inp_id FilterAllg($_POST['gebinfoid'][$i]);
    
$inp_nname FilterAllg($_POST['nname'][$i]);
    
$inp_vname FilterAllg($_POST['vname'][$i]);
    
$inp_ausgabe FilterAllgDatum($_POST['ausgabe'][$i]);
    
$inp_bearbeitung FilterAllgDatum($_POST['bearbeitung'][$i]);
    
$inp_rueckgabe FilterAllgDatum($_POST['rueckgabe'][$i]);
        
    
$sqlab "UPDATE daten
            SET 
                vname='$inp_vname', 
                nname='$inp_nname', 
                ausgabe='$inp_ausgabe', 
                bearbeitung='$inp_bearbeitung', 
                rueckgabe='$inp_rueckgabe', 
            WHERE 
                gebinfoid='$inp_id'"
;
    
$res mysql_query($sqlab);
                   
    if (
$sqlab == TRUE) {  }
    else { echo 
'<script type="text/javascript">AlertChange();</script>'; }
    
    
$i++;
//END WHILE
    
//END EDIT
    


    
$sqlab  "SELECT 
                    vname,
                    nname,
                    ausgabe,
                    bearbeitung,
                    rueckgabe                
                FROM 
                    daten
                ORDER BY 
                    nname DESC"
;
    
$res mysql_query($sqlab);
    
$num mysql_num_rows($res);
    
    if (
$num == 0) { echo "Keine Daten vorhanden<br><br>"; }
    else 
    {
    
    echo 
"<TABLE BORDER=0 frame='void'><TR>";
    echo 
"<TD CLASS=TABLE>Nachname:</TD>";
    echo 
"<TD CLASS=TABLE>Vorname:</TD>";
    echo 
"<TD CLASS=TABLE>Ausgabe:</TD>";
    echo 
"<TD CLASS=TABLE>Bearbeitet:</TD>";
    echo 
"<TD CLASS=TABLE>Rückgabe:</TD>";
    echo 
"</TR>";    
    
    
$i 0;
    
    echo 
"<FORM action = '$_SERVER[php_self]' method = 'post'>";
    while(
$row mysql_fetch_array($res)) {
    echo 
"<TR>";
    echo 
"<input type='hidden' size=1px name='gebinfoid[$i]' value='$row[gebinfoid]'></input>";
    echo 
"<TD CLASS=NORMAL><input size=10px name='nname[$i]' value='$row[nname]'></TD>";
    echo 
"<TD CLASS=NORMAL><input size=10px name='vname[$i]' value='$row[vname]'></TD>";
    echo 
"<TD CLASS=NORMAL><input size=7px name='ausgabe[$i]' value='".date_mysql2german($row[ausgabe])."'></TD>";
    echo 
"<TD CLASS=NORMAL><input size=7px name='bearbeitung[$i]' value='".date_mysql2german($row[bearbeitung])."'></TD>";
    echo 
"<TD CLASS=NORMAL><input size=7px name='rueckgabe[$i]' value='".date_mysql2german($row[rueckgabe])."'></TD>";
    
$i++;
    }
    
    echo 
"</TR></TABLE>";
    
    echo 
"<br><input type='submit' name='edit' value='Speichern'></input>";
    
    echo 
"</FORM>";
    }
Hier noch einmal die Funktionen, evtl haben die ja noch was damit zu tun:

PHP-Code:
function FilterAllg ($wert){
    if (isset(
$wert)) {
        
$wert trim($wert);
        
$wert htmlspecialchars($wertENT_QUOTES);
        
$wert stripslashes($wert);
        
$var mysql_real_escape_string($wert);    
    }
    
//Rückgabe
    
return $var;
}

function 
FilterAllgDatum ($wert){
    if (isset(
$wert)) {
        
$wert trim($wert);
        
            
$filter '#[0-9]{2}+\\.[0-9]{2}+\\.[0-9]{2,4}+$#i';
        
            if (!
preg_match($filter$wert) == NULL) {
            
$d    =    explode('.',$wert);
                if (
strlen($d[2]) == '2') { $wert  =  sprintf('%02d-%02d-%02d'$d[2], $d[1], $d[0]); }
                else if (
strlen($d[2]) == '4') { $wert  =  sprintf('%04d-%02d-%02d'$d[2], $d[1], $d[0]); }
            }
        
        
$wert htmlspecialchars($wertENT_QUOTES);
        
$var mysql_real_escape_string($wert);    
    
    
    }
    
//Rückgabe
    
return $var;

und noch die Funktionen fürs Datumumwandeln nach der Ausgabe:

PHP-Code:
function date_mysql2german($date) {
    
$d    =    explode('-'$date);
    
    return    
sprintf('%02d.%02d.%04d'$d[2], $d[1], $d[0]);



weiß jetzt nicht genau wie ihr hier immer die genauen daten ein und ausgaben postet oder testet, deswegen beschreib ich mal was passiert.

In der Datenbank ist ein Satz wie folgt gespeichert:

ID = 1
Name = Testmann
Vorname = Test
Ausgabe = 2010-03-15
Bearbeitung = NULL
Rueckgabe = NULL

Bei der Ausgabe sieht es durch die Umwandlung der Funktionen so aus, ohne Funktionen würd es aber genauso aussehen, nur dass das datum in einer anderen Reihenfolge ist:

ID = 1
Name = Testmann
Vorname = Test
Ausgabe = 15.03.2010
Bearbeitung = 00.00.0000
Rueckgabe = 00.00.0000

Hab grad nochmal getestet, wenn ich die Funktionen weg lasse, werden die Felder leer Ausgegeben und nicht mit Nullen aufgefüllt

Liegt es echt an den Funktionen? Kann man die Nullen nicht direkt unterbinden?
Habs schon probiert mit:

if $ausgabe = '0000-00-00' $ausgabe = NULL
Funktioniert aber auch nicht, weil die Nullen anscheinend vom System gesetzt werden und nicht der wirkliche Variableninhalt sind

Beim Insert lässt er die nicht benötigten Felder auf NULL
Beim Update füllt er alle leeren felder mit Nullen auf, anstatt die auf NULL zu lassen

Wäre über einen Tipp sehr dankbar



EDIT:


Hab grad mal folgendes probiert, dabei wird die Ausgabe richtig ausgegeben, also Felder bleiben leer, das Update auf die Datensätze macht das NULL wieder zu 0000-00-00

PHP-Code:
    if (isset($_POST['ausgabe'][$i])) {
    
$hist_ausgabe FilterAllgDatum($_POST['ausgabe'][$i]); }
    else { 
$hist_ausgabe $_POST['ausgabe'][$i]; }
    
    if (isset(
$_POST['bearbeitung'][$i])) {
    
$hist_bearbeitung FilterAllgDatum($_POST['bearbeitung'][$i]); }
    else { 
$hist_ausgabe $_POST['bearbeitung'][$i]; }
    
    if (isset(
$_POST['rueckgabe'][$i])) {
    
$hist_rueckgabe FilterAllgDatum($_POST['rueckgabe'][$i]); }
    else { 
$hist_ausgabe $_POST['rueckgabe'][$i]; } 
PHP-Code:
echo "<TD CLASS=NORMAL><input size=7px name='ausgabe[$i]' value='".((isset($row[ausgabe]))?date_mysql2german($row[ausgabe]):$row[ausgabe])."'></TD>";
    echo 
"<TD CLASS=NORMAL><input size=7px name='bearbeitung[$i]' value='".((isset($row[bearbeitung]))?date_mysql2german($row[bearbeitung]):$row[bearbeitung])."'></TD>";
    echo 
"<TD CLASS=NORMAL><input size=7px name='rueckgabe[$i]' value='".((isset($row[rueckgabe]))?date_mysql2german($row[rueckgabe]):$row[rueckgabe])."'></TD>"

Geändert von Leaderred (20.01.2011 um 10:34:44 Uhr)
Mit Zitat antworten
  #6  
Alt 20.01.2011, 10:52:31
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Leere date Ausgabe unterbinden

Ein kleines Testprogramm um diese Umwandlungsfunktion zu testen. Ja, NULL wird in '00.00.0000' und was viel wichtiger ist, PHP gibt massenhaft Warnings aus, da NULL oder andere Date-Formate in date_mysql2german() falsch formatiert werden. Diese Funktion sollte mal dringend überarbeitet werden.

PHP-Code:
<?php 

function date_mysql2german($date) {
    
$d    =    explode('-'$date);
    
    return    
sprintf('%02d.%02d.%04d'$d[2], $d[1], $d[0]);


 
$sDatum '20.01.2011';
 echo 
$sDatum.' formatiert zu '.date_mysql2german($sDatum).'<br>';
 
 
 
$sDatum '2011-01-20'
 echo 
$sDatum.' formatiert zu '.date_mysql2german($sDatum).'<br>';
 
 
$sDatum null
 echo 
$sDatum.' formatiert zu '.date_mysql2german($sDatum).'<br>';


?> 


Notice: Undefined offset: 2 in ..testformat.php  on line 6

Notice: Undefined offset: 1 in ..testformat.php on line 6
20.01.2011 formatiert zu 00.00.0020
2011-01-20 formatiert zu 20.01.2011

Notice: Undefined offset: 2 in ..testformat.php on line 6

Notice: Undefined offset: 1 in ..testformat.php on line 6
formatiert zu 00.00.0000
Zitat:
if $ausgabe = '0000-00-00' $ausgabe = NULL
Funktioniert aber auch nicht, weil die Nullen anscheinend vom System gesetzt werden und nicht der wirkliche Variableninhalt sind
Mit zwei == und sollte lauten auf:

PHP-Code:
/* Notlösung */
if ($ausgabe == '0000-00-00'$ausgabe null;
if (
$ausgabe == '00.00.0000'$ausgabe null
Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
  #7  
Alt 20.01.2011, 18:55:58
Leaderred Leaderred ist offline
Anfänger
 
Registriert seit: Nov 2010
Alter: 43
Beiträge: 40
AW: Leere date Ausgabe unterbinden

Das mit dem 2 == hatte ich, habs oben nur vereinfacht gepostet.

Kann bei der Funktion keinen Fehler finden, die macht was sie soll.
Wenn das Feld einen Wert hat, teilt es den anhand der "-" in 3 teile und setzt sie in genau der anderen Reihenfolge wieder zusammen. Wüsste nicht was daran falsch sein sollte

PHP-Code:
/* Notlösung */ 
if ($ausgabe == '0000-00-00'$ausgabe null
if (
$ausgabe == '00.00.0000'$ausgabe null
funktioniert bei mir nicht, hatte es ja auch schon so versucht. der macht immer bei einem Datensatz der bearbeitet wird aus einem Feld das vorher NULL war 0000-00-00

Die ganzen Abfragen dass der das Feld bei NULL nicht anpacken soll bringen bei mir nichts.
Es gibt doch eine Möglichkeit, dass der nicht automatisch leere Datums Felder erzeugt. oder?

Oder hast du noch eine andere Idee? Hab echt schon alles durchprobiert. Evtl gibs auch eine ganz andere Lösung dafür. Grundproblem besteht bei mir erst, seitdem ich versucht habe das Datumsformat umzustellen. Da ich die Datumsfelder auch zum sortieren der ausgabe benötige, kann ich die mysql format_date Befehle nicht gebrauchen, geht also nur über PHP
Mit Zitat antworten
  #8  
Alt 20.01.2011, 21:26:40
thomas_w thomas_w ist offline
Junior Member
 
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
AW: Leere date Ausgabe unterbinden

Zitat:
Zitat von Leaderred Beitrag anzeigen
Das mit dem 2 == hatte ich, habs oben nur vereinfacht gepostet.

Kann bei der Funktion keinen Fehler finden, die macht was sie soll.
Wenn das Feld einen Wert hat, teilt es den anhand der "-" in 3 teile und setzt sie in genau der anderen Reihenfolge wieder zusammen. Wüsste nicht was daran falsch sein sollte
Nun ja, wenn das PHP Skript Notice ausgibt, dann stimmt was nicht. Da nutzt es auch nichts, die Fehlermeldungen zu unterdrücken.

Hiermit werden alle Fehler ausgegben:

PHP-Code:
<?php

    
// Muss in die erste Zeile des Script...
    
error_reporting(E_ALL);
Hier ein paar Änderungsvorschläge für die Umwandlungsfunktion:
(Ich hoffe es ist kein Tippfehler drin, da ich hier kein PHP am Laufen hab...)
PHP-Code:
<?php 

function date_mysql2german($date null) {
 
    
/* bei leerem Parameter direkt null zurück geben*/
    
if (empty($date)) {
     return 
null;
    }
    
    
/* Datum inhalt in Array auftrennen */
    
$d explode('-'$date);
    
    
/* wenn es nicht 3 Array-Elemente sind, stimmt was nicht */
    
if (count($d) <> 3) {
     return 
null
    }
    
    
/* Datum neu formatieren */
    
return    sprintf('%02d.%02d.%04d'$d[2], $d[1], $d[0]);


?>
Ich hoffe, es hilft einen Schritt weiter...

Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Ausgabe trotz leere Tabellen McB_sser MySQLi/PDO/(MySQL) 20 19.11.2010 20:44:40
Ausgabe mit ORDER BY passt nicht... mayer MySQLi/PDO/(MySQL) 5 03.07.2006 01:39:08
Problem mit dem Skript zur AUsgabe des aktuellen Tages selbstlerner PHP Grundlagen 6 05.04.2006 16:32:07
bestimmte html ausgabe joker PHP Grundlagen 2 15.11.2004 22:37:56
Ausgabe eines echo befehls? Funjoy PHP Grundlagen 2 15.07.2003 14:35:34


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:21:50 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt