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

^^ Hey, vielen Dank! Genau sowas in die Richtung brauche ich ... :)

Übrigens habe ich in den letzten 3 h (ja, sitze schon seit 06:00 hier, damit ich um 15:00 rauskomme und zum Badesee fahren kann :D) schon den gesamten Login inkl. Übermitteln der Daten aus der Registrierung an die DB hinbekommen. *freu*
Dropdowns habe ich jetzt zwar erstmal durch Checkboxen ersetzt, aber vielleicht ist deine Idee trotzdem umsetzbar. Ich überlege da noch, aber es ist ja auch noch Zeit.

[EDIT]
Was auch noch bedacht werden sollte: Im Normallfall machen die MAs zwar nur eine Tätigkeit am Tag, aber es sollte dennoch möglich sein, dass einer z. B. am Ende der Woche alles auf einmal einträgt, und da kann's schon sein, dass er bspw. am MO Tätigkeit 1 an Produkt a und b, und am MI Tätigkeit 4 an Produkt f durchgeführt hat.
Es sollte für den MA in so einem Fall nicht nötig sein, sich "100 Mal" durchs Formular zu klicken. Irgendwie sollte noch etwas Effizienz in deinen Vorschlag rein, aber vielleicht kommen wir noch auf was.
 
PHP ist dynamisch. Wenn du jetzt z.B. in Schritt 1 Checkboxen verwendest ist das Stichwort Multiauswahl. Dann könntest du also wenn er in Schritt eins zwei Tätigkeiten wählt in Schritt 2 zwei leisten mit Checkboxen erstellen lassen. Wenn er dann pro Tätigkeit z.B. 3 Verschiedene Produkte wählt lässt du für Schritt 3 eben 6 Leisten erstellen also jeweils für Tätigkeit 1 Produkte a - c. Und für Tätigkeit 2 Produkte a-c jeweils eigene Leisten.

Du musst halt nur das html durch ein PHP Script erstellen lassen.
 
Schau dir einfach mal Javascript an. In Verbindung mit jQuery & Co lässt sich dein Problem relativ einfach und vor allem auch benutzerfreundlich lösen. Du kannst aber natürlich auch weiterhin auf deine PHP-only Frickellösung beharren.
 
^^ Das wird schon mit html und PHP und ich lerne jeden Tag, den ich am Projekt arbeite, was Neues dazu. :)

Ich habe jetzt hier mal die erste html Seite (Tätigkeitsnamen abgekürzt):
Code:
<!doctype html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Zeiterfassung1</title>
</head> 
<body>
<form action="formular.php" method="get">
    <h1>Zeiterfassung</h1>
    <p>Bitte wählen Sie Ihre Tätigkeit:</p>
        <input type="checkbox" name="taetigkeit[]" value="A" id="check1"><label for="check1">A</label><br>
        <input type="checkbox" name="taetigkeit[]" value="A-B" id="check2"><label for="check2">A-B</label><br>
        <input type="checkbox" name="taetigkeit[]" value="E" id="check3"><label for="check3">E</label><br>
        <input type="checkbox" name="taetigkeit[]" value="O" id="check4"><label for="check4">O</label><br>
        <input type="checkbox" name="taetigkeit[]" value="P" id="check5"><label for="check5">P</label><br>
        <input type="checkbox" name="taetigkeit[]" value="P/A" id="check6"><label for="check6">P/A</label><br>
        <input type="checkbox" name="taetigkeit[]" value="S" id="check7"><label for="check7">S</label><br>
        <input type="checkbox" name="taetigkeit[]" value="Se" id="check8"><label for="check8">Se</label><br>
        <input type="checkbox" name="taetigkeit[]" value="Ser" id="check9"><label for="check9">Ser</label><br>
        <input type="checkbox" name="taetigkeit[]" value="So" id="check10"><label for="check10">So</label><br>
        <input type="checkbox" name="taetigkeit[]" value="V" id="check11"><label for="check11">V</label><br>
    <p>Bitte fügen Sie eine Beschreibung Ihrer Tätigkeit hinzu:</p>
        <textarea name="text" id="text" rows="4" cols="25"></textarea><br><br>                    
    <input type="submit" value="Weiter zu Produkt" />
