[Apache, phpmyadmin, html, PHP, ...] Datenbank mit webbasiertem Zugriff erstellen

  • Ersteller Ersteller boss3D
  • Erstellt am Erstellt am
entwickel solche schleifen am besten stück für stück mit "echo debugging". also
foreach... echo key...
foreach... if startswith... echo jop ^^
foreach... if startswith... prID = substr... echo prID...

dann kannst du schritt für schritt nachvollziehen, welche werte du da so behandelst, ob das überhaupt hinhaut usw. aber grundsätzlich sieht das sehr gut aus. aso, bei post[ts] <- das a weglassen ^^


edit: seh ich jetzt erst: das if isset post save... das weglassen. diesen button gibts nich, daher wird der code auch nie ausgeführt werden ^^ mit unserem durchlaufen des post arrays versuchen wir ja unseren save-button zu finden.

edit2: man könnte zur absoluten sicherheit diese if verschieben, ca so hier:
Code:
[COLOR=red][B]if (isset($_POST['save'])) {[/B]foreach($_POST as $key => $val) {
    if (startsWith($key, 'save')) {
        $prID = (int)substr($key, 4);
        [B][COLOR=seagreen]if (isset($_POST['save'.$prID])) {[/B]
            //update projekt where id = $prID;
            $update_projekte = mysqli_query($mysqli, "UPDATE projekte SET taetigkeit='".$_POST['taetigkeit']."', produkt='".$_POST['product']."', beschreibung='".$_POST['beschreibung']."' WHERE id='".$prID."'");
            //updated alle zeiten where prID = $prID;
            for ($b = 0; $b < 7; $b++) {
                $ts = $wochenanfang + ($b * 60 * 60 * 24);
                if (isset($_POST[$ts]) and $_POST[$ts] != "") {
                    $dauer = $_POST[$ts];                              
                    $update_zeiten = mysqli_query($mysqli, "UPDATE zeiten SET zeit='".$dauer."', datum='".$ts."' WHERE taetprodid='".$prID."'");
                }
            }
        [B][COLOR=seagreen]}[/B]
    }
}
[B][COLOR=red]}[/B]
also von rot nach grün. bei grün dann eben die ermittelte prjID anhängen.
 
Zuletzt bearbeitet:
Die .$a hatte ich bereits gelöscht, aber du hast wohl meine allererste, noch nicht editierte Version gesehen. Auch "zerlegt" hätte ich die Schleife schon gehabt, den Fehler aber trotzdem nicht gefunden.

Dein jetziger Code (ohne das rote) liefert:
Fatal error: Call to undefined function startsWith() in C:\xampp\htdocs\db\formular.php on line 154
Komisch, wo die Zeile doch zuvor ganz gleich ausgeschaut, aber keinen Fehler geliefert hat ...
 
ja wie gesagt, die funktion musst du selber bauen. dazu war der link gedacht -> anschauen + copy'n'paste ^^
 
:klatsch: Ist klar ...
-----------

Jedoch macht dieser Code jetzt nichts anderes, als mir editierte Einträge zu LÖSCHEN und am SO "0" einzutragen. :wow: Also das war nicht das Ziel ...
PHP:
function startsWith($haystack, $needle) {
        return $needle === "" || strpos($haystack, $needle) === 0;
    }
    
foreach($_POST as $key => $val) {
    if (startsWith($key, 'save')) {
        $prID = (int)substr($key, 4);
        if (isset($_POST['save'.$prID])) {
            $update_projekte = mysqli_query($mysqli, "UPDATE projekte SET taetigkeit='".$_POST['taetigkeit']."', produkt='".$_POST['product']."', beschreibung='".$_POST['beschreibung']."' WHERE id='".$prID."'");
            for ($b = 0; $b < 7; $b++) {
                $ts = $wochenanfang + ($b * 60 * 60 * 24);
                if (isset($_POST[$ts]) and $_POST[$ts] != "") {
                    $dauer = $_POST[$ts];                              
                    $update_zeiten = mysqli_query($mysqli, "UPDATE zeiten SET zeit='".$dauer."', datum='".$ts."' WHERE taetprodid='".$prID."'");
                }
            }
        }
    }
}
 
