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

  • Ersteller Ersteller boss3D
  • Erstellt am Erstellt am
Bei meinen ganzen Files hättest du mit localhost/eintragen.html beginnen müssen, dann hätten sich die Seiten der Reihe nach aufgerufen bzw. dich weitergeleitet ...
----------

[EDIT]
Mein manuell eingegebenes Datum landet noch nicht in der DB, vermutlich weil irgendwelche Formate nicht zusammenpassen?! In der DB habe ich DATE ausgewählt und eingegeben wird's auf der html Seite in eine textbox, also vermutlich als String?! Kann das gehen?
 
Zuletzt bearbeitet:
ok, frage: WAS soll bei dir date sein? so wie du es angelegt hast, soll es einfach die zeit sein, zu der der eintrag erstellt wurde oder? und wenn dem so ist, dann gibt man da rein garnix auf der seite an ^^ dann speicherst du einfach nur den jetzigen timestamp. also quasi so:
Code:
INSERT INTO <tabelle>
    (..., Datum)
VALUES
    (...,
    NOW());
da wird nix übergebenes reingespeichert. rufst dabei einfach die sql-interne funktion now auf, und der macht das dann schon.
 
Willst du nicht das aktuelle Datum sondern ein anderes, baust du dir einfach mit mktime() einen Timestamp zusammen und speicherst diesen in einer INT in die Datenbank, den Timestamp kannst du dann bei der Ausgabe mit date() in jedes beliebige Format bringen.
 
Du meinst "datum"?

In der DB-Tabelle "zeiten" habe ich u. a. "datum" und "erstellt".

Unbenannt.PNG

^^ "datum" ist das, was der User neben den Tageskürzeln eingeben kann. "erstellt" ist das Datum, an dem der MA das Formular ausgefüllt hat.

Und bei mir will er ums Verrecken nicht das Datum in die DB schreiben. Ich habe schon probiert: VARCHAR, DATE, DATETIME, TEXT
Im Code sehe ich keinen Fehler ...
PHP:
<?php    
    $verbindung = mysql_connect("localhost", "root" , "root") or die ("Verbindung zur Datenbank konnte nicht hergestellt werden");
    mysql_select_db("projektzeiterfassung") or die ("Datenbank konnte nicht ausgewählt werden.");
    
    $user = mysql_query("SELECT * FROM zeiten, user WHERE zeiten.user = user.id;");    
    $taetigkeit = $_POST["taetigkeit"];
    $produkt = $_POST["product"]; 
    $beschreibung = $_POST["beschreibung"];    
    
    $stunden = array();
    $stunden[] = "montag";
    $stunden[] = "dienstag";
    $stunden[] = "mittwoch";
    $stunden[] = "donnerstag";
    $stunden[] = "freitag";
    $stunden[] = "samstag";
    $stunden[] = "sonntag";
    
    $datum = array();
    $datum[] = "mo";
    $datum[] = "di";
    $datum[] = "mi";
    $datum[] = "do";
    $datum[] = "fr";
    $datum[] = "sa";
    $datum[] = "so";
    
    $erstellt = date('d-m-Y');

    $result = mysql_query("SELECT id FROM user WHERE name LIKE '$user'");
    $menge = mysql_num_rows($result);
    
    if ($menge == 0) {
        $eintrag = "INSERT INTO zeiten (taetigkeit, produkt, user, beschreibung, erstellt) VALUES ('$taetigkeit', '$produkt', '$user', '$beschreibung', '$erstellt')";
        $eintragen1 = mysql_query($eintrag);
    }
    for ($a = 0; $a < 7; $a++) {
        if (isset($_POST[$stunden[$a]]) and $_POST[$stunden[$a]] != "") {
            $dauer = $_POST[$stunden[$a]];
            $eintrag = "INSERT INTO zeiten (zeit) VALUES ($dauer)";
            $eintragen = mysql_query($eintrag);
        }
        if (isset($_POST[$datum[$a]]) and $_POST[$datum[$a]] != "") {
            $tag = $_POST[$datum[$a]];
            $eintrag = "INSERT INTO zeiten (datum) VALUES ($tag)";
            $eintragen = mysql_query($eintrag);
        }
    }
        
    if ($eintragen == true) {
        echo "Daten wurden in Datenbank geschrieben";
    } else {
        echo "Fehler beim Speichern der Daten. <a href=\"projektzeiterfassung1.html\">Zurück</a>";
    }