</form>
</body>
</html>
Ich habe ganz genau verstanden, wie die zweite Seite gemäß TessaKavanagh's Idee ausschauen soll, aber ich weiß nicht so wirklich, wie ich das jetzt "dynamisch" mit PHP machen soll ... :huh:

Über folgendes php-Script müsste ich die (leere) zweite html-Seite kriegen?! Nur, was jetzt? Ich muss das wahrscheinlich irgendwie aufrufen, sobald der submit-Button auf der ersten html-Seite gedrückt wird?!
Code:
<?php
    $title = 'Zeiterfassung2';
    $datei = "$title".".html";
?>
Und wie genau erstelle ich dann via php die Checkboxen in der zweiten html-Seite? Ich kann ja jetzt nicht einfach html-Code in dieses php-Script reinschreiben, oder?

[EDIT]
Ich könnte auch das php-Script, das bereits beim Anklicken des submit-Buttons ausgeführt wird, um die 4 Zeilen am Ende erweitern:
Code:
<?php    
    $taetigkeit = $_GET['taetigkeit'];
    $taetigkeit_text = implode("<br>",$taetigkeit);
    echo '<p>Ihre ausgewählten Tätigkeiten:<br><br>'.$taetigkeit_text.'</p>';
    
    $beschreibung = $_GET['text'];
    echo '<p>Ihre Beschreibung:<br><br>'.$beschreibung.'</p>';
    
    $fh = fopen("zeiterfassung2.html", "w+");
    if ($fh) {
        fwrite($fh, "<html>[..... hier der HTML Code .....]</html>");
    }
    
    fclose($fh);
?>
^^ Aber ob das "sauber" wird, da dann den ganzen html-Code auch gleich mitreinzuknallen?
 
Zuletzt bearbeitet:
1. Wenn etwas dynamisch werden soll brauchst du einen Speicherort an dem du benötigte Daten ablegen kannst (Datenbank oder File). In deinem Fall bietet sich die ohnehin verwendete MySQL Datenbank an.

Hier erstellst du jetzt z.B. eine Tabelle die heißt "Produkte" mit den Spalten (id, Produktname) Da schreibst du alle verfügbaren Produkte rein.

Dann erstellst du eine php Datei als Grundlage. PHP ist eine serverseitige Sprache der Quellcode wird somit nie an den Nutzer weitergegeben sondern nur das Interpretierte Ergebnis.
Du kannst jetzt also über echo "****"; Beliebigen HTML Code erzeugen
Das php Dokument <?php echo "<html><head></head><Body>Hallo Welt</Body></html>"; ?>
würde in der Ausgabe also genauso wie das html Dokument mit Inhalt <html><head></head><Body>Hallo Welt</Body></html>" aussehen. Der Nutzer kann es nur durch die andere Dateiendung unterscheiden.

Nun zum eigentlichen Problem:

Du hast jetzt z.B. 2 Produkte per POST übertragen. Ins POST Formular im ersten Dokument muss jetzt natürlich die PHP Datei als Target.

Im neuen Dokument Fragst du dann z.B. mit einer for Schleife die POST Daten ab.

also in deinem Fall:

$checkbox_arr = array();
for($a= 1 ; $a <= 11 ; $a++)
{

$abfrage = 'check';
$abfrage .= $a;
if(isset($_POST['$abfrage']))
{$Checkbox_arr[] = $_POST['$abfrage'];}

}

am ende hast du dann ein Array mit z.B. 2 Einträgen für die jeweiligen Tätigkeiten.
Auf dieser Basis kannst du dann mit:

$count_arr = Count($Checkbox_arr);
for($b = 1; $b <= $count_arr; $b++)
{

Hier kannst du jetzt jeweis Checkbox einträge mit Dynamischem Inhalt erstellen lassen.

}