hmm, ich befürchte, ich weis wieso. du überschreibst einfach alles, egal was so drin steht. man müsste also irgendwie prüfen, obs ne eingabe gab. eine möglichkeit wäre, direkt im sql string... da fällt mir noch was uff:
"UPDATE zeiten SET zeit='".$dauer."', datum='".$ts."' WHERE taetprodid='".$prID."';"
du schaust nur nach der projekt-id, du willst aber nur ein bestimmtes datum ändern. also müsste das wohl eher so aussehen:
"UPDATE zeiten SET zeit='".$dauer."' WHERE taetprodid='".$prID."' AND datum='".$ts."';"
also du willst ja NUR die zeit ändern. eventuell wars das schon. test mal.



edit:
kleine randnotiz:
auf diese weise kannst du "0 einträge" erstellen. also du speicherst nen neuen eintrag mit paar zeiten. dann editierst du das wieder, und setzt die zeiten auf 0. ein eintrag mit zeit=0 ist aber an und für sich sinnfrei und könnte gelöscht werden.

jetzt ist die frage, wie du das handhaben wölltest. da es ja nur 7 einträge pro woche und projekt sind, könnte es sein, dass die zumüllung nich sooo schlimm ist. zudem ist fraglich, wie oft solch eine "pseudolöschung" vorkommt. ausserdem kanns wieder editiert werden und plötzlich erhält das datum zu dem projekt wieder nen wert. und in dem falle würde es die alte id weiternutzen und keine neue anlegen. für ordnung sorgen wöllt ich aber dennoch. kannst ja dem admin nen "db säubern" button zur hand geben, der dann solche 0-einträge rauskachelt.


btw, was mir gerade auffällt: deine sql strings sind user-übergreifend. du solltest also noch ein where user = userid anfügen. bei mir haben auch die projekte so eine id. kA ob du das auch so hast und für nötig erachtest.
 
Zuletzt bearbeitet:
Also bis auf die Zeit lässt sich alles ändern und auch richtig in die DB eintragen. Aber bei der Zeit hilft auch deine zweite Version nichts ... :(
 
ich teste grade selber nochmal. edits haste gelesen gehabt?

anmerkung: hab grad in formular.php enddeckt, dass du 2mal den logout button behandelst ^^ daher könnte auch der olle fehler mit der session id kommen :)



edit: gerade kam mir noch ein geistesblitz: wie eben beschrieben eigentlich (bzw hats damit zu tun). wir tun ja nur updaten. wenn es diesen zeit-eintrag aber noch garnich gibt, müssen wir ein insert machen. also müssen wir (zumindest bei den zeiten) erstmal checken, obs diesen eintrag überhaupt gibt. gibts ihn schon (where datum und prjid und userid stimmt) -> update, else insert.

weiterhin kann man testen (im insertfall), ob die zeit "" ist (oder 0) - dann kann man sich das insert sparen.
 
Zuletzt bearbeitet:
wegen dem excel zeugs... was hattest du denn für ne lösung gefunden? ich find nur irgendwelche packages - kann php da nix von haus aus? oder is das zuviel des guten? ^^ hab jetz jedenfalls das hier öfters gelesen: Spreadsheet_Excel_Writer

ganz unten steht da noch was wegen abhängigkeiten. php 4.1 is kein ding, dann wohl eine grundinstall von diesem pear zeugs (das teil ausm link ist wohl nur ne art addon) und irgendein ole oO deswegen mag ich den rotz immer nich :/ 1000 sachen die man sich aufs system müllt -.- vllt versteh ichs auch nur falsch. jedenfalls war hier mal nen erster einblick:
Manual :: Wie Excel-Dateien erzeugt werden.

das sieht ganz brauchbar aus und ließe sich locker mit unserem bisherigen code umsetzen *denk*
 
Dass wir überhaupt erst auf bestehende Einträge prüfen müssen, hatte ich kurz vor Arbeitsschluss gerade noch gesehen. Es war ja auch meine ursprüngliche Idee, irgendwie ein if bla INSERT else UPDATE zu basteln. Kommen wir also eh wieder dahin zurück ... ;)

Ich werd's aber wahrscheinlich zeitlich erst morgen in der Arbeit schaffen.

Zum Excel:
"Meine" Lösung habe ich im Web gefunden und sie hat derzeit noch 2 "Probleme". Das eine ist, dass es eigentlich ein "Trick" ist. Es wird nämlich in Wahrheit ein CSV exportiert und sofort in Excel geöffnet. Das stört allerdings nicht weiter, deswegen "Probleme" in Anführungszeichen.
Das andere ist, dass aus mir noch unerfindlichen Gründen der gesamte Inhalt der Website (also alles inkl. Buttons :what:) exportiert wird, und nicht bloß Dinge, die in der DB stehen. Ich zeige morgen einen Screenshot.