?>
@ Tessa
Am einfachsten wär's wohl, das Datum einfach als String auszulesen und auch so abzuspeichern. Aber das funktioniert nicht so, wie ich mir das vorgestellt hätte, falls es überhaupt geht?!
 
aahso. gut, dann meine ich mit now() bla die erstellt spalte. datum würde ich dann mit dem erwähnten mktime lösen.

generell würde ichs dann in etwa so aufbauen: beim tabellen aufbau ermittelst du den aktuellen tag und berechnest davon ausgehend, welche woche angezeigt werden muss und zusätzlich noch min und max timestamp der woche (also timestamp von mo um 0uhr bis timestamp von so um 24uhr. diese timestamps nutzt du zum auslesen der db einträge. also als filter variablen (where datum >= min and datum < max...). dann kannste das noch sortieren nach tätigkeit und produkt und so versuchen alle einzeleinträge (pro tätigkeit/produk-kombo können ja 7 einträge existieren - 7 zeiten) in einer zeile zusammen zu fassen. irgendwie so.
 
Ne, automatisieren will ich das lieber nicht (aktuelle Woche anhand des aktuellen Datums ermitteln). Das gäbe dann Schwierigkeiten, wenn ein MA nachträglich Daten von letzter Woche oder noch früher eingeben will. Ich glaube nicht, dass ich davon ausgehen kann, dass die MAs immer brav ihre Daten am Ende des Tages oder der Woche eingeben ...

Außerdem habe ich ehrlich gesagt wenig Lust, mir für mktime wieder was kompliziertes zu basteln, das mir den eingegebenen String (?) "23.06.2014" (als Beispiel) in 23, 6 und 2014 zerlegt. :ugly:
Es müsste ja doch möglich sein, das einfach gleich als String zu speichern?!
 
ja gut, dachte das wäre selbsterklärend, dass man dann durch die wochen switchen kann ^^ aber so eine liste ist mMn eben besser/übersichtlicher.
 
Du kannst einen Timestamp in ein Datum Formatieren und umgekehrt. Dafür gibt es in PHP fertige funktionen. Wenn du den String z.B. als 23.06.2014 in die variable $data speicherst kannst du ihn mit:

PHP:
$datum = explode(".", $data)

in die Bestandteile 23, 4 und 2014 zerlegen. Der . wird dann als Trennzeichen genutzt.
 
^^ Soweit der Code, aber durch die explode()-Zuweisung wird $datum offenbar zu einem array umgewandelt, das ich dann aber als String einzutragen versuche?! Blaue Zeile:
Code:
    $data = array();
    $data[] = "mo";
    $data[] = "di";
    $data[] = "mi";
    $data[] = "do";
    $data[] = "fr";
    $data[] = "sa";
    $data[] = "so";

    for ($a = 0; $a < 7; $a++) {
        if (isset($_POST[$data[$a]]) and $_POST[$data[$a]] != "") {
            $tag = $_POST[$data[$a]];
            $datum = explode(".", $tag);
            [COLOR=royalblue]$eintrag = "INSERT INTO zeiten (datum) VALUES ($datum)";            $eintragen = mysql_query($eintrag);
        }
    }
Wie sollte ich das am besten lösen? Mit VALUES ('$datum[$a]') kriege ich zwar den error weg, aber es wird wieder kein Datum in die DB geschrieben ...

[EDIT]
So könnte man den error (eigentlich Notice) auch wegbringen, aber in die DB wird dennoch nichts eingetragen, also muss der Fehler noch wo anders liegen?
PHP:
$datum = implode(explode(".", $tag));
In der Tabelle "datum" habe ich jedenfalls DATE als Typ eingestellt. Sollte ich da was anderes wählen?

[EDIT2]
Okay, mit VARCHAR kriege ich meinen Eintrag, aber ohne Punkte. *seufz*
 
Zuletzt bearbeitet:
Wieso packst du denn das explode() jetzt da in den Code o.0

Explode dient dazu einen String also z.B. "24.6.2014 "Anhand des Trennzeichens "." in die Bestandteile 24 und 6 und 2014 zu zerlegen.
Das Ergebnis ist ein Array mit den Indizis 0-2 und den jeweiligen werten. Das macht in dem Code oben vollkommen keinen Sinn, da du ja alles in eine Tabellenzelle schreiben möchtest.

Soweit ich das jetzt verstanden habe möchtest du das Datum im Format "tt.mm.jjjj" in die Datenbank eintragen richtig?

Wenn ja dann formatier bitte die Spalte "datum" in der Datenbank mal als "var char".

Des Weiteren gib doch bitte den Inhalt von einer der $_POST['mo - so'] variablen per echo aus damit ich sehen kann wie der Inhalt dieser formatiert ist und ob hier ggf. noch eine Umformung erfolgen muss.

[EDIT]
So könnte man den error (eigentlich Notice) auch wegbringen, aber in die DB wird dennoch nichts eingetragen, also muss der Fehler noch wo anders liegen?

PHP-Code:
$datum = implode(explode(".", $tag));

In der Tabelle "datum" habe ich jedenfalls DATE als Typ eingestellt. Sollte ich da was anderes wählen?

Implode verbindet die Einträge eines Arrays zu einem String, Explode teilt einen String anhand eines festgelegten Zeichens in ein Array.
Die Schreibweise
PHP:
implode(exlode("Trennzeichen",$variable));
Neutralisiert sich also gegenseitig.


[Edit 2:]
Wenn ich jetzt raten soll und implodeexplode() bei dir zum Ergebnis 24062014 führt, dann muss in der POST bereits 24.06.2014 stehen, da Explode sonst nicht funktionieren würde.


Lösch also einfach die Zeile explode und das ganze sollte laufen.
 
Zuletzt bearbeitet:
Da kommt ja so oder so nur Käse raus:
PHP:
    $data = array();
    $data[] = "mo";
    $data[] = "di";
    $data[] = "mi";
    $data[] = "do";
    $data[] = "fr";
    $data[] = "sa";
    $data[] = "so";
    
    $datum = array();
    for ($a = 0; $a <= 2; $a++) {
        $datum[$a] = explode(".", $data);
    }
[EDIT]
PHP:
echo "{$_POST['mo - so']}";
liefter
Notice: Undefined index: mo - so
 
Zuletzt bearbeitet:
PHP:
    $data = array();
    $data[] = "mo";
    $data[] = "di";
    $data[] = "mi";
    $data[] = "do";
    $data[] = "fr";
    $data[] = "sa";
    $data[] = "so";

    for ($a = 0; $a < 7; $a++) {
        if (isset($_POST[$data[$a]]) and $_POST[$data[$a]] != "") {
            $tag = $_POST[$data[$a]];
            $eintrag = "INSERT INTO zeiten (datum) VALUES ('$tag')";
            $eintragen = mysql_query($eintrag);
        }
    }

Natürlich meinte ich das

PHP:
echo $_POST['mo'];
oder
PHP:
echo $_POST['di'];
oder
PHP:
echo $_POST['so'];
und wenn du das Ausgibst trage bitte auch etwas in die Spalte die du per echo Ausgibst ein damit ein Inhalt vorliegt x-D
 
Zuletzt bearbeitet:
Kommt das raus:
Stimmt also. Das eigentliche Problem ist ja, das nun auch in dieser Form in die DB zu kriegen ...
[EDIT]
PHP:
echo $tag;
zeigt auch genau das an. Ich vermute, dass der Fehler nicht im Code, sondern beim Typ in der Tabelle liegt?! VARCHAR bringt jetzt natürlich nichts, DATE geht aber auch nicht. ???

Übrigens würde sich DATE das Datum in umgekehrter Schreibweise erwarten.
 
Siehe code von mir im letzten Post Copy&Paste

[EDIT]

Wobei ich nicht denke, das du die Zeit wirklich als neue Zeile haben willst oder?

[Edit 2]

Da stand noch einmal $tag und einmal $Datum, muss natürlich zweimal $tag oder zweimal $datum heißen

und VARCHAR ist schon OK und wird funktionieren.
 
Zuletzt bearbeitet:
Damit kriege ich ein Datum in die DB rein, aber wieder ein falsches. Ich habe im Formular 12.04.2003 für MO eingegeben, in der DB steht jetzt aber 20.04.2014 ???

Dass alles in der selben Zeile landet, darum kümmere ich mich nachher dann noch mit UPDATE WHERE, wie von dir gestern vorgeschlagen.
 
Okay, als nächstes möchte ich jetzt alles in der selben Zeile haben, aber da habe ich bei UPDATE WHERE das Problem, dass ich in der Zeile keinen einzigen festen Wert habe außer der internen id, die der MA aber nie sieht. Was soll ich jetzt also für WHERE nehmen?
PHP:
    for ($a = 0; $a < 7; $a++) {
        if (isset($_POST[$stunden[$a]]) and $_POST[$stunden[$a]] != "") {
            $dauer = $_POST[$stunden[$a]];
            $eintrag = "UPDATE zeiten SET zeit=$dauer WHERE ???";
            $eintragen = mysql_query($eintrag);
        }
}
Unbenannt.PNG
[EDIT]
PHP:
$eintrag = "UPDATE zeiten SET zeit=$dauer WHERE id=302";
Über die id würd's schon gehen, aber die verändert sich ja ständig. Ich bräuchte also beim WHERE was dynamisches, nachdem ich ja keinen Fixwert in den Zeilen habe?!
 
Zuletzt bearbeitet:
Warum bereitest du die Daten nicht entsprechend dieses Codes:

PHP:
    for ($a = 0; $a < 7; $a++) { 
        if (isset($_POST[$data[$a]]) and $_POST[$data[$a]] != "") { 
            $tag = $_POST[$data[$a]]; 
        } 
    }
zum Eintragen in die Datenbank vor? Das ganze natürlich bevor du überhaupt einen Datenbankeintrag erstellst.
Dann speicherst du Sie jeweils in einer Variable im Bsp. $tag und kannst mit einem einzigen INSERT Befehl alle Daten auf einmal in die Datenbank eintragen.

[EDIT]
Grade für das WHERE ist ja id häufig gedacht. id=$id ;) geht übrigens auch Variablen heißt das Zauberwort ;).
 