Das ist kein funktionierender Code. Es handelt sich lediglich um einen Lösungsansatz. Wenn du einfach mal drüber sprechen möchtest kannst du mir gerne ne PN schicken und man könnte mal Nachmittags per TS reden. Wie dir aber viele hier schon geschrieben haben ist das sicher keine "optimale" Lösung im Hinblick auf Leistungsfähigen Code.

Im Prinzip ist der Fehler in deinem Lösungsansatz das du versuchst php in html einzubinden wenn man mit php Arbeitet bietet es sich an das ganze genau andersherum zu gestalten. Oder du Arbeitest mit einer entsprechenden Template Engine (was ich bevorzuge). Dann kannst du bei einem Objektorientierten Ansatz den Code vollständig vom Layout trennen.
 
bin jetz grad ebbes durchn wind, aber hier nochmal mein erklärungsversuch:

du hast eine formular.php meinetwegen mit eben einem formular:
Code:
<?php
  // html head gerödel...
  <form... action="formular.php" method="post">
    <input dropdown... name="drop1">
      <option bla value="1" select="selected">
      <option blubb value="2">...
    <input submit... name="send">
  </form>
  // footer gerödel...
?>
jetz mal skizzenhaft.

drückst du den button, ruft sich die seite szs selber wieder auf. per post wird der gewählte dropdown dingens value gesendet. es passiert also folgendes:
wieder wird die selbe datei vom server bearbeitet, nur dass diesmal eben formulardaten dabei sind. müssen wir also das noch checken, und je nach dem (dynamisch - php usw ^^) die seite umgestalten:
Code:
<?php
  // html head gerödel...
  <form... action="formular.php" method="post">
    [B]if(!isset($_POST['send'])) {[/B] // kein senden (name send) button gedrückt -> unsere anfangsdropdingens anzeigen
    <input dropdown... name="drop1">
      <option bla value="1" select="selected">
      <option blubb value="2">...
    [B]} else {[/B] // ansonsten halt die nächste
    <input dropdown... name="[B]drop2[/B]">
      [B]if(isset($_POST['drop1']) && [/B][B]$_POST['drop1'] == "arbeiten") {[/B] // oder hier vllt besser switch case
      <option [B]haste [/B]value="1" select="selected">
      <option [B]nich [/B]value="2">...
      <option [B]gesehn [/B]value="3">...
     [B] } else {[/B]
      // andere options...
      }
    }
    <input submit... name="send">
  </form>
  // footer gerödel...
?>
so in etwa. muss gleich zur arbeit, kann also nich so ausführlich ^^

jedenfalls baust du halt je nachdem, was in post gesendet wird, deine seite immer um. und die dropboxen füllst du am sinnvollsten in ner forschleife und wie tessa schon sagte: die daten, mit was du die dropboxen füllst, kannste bspw in der db mit speichern - oder hardcoded in der php. per db methode können aber auch aussenstehende mittels php-admin dingens direkt in der db neue optionen einstellen oder löschen usw usf.

das lässt sich natürlich beliebig erweitern und ich hoffe, die grundsätzliche arbeitsweise ist klar. also das ist mit php usw definitiv machbar. wenn deine firma eh über den browser arbeitet, dann ist das wohl nichmal die schlechteste alternative. falls das aber völlig bums is und du auch per java oder so arbeiten kannst (auch da kann man formulare erstellen und ne db anbinden - genauso halt c usw ^^) UND du damit besser klar kämst, wäre das halt wie schon erwähnt auch ne alternative.

beim php login gelumbe haste halt das problem, dass du die logindaten immer mit "rüberretten" musst, wenn man irgendwas klickt. cookies und sessions und all son gerumbel - das is bissl zäh ^^
 
also das ist mit php usw definitiv machbar. wenn deine firma eh über den browser arbeitet, dann ist das wohl nichmal die schlechteste alternative.

Was wäre denn die schlechteste Alternative?