Hier der Code (soweit ich es geschafft habe, den nach mysqli abzuändern):
PHP:
<?php       
    $header = '';
    $result ='';
    $exportData = mysqli_query($mysqli, "SELECT * FROM projekte, zeiten") or die ("Sql error : ".mysqli_error());
     
    $fields = mysql_num_fields($exportData);
     
    for ($i = 0; $i < $fields; $i++) {
        $header .= mysql_field_name($exportData, $i)."\t";
    }
     
    while ($row = mysql_fetch_row($exportData)) {
        $line = '';
        foreach ($row as $value) {
            if ((!isset($value)) || ($value == "")) {
                $value = "\t";
            } else {
                $value = str_replace('"', '""', $value);
                $value = '"'.$value.'"'."\t";
            }
            $line .= $value;
        }
        $result .= trim($line)."\n";
    }
    $result = str_replace("\r", "", $result);
     
    if ($result == "") {
        $result = "\nNo Record(s) Found!\n";
    }
     
    header("Content-type: application/octet-stream");
    header("Content-Disposition: attachment; filename=".$user.".xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    print "$header\n$result";
Vermutlich liegt's an den headern unten, alles andere schaut m. E. "sauber" aus.
 
CSV schreiben ist immer ein einfacher Weg und kann von Excel gelesen werden.

Edit: Haste ja schon selber rausgefunden.

Zu deinem Problem mit der ganzen Seite: Wird wirklich nur der Code, den du gerade zitiert hast ausgeführt? Nichts vorher includet oder so?
 
Zu deinem Problem mit der ganzen Seite: Wird wirklich nur der Code, den du gerade zitiert hast ausgeführt? Nichts vorher includet oder so?
Bei meinen früheren "Chaos-Codes" hatte ich dieses Problem nicht, da wurde wirklich nur DB-Inhalt nach Excel exportiert.
Ich führe zwar auch jetzt noch nur diesen export.php-Code bewusst aus, es kann aber sein, dass DarkMo's index.php mir da jetzt "dazwischenfunkt". Ich kann leider erst morgen in der Arbeit wieder weitermachen. Heute habe ich nur noch Stress mit anderen Dingen ...

Hier noch der ganze Code, soweit ich heute noch mitgekommen bin (das aus DarkMo's letzten ein oder zwei Postings fehlt mir noch): Anhang anzeigen db.7z

BTW: Ich habe heute mit dem Admin der Firma geredet und der hat gemeint, dass die Integration meines Codes auf dem Server überhaupt kein Problem und höchstens eine Arbeit von 2 Stunden werden wird. Angeblich läuft auch auf diesem Server xampp, oder zumindest ist das Setup sehr ähnlich, soweit ich das mitgekriegt habe.
 
Hmmm ... also die ganze Seitenstruktur ist eher suboptimal. Ich finde zum Beispiel dieses riesige allumspannende Formular nicht so doll, wird bei späteren Erweiterungen zu Problemen führen. Aber so kurz vor Schluss noch strukturell was zu ändern wär auch quatsch.

Eine Möglichkeit wäre in index.php, die Dateien html_header.php und html_footer.php nur dann zu includen, wenn $_POST['export'] gesetzt ist. Das ist wahrscheinlich das einfachste und schnellste.

Eine alternative Möglichkeit wäre, anstatt des Export-Buttons einen Link zu setzen. Dann müsstest du noch den Code für die Datenbankverbindung aus config in die export-Datei kopieren oder includen.
 
Habe gerade was interessantes festgestellt: Wenn ich einen DB-Eintrag OHNE Beschreibung erstelle (ist ja legitim und kann auch vorkommen), den Eintrag dann aber editiere und eine Beschreibung hinzufüge, wird die über den UPDATE Befehl ganz normal eingetragen.

1) Wieso funktioniert also die exakt selbe Vorgehensweise über UPDATE bei Zeiten nicht? Da müsste ja dann auch einfach ein leeres Feld mit einer Zahl geupdatet werden?!
2) So gesehen ist dann eigentlich UPDATE "mächtiger" als INSERT, weil UPDATE Werte eintragen UND überschreiben kann, oder?
anmerkung: hab grad in formular.php enddeckt, dass du 2mal den logout button behandelst ^^ daher könnte auch der olle fehler mit der session id kommen :)
Falls du das mit session_destroy() und der angeblich uninitialized session gemeint hast, nein, das kommt auch jetzt noch, wo ich den Logout nur noch einmal behandle. Das liegt an was anderem.