Zuletzt bearbeitet:
Ja, das ist schlau! Funktioniert auch, bis auf ein Problem: Das "erstellt" Datum geht mir dabei, warum auch immer, verloren (auch wenn ich's ins if in der Schleife reinschreibe).
PHP:
$erstellt = date('d-m-Y');

for ($a = 0; $a < 7; $a++) {
        if (isset($_POST[$stunden[$a]]) and $_POST[$stunden[$a]] != "" and isset($_POST[$data[$a]]) and $_POST[$data[$a]] != "") {        
            $dauer = $_POST[$stunden[$a]];
            $tag = $_POST[$data[$a]];
            $eintrag = "INSERT INTO zeiten (taetigkeit, produkt, user, beschreibung, zeit, datum, erstellt) VALUES ('$taetigkeit', '$produkt', '$user', '$beschreibung', '$dauer', '$tag', '$erstellt')";
            $eintragen = mysql_query($eintrag);
        }        
    }
Unbenannt.PNG

BTW: Kann man in php "and" und "&&" schreiben? Ihr nehmt immer "and", aber bei mir hat "&&" auch schon funktioniert.
 
Zuletzt bearbeitet:
PHP:
for ($a = 0; $a < 7; $a++) {
        if (isset($_POST[$stunden[$a]]) and $_POST[$stunden[$a]] != "" and isset($_POST[$data[$a]]) and $_POST[$data[$a]] != "") {        
            $dauer = $_POST[$stunden[$a]];
            $tag = $_POST[$data[$a]];
            $erstellt = date('d-m-Y');
            $eintrag = "INSERT INTO zeiten (taetigkeit, produkt, user, beschreibung, zeit, datum, erstellt) VALUES   ('$taetigkeit', '$produkt', '$user', '$beschreibung', '$dauer', '$tag', '$erstellt')";
$eintragen = mysql_query($eintrag);
        }        
    }

[EDIT]
Ja && ist eine alternative Schreibweise des logischen Operators AND in PHP
zusätzlich geht noch || das ist die Alternative Schreibweise zu OR
 
Zurück