Und inwiefern macht der Zugriff auf die Anwendung per Browser PHP zu einer besseren Alternative? Das ließe sich auch ganz einfach per Java realisieren.
 
Danke an alle für die Tipps! Ich werde heute zeitlich nicht mehr zum Weitermachen kommen, aber morgen, und v. a. am WE, möchte ich mich wieder intensiv damit beschäftigen.

Im Anhang mein bisheriges Ergebnis, falls es sich wer anschauen will. Ich denke, dann wird euch auch klarer, in welche Richtung ich mit dem ganzen gehen will ...

Anhang anzeigen Datenbank.zip

Wer's sehen will:
1) xampp installieren, Apache und MySQL starten
2) Alle Files aus dem Archiv in den htdocs Ordner einfügen
3) Die beiden sql-Datenbank-Files in phpmyadmin importieren, sodass beide DBs drinnen sind
4) dann http://localhost/eintragen.html starten
^^ Von da weg rufen sich die Files dann nacheinander gegenseitig auf

Dass es hier und da noch Verbesserungsmöglichkeiten gibt, ist mir auch selbst klar. Vor allem das "root, root" in den Datenbank-connections stört mich noch irgendwie. Das gehört sicher noch geändert, auch wenn so alles funktioniert?! Und die GETs sollte ich auch noch durch POSTs ersetzen, aber das habe ich heute nicht mehr geschafft, ohne mir dabei zig Errors einzufangen.
 
Okay, meine Seite 2 (php Script) habe ich jetzt mal so begonnen:
Code:
<?php
    echo "<br><h1>Projektzeiterfassung</h1>";
    echo "Bitte wählen Sie je Tätigkeit die Produkte, an denen Sie gearbeitet haben:";
    
    $checkbox_arr = array(); // $checkbox_arr wird Feld
    for ($a = 1; $a <= 11; $a++) { // Schleife durchläuft Anzahl aller Produkte
        $abfrage = $a; // $abfrage erhält in jeder Schleifenrunde um 1 erhöhten Wert, beginnend bei 1, endend bei 11
        if (isset($_POST['$abfrage'])) { // Wenn überhaupt etwas in POST steht, soll Wert aus dem html-Formular (Anzahl d. gew. checkboxen) in $abfrage gespeichert werden
            $Checkbox_arr[] = $_POST['$abfrage']; // $Checkbox_arr erhält dann diesen Wert als Größe
        }
    } 
    
    $count_arr = Count(isset($Checkbox_arr)); // $count_arr erhält Größe des $Checkbox_arr als Wert
    for ($b = 1; $b <= $count_arr; $b++) { // jetzt wird von 1 bis zu diesem Wert gezählt und so oft passiert dann was ...
        echo "test";
    }
?>
Allerdings bin ich mir nicht sicher, ob ich TessaKavanagh's Schleifen-Vorschlag richtig verstanden habe. Vorrausgesetzt, meine Kommentare stimmen, dann muss irgendwo ein semantischer Fehler drinnen sein?! Was auch immer ich in die zweite Schleife reinschreibe, passiert nur 1 Mal ... egal, wie viele checkboxen ich im html-Formular angewählt habe. :huh:

Ich verstehe auch nicht, wieso ich in der ersten Schleife überhaupt erstmal alle Produkte bis 11 durchzählen soll. Das if alleine sollte doch schon reichen, weil die Anzahl der angewählten checkboxen doch eh schon in POST drinnen sein sollte?!

Das ist alles ein bisschen seltsam. Habe gerade gesehen, dass ich theoretisch $checkbox_arr immer klein schreiben und diese Zeile ( $checkbox_arr = array(); ) auch ganz weglassen könnte. Ändert gar nichts. ???

[EDIT]
@ DarkMo
Ungefähr verstehe ich deinen Beispielcode und was du damit zeigen willst. Grundsätzlich ist mir klar, was ich jetzt machen muss. Es wird am Ende eine Mischung aus Elementen aus deinem und Tessa's Code. Bei mir scheitert's im Moment an meinen mangelnden php-Kenntnissen, siehe meine Fragen über dem EDIT ...
 