[EDIT]
Gerade noch was gesehen: Wenn ich statt ...
PHP:
if (isset($_POST[$ts]) and $_POST[$ts] != "") {
... nur ...
PHP:
if (isset($_POST[$ts])) {
... sage, dann kann ich zumindest schon mal bestehende Zeit-Einträge ändern. Muss ich mir nur noch was wegen leerer Felder überlegen.

[EDIT2]
Noch was gesehen, das mir gerade komisch vorkommt: Versuchen wir hier nicht, zwei mal den Timestamp einzutragen? $ts und $dauer ist ja eigentlich das selbe?!
PHP:
$ts = $wochenanfang + ($b * 60 * 60 * 24);
if (isset($_POST[$ts]) and $_POST[$ts] != "") {
     $dauer = $_POST[$ts];                              
     $update_zeiten = mysqli_query($mysqli, "UPDATE zeiten SET zeit='".$dauer."' WHERE taetprodid='".$prID."' AND datum='".$ts."'");
}
 
Zuletzt bearbeitet:
Dauer und Datum dürften eigentlich nicht gleich sein. Das würdest du auch sofort in der DB sehen steht da die gleiche Zahl? Ansonsten ist es nur eine unglückliche Benennung der Variablen.

Denn das eine ist 3h am Produkt gearbeitet und das andere ist am 19.07.2014 am Produkt gearbeitet.
 
In der DB landet schon was unterschiedliches, ist dann wirklich nur eine etwas irritierende Variablenbezeichnung ...

Ich hab's jetzt so probiert, aber klappt immer noch nicht. $dauer ist ja sowieso gesetzt, wenn $_POST[$ts] gesetzt ist, oder? Somit ist meine Überprüfung sinnlos?! Irgendwie blicke ich gerade nicht durch, wie ich überprüfen soll, ob ein Stundenfeld belegt ist oder nicht ...
PHP:
foreach($_POST as $key => $val) {
    if (startsWith($key, 'save')) {
        $prID = (int)substr($key, 4);
        if (isset($_POST['save'.$prID])) {
            $update_projekte = mysqli_query($mysqli, "UPDATE projekte SET taetigkeit='".$_POST['taetigkeit']."', produkt='".$_POST['product']."', beschreibung='".$_POST['beschreibung']."' WHERE id='".$prID."'");
            for ($b = 0; $b < 7; $b++) {
                $ts = $wochenanfang + ($b * 60 * 60 * 24);
                if (isset($_POST[$ts]) and $_POST[$ts] != "") {
                    $dauer = $_POST[$ts];
                    if (isset($dauer)) {
                        $update_zeiten = mysqli_query($mysqli, "UPDATE zeiten SET zeit='".$dauer."' WHERE taetprodid='".$prID."' AND datum='".$ts."'");
                    } else {
                        $update_zeiten = mysqli_query($mysqli, "INSERT INTO zeiten (zeit, datum) VALUES ('$dauer', '$ts') WHERE taetprodid='".$prID."'");
                    }
                }
            }
        }
    }
}
 
Zuletzt bearbeitet:
wegen update: du begehst gerade einen denkfehler ^^ ein projekt ist EIN datensatz. sprich alle spalten sind schon in der db - nur eben ggf "leer". änderst du die beschreibung, wird im bestehenden projekt-eintrag nur die beschreibungsspalte geändert. die html-tabellen-repräsentation stimmt also mit der db tabelle bis beschreibung überein, wenn man so will. die zeiten sind aber alle wiederrum einzel-datensätze, die über die prID diesem projekt zugeordnet werden. sprich jede spalte der html-tabelle entspricht einem kompletten datensatz (einer zeile) der db-tabelle zeiten.

in kurz: beschreibung existiert schon in der projekt-zeile und kann somit geupdated werden. die einzelzeiten hingegen müssen nicht zwingend schon existieren, da nur daten mit nem validen zeit-wert gespeichert werden. html-tabellenfelder die leer sind (bei der ursprünglichen speicherung) sind nicht in zeiten angelegt worden (hier eben der unterschied zu den projekt-daten. obwohl das beschreibungsfeld leer ist, ist es dennoch schon durchs projekt in der db angelegt worden.

hoffe, ich konnte es einigermaßen verständlich erklären ^^ nochmal nen bildlicher versuch:
Code:
+-----------+---------+--------------+----+----+----+----+----+----+----+
| [B]tätigkeit[/B] | [B]produkt[/B] | [B]beschreibung[/B] | [B]mo[/B] | [B]di[/B] | [B]mi[/B] | [B]do[/B] | [B]fr[/B] | [B]sa[/B] | [B]so[/B] |
+-----------+---------+--------------+----+----+----+----+----+----+----+
|  [COLOR="red"]kochen   |  [COLOR="red"]kaffe  |              |  [COLOR="seagreen"]3 |    |  [COLOR="blue"]1 |    |    |    |  [COLOR="purple"]5 |
+-----------+---------+--------------+----+----+----+----+----+----+----+
 \__________________________________/   |    |    |    |    |    |    |
                  |                     |    |    |    |    |    |    |
              prID: [COLOR="red"]28           zID's: [COLOR="seagreen"]1         [COLOR="blue"]2                   [COLOR="purple"]3


dabei fällt mir noch die ein oder andere grundsatz sache ein. erstmal: beim editieren sollte man das projekt selber nicht ändern können *mein* also die tätigkeit/produkt-kombination. läuft im endeffekt darauf hinaus, dass die ersten beiden spalten NICHT editierbar werden (und somit die selects und nen stückl arbeit rausfliegen). kommt irgendwie doof, wenn man an projekt a gearbeitet hat und dann plötzlich alle zeiten nem ganz anderen projekt quasi zuschiebt ^^ also die db-id's bleiben ja die selben, aber eben die bedeutung/semantik bla ändert sich. hoffe, du weißt, was ich mein.
das nächste wäre die projekt-user-id. macht die sinn? ich dachte ursprünglich irgendwie schon, so dass man gezielt die projekte der mitarbeiter unterscheiden kann. aber im endeffekt kann man das ja über ihre zeiten tun. und ich denke nicht, dass die leute nicht auch zusammen ein projekt bearbeiten können oder? daher denke ich, wäre es recht sinnvoll, wenn man die user-id aus der projekte tabelle verbannt. aber das musst dann du entscheiden ^^ du weißt eher, wie es abläuft :P

in dem zusammenhang hab ich scho wieder ideen... xD aber erstmal weiter im text:
das mit destroy is natürlich schade - hatte mich schon gefreut :P
wegen den leeren feldern - stimmt natürlich. bei den zeiten dürfen auch leere felder angegeben werden. ich gehe jetzt mal von der "ordentlichen" variante aus, das "leer-updates" (also eine zeit, die genullt wird) aus der db gelöscht werden. dann sollte das in etwa so aussehen *denk*
Code:
- wir haben unseren button mit der prID gefunden...
- einfach stumpf immer projekte updaten (- aber NUR die beschreibung -> wenn meine anmerkung oben auf anklang stößt ^^).
- für jeden wochen-tag:
  - ts berechnen
  - if isset ts kann man mMn sogar ganz weglassen - das is sicher gesetzt, beim save button. zur sicherheit kann die abfrage aber auch bleiben wenn du magst. nur eben das !="" weglassen
  - genau, dauer speichern
  - aha, hier kommts zum fehler ^^:
  - wenn dauer == "" -> delete from zeiten where user = userid and datum = ts (das wäre diese "sauber"-aktion)
  - sonst...
    - prüfen, ob es in zeiten einen eintrag mit diesem datum gibt, von unserem user zu dem projekt (select * from zeiten where user = userid and datum = ts and prID = prID)
    - wenn ja, update die zeit
    - sonst insert den datensatz
ohne die delete-prüfung würden vorhandene einträge einfach als genullt in der db bleiben und sie ggf irgendwann "zumüllen". dann sollte man aber wenigstens vorm insert prüfen, ob es kein "0 eintrag" ist. ich würde dann (ohne delete zeile) aber wie gesagt dem admin dann nen button zum händischen löschen dieser 0 einträge geben. also nich zum händisch löschen, sondern eben zum händischen anstoßen des löschens ^^

gut, wegen ts und datum, da hatte tessa ja schon gesagt, um was es sich handelt. es ist in der tat ne blöde variablen-namen vergabe ^^ datum sollte hier eher zeit heißen. weil das ist der wert, also die stunden, die der MA eingetragen hat ins feld. ts ist der timestamp zum tag, zu welchem diese stundenangabe gehört.
 
jain - beim editieren haben wir nur eine zeile, da ist dann kein anhängsel mehr ^^ eingabezeilen -> mehrfach. edit -> immer nur eine.
 
@ DarkMo
Ein bisschen bin ich, glaube ich, mitgekommen, was du meinst ...

Jedenfalls will ich schon die ganze Zeile editierbar lassen, also auch Tätigkeit und Produkt.

Was ich nicht verstanden habe:
1) Was genau sollte nach deiner Idee deletet werden? Erwartest du, dass die MAs in ALLE Felder Zahlen eingeben, aber in nicht-benötigte eben 0er? Und diese 0er willst du dann löschen? Also wenn das die Idee ist, das klappt niemals. Die MAs werden mit Sicherheit auf der Website nicht mehr machen, als bisher in den Excel-Tabellen nötig war.
2) Was genau ist jetzt der Fehler bei mir?

So hätte ich es derzeit:
PHP:
foreach($_POST as $key => $val) {
    if (startsWith($key, 'save')) {
        $prID = (int)substr($key, 4);
        if (isset($_POST['save'.$prID])) {
            $update_projekte = mysqli_query($mysqli, "UPDATE projekte SET taetigkeit='".$_POST['taetigkeit']."', produkt='".$_POST['product']."', beschreibung='".$_POST['beschreibung']."' WHERE id='".$prID."'");
            for ($b = 0; $b < 7; $b++) {
                $ts = $wochenanfang + ($b * 60 * 60 * 24);
                $dauer = $_POST[$ts];
                if (isset($dauer)) {
                    $update_zeiten = mysqli_query($mysqli, "UPDATE zeiten SET zeit='".$dauer."' WHERE taetprodid='".$prID."' AND datum='".$ts."'");
                } else {
                    $update_zeiten = mysqli_query($mysqli, "INSERT INTO zeiten (zeit) VALUES ('$dauer') WHERE taetprodid='".$prID."' AND datum='".$ts."'");
                }
            }
        }
    }
}
^^ Das "if (isset($dauer)) {" ist sicher Blödsinn, aber da ist mir noch keine andere Bedingung eingefallen.
 
ok, beispiel szenario:
der MA gibt eine neue zeile ein. er wählt eine tätigkeit und ein produkt, bastelt ne beschreibung und trägt bei mo und mi werte ein.
-> das projekt wird angelegt (sofern noch nicht vorhanden (kann ja in vorhergehenden wochen schon bearbeitet worden sein) -> also tät-id, prod-id, beschr)
-> in zeiten wird für die daten (datums :ugly: ) "mo" und "mi" die zeit gespeichert, alle anderen felder sind leer gelassen worden und werden somit NICHT gespeichert

nun editiert der MA das später nochmal. er hat am sa nochmal dran gewerkelt und trägt das nun ein. dabei ist ihm ein fehler in der beschreibung aufgefallen, den er ausbessert und er hatte am di und nicht am mi gearbeitet - leert also das mi feld und trägt den wert im di feld ein.
-> beim projekt wird die beschreibung aktualisiert
-> bei den zeiten wird für den samstag die neue zeit eingetragen (insert) und ebenso wird für den dienstag verfahren. die beiden waren noch garnich in der db. die anderen tage sind wiederrum nur leere inputs
-> allerdings wird ja beim editieren auch bei leeren feldern erstmal geschaut, ob es dazu schon nen db eintrag gibt. dabei wird festgestellt, dass der mi nen wert hat. da die neueingabe aber eben ein leeres feld ist, wird der mi aus der db gekachelt.


man muss also nirgends explizit ne 0 reinschreiben oder so. mit "0 einträgen" meine ich eben schlicht diese leeren einträge. ein NULL wert bla ^^ caste "" mal nach int oder float oder so -> 0 :P


dein fehler ist schlicht und ergreifend, dass du nicht die db fragst, um entscheiden zu können, ob du nun updaten oder einfügen musst ;) die frage isset(datum) ist käse. klar ist datum gesetzt, haste ja die zeile davor erledigt ^^ aber allein mit den "anwendungs" daten wirst du frage nach update oder insert eben nicht gelöst bekommen. dazu musst du wissen, ob ein eintrag schon vorhanden ist oder nicht - und das weiß eben die db -> frag sie.
 
Zurück