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
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
19.01.2011, 13:49:51
|
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
|
19.01.2011, 14:04:56
|
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.
|
19.01.2011, 14:26:21
|
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
|
19.01.2011, 15:18:59
|
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.
|
20.01.2011, 10:20:22
|
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($wert, ENT_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($wert, ENT_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)
|
20.01.2011, 10:52:31
|
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.
|
20.01.2011, 18:55:58
|
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
|
20.01.2011, 21:26:40
|
Junior Member
|
|
Registriert seit: Aug 2010
Alter: 14
Beiträge: 395
|
|
AW: Leere date Ausgabe unterbinden
Zitat:
Zitat von Leaderred
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.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 18:56:38 Uhr.
|