Zuletzt bearbeitet:
du kannst die Variable $Checkbox_arr auch $horst nennen. Die Großschreibung ist nur weil der Rechner hier aus irgendeinem Grund das dingen immer wieder groß macht.

Ich zähle bis 11 durch weil es in deinem Script Hypotetisch bis zu 11 Checkboxen gibt. Wenn du die schleife also nur 8 mal durchlaufen lässt aber Checkbox 10 aktiviert wäre. Dann würde er nur die Checkboxen 1-8 abfragen und 10 ignorieren. Das if Fragt ohne schleife ja dann nur chechbox1 ab. Erst im zweiten Durchlauf wird checkbox2 abgefragt.

$checkbox_arr = array(); // initalisiert das Array.

PHP würde aber wie du bemerkt hast die variable einfach in ein Array Ändern sobald du es als Array ansprichst. Weswegen die o.g. Zeile nicht zwingen nötig ist.

Schreib nach "$count_arr = Count(isset($checkbox_arr));" mal ein "echo $count_arr;" da müsste ja eigentlich jetzt ne Zahl stehen. Evtl einfach mal nur $count_arr = Count($checkbox_arr)

und ja ich hasse es das der Rechner hier immer Großbuchstaben reinhaut -.-

Edit:
Du Schreibst oben// Wenn überhaupt etwas in POST steht, soll Wert aus dem html-Formular (Anzahl d. gew. checkboxen) in $abfrage gespeichert werden

Jain er soll nur indirekt die Anzahl der gewählten Checkboxen bestimmen. Ziel ist es hier herauszufinden welche Checkboxen genau aktiviert wurden.
 
Zuletzt bearbeitet:
^^ Okay, jetzt verstehe ich mal das ganze Konstrukt.

echo $count_arr; liefter genau "1", wie ich's schon bemerkt und erwähnt hatte.

Gerade festgestellt: Ohne das zweite isset, das ich eingefügt habe, kommt immer "0".

:huh:
 
Da kommt dann folgendes raus:

Array ( [taetigkeit] => Array ( [0] => An [1] => En [2] => Or [3] => Sc [4] => So ) [text] => fd )

Schaut ja nicht schlecht aus, nur das fd hinten stört ein bisschen (das ist der Inhalt meiner Textbox, wo der MA eine Beschreibung eingeben kann). Die Textbox vielleicht weg und woanders hin (dann auf Seite 3?), und die Anzahl d. anderen Feldelemente abzählen, dann müsst's passen ...

Muss ich mir jetzt überlegen. Ganz verstehe ich aber noch nicht, wieso ich immer nur "1" oder "0" erhalte, je nachdem ob mit oder ohne isset. count() sollte doch schon die Elemente abzählen?!
 
Zuletzt bearbeitet:
Die Lösung dürfte Simpel sein. Ändere mal den "Name" im Formularfeld in den Checkboxen in taetigkeit1 bis taetigkeit11 und im php Code ersetzt du bei $abfrage = "check"; das ganze durch $abfrage = "taetigkeit";

Das [text] => FD wird er nicht abfragen ist also insoweit unbeachtlich.
 
Du meinst im html-File?
So: <input type="checkbox" name="taetigkeit1[]" value="An" id="check1"><label for="check1">An</label><br>

^^ Habe ich jetzt bei allen 11 gemacht.

Und im php Script (projektzeiterfassung2.php) schaut's jetzt so aus:
Code:
<?php
    echo "<br><h1>Projektzeiterfassung</h1>";
    echo "Bitte wählen Sie je Tätigkeit die Produkte, an denen Sie gearbeitet haben:";

    for ($a = 1; $a <= 11; $a++) {
        $abfrage = "taetigkeit";    
        $abfrage .= $a; 
        if (isset($_POST['$abfrage'])) { 
            $checkbox_arr[] = $_POST['$abfrage']; 
        }
    } 
    
    $count_arr = count(isset($checkbox_arr)); 
    echo "<br><br>";
    for ($b = 1; $b <= $count_arr; $b++) { 
        echo "test";
    }
?>
Und das Ergebnis ist:

Notice: Undefined index: taetigkeit in C:\xampp\htdocs\db\login\formular.php on line 4
Warning: implode(): Invalid arguments passed in C:\xampp\htdocs\db\login\formular.php on line 5

formular.php schaut so aus:
Code:
<?php    
    include('projektzeiterfassung2.php');

    $taetigkeit = $_POST['taetigkeit'];
    $taetigkeit_text = implode("<br>",$taetigkeit);
    echo '<p>Ihre ausgewählten Tätigkeiten:<br><br>'.$taetigkeit_text.'</p>';
?>
 
Jop íst doch klar. Du hast doch im Formular den index geändert. Das implode $Taetigkeit kann jetzt natürlich nicht merh funktionieren. lösche mal alles nach dem include. Das [] hinter taetigkeit 1-11 kannst du auch gleich rausschmeißen ;)
 
Geht wieder, aber selbes Problem: Er zählt bei den checkboxen nur bis "1" ... egal, wie viele ich anwähle.
 
also mein Vorschlag ich setze mich heute Nachmittag/Morgenvormittag mal zuhause hin und schicke dir einen funktionierenden Code

BTW. Kannst du hinter
$abfrage = "taetigkeit";
$abfrage .= $a;

mal echo $abfrage; setzen und das Ergebnis posten
 
Dann kriege ich noch das ausgegeben: taetigkeit1taetigkeit2taetigkeit3taetigkeit4taetigkeit5taetigkeit6taetigkeit7taetigkeit8taetigkeit9taetigkeit10taetigkeit11

Es geht eh so einiges nicht, wie ich mir das vorgestellt hatte. Z. B. hätte ja DarkMo vorgeschlagen, html Code ins php Script einzufügen. Mache ich das, wird dieser nicht als solcher erkannt (trotz Tags und egal ob mit oder ohne echo), etc. ...

Ich weiß auch nicht, wie das dann am besten zu machen wäre, wenn das dann mal geht mit der Anzahl der angewählten checkboxen. Dann bin ich in der Schleife, die genau so oft mal durchlaufen wird und kann entsprechend viele checkboxen erstellen. Aber wie ich dann jeder checkbox eine andere Tätigkeit zuweise, sehe ich noch nicht. Puh, das wird noch "lustig".

BTW kannst du dir gerne von der Vorseite das zip-Archiv runterladen und anschauen, wie das alles, das ich bis jetzt habe, genau ausschaut. Nur in formular.php wäre jetzt eben alles zu löschen bis auf die include-Zeile, in projektzeiterfassung1.html bei taetigkeit 1, 2, 3, ... , 11 anhängen und die [] weg. Und projektzeiterfassung2.php ist eben dieses Konstrukt:
Code:
<?php
    echo "<br><h1>Projektzeiterfassung</h1>";
    echo "Bitte wählen Sie je Tätigkeit die Produkte, an denen Sie gearbeitet haben:";

    for ($a = 1; $a <= 11; $a++) {
        $abfrage = "taetigkeit";    
        $abfrage .= $a; 
        echo $abfrage;
        if (isset($_POST['$abfrage'])) { 
            $checkbox_arr[] = $_POST['$abfrage']; 
        }
    } 
    
    $count_arr = count(isset($checkbox_arr)); 
    echo "<br><br>";
    for ($b = 1; $b <= $count_arr; $b++) { 
        echo "test";
    }
?>
 
Ich werde mich heute Nachmittag/Morgen früh mal hinsetzen und dir ein vollständiges (funktionierendes) und Auskommentiertest Beispiel erstellen.

Inklusive Dynamische erstellten Checkboxen/Formularen ;)
 
Zurück