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

  • Ersteller Ersteller boss3D
  • Erstellt am Erstellt am
meinen code habt ihr aber schon gesehn oder? :P das ist GENAU das, was gesucht wird. kein ajax, keine unnötigen dinger, nur die funktionierende grundlage. mein vorschlag wäre ja gewesen: übernimm die grundlage und baue deinen db krams und formular-auswertungs kram ein und du hast schonmal ne ganze menge geschafft. ich hab das extra so gebaut, dass man nur noch 1 2 schritte weiter gehen muss. alles benötigte ist faktisch vorhanden.

aber ich sehe es halt wie du: komplett-code fetzt nich :P daher hab ichs dir beispielhaft und dennoch funktionierend gebastelt. und kompliziert is daran doch garnix. das $db_count kann raus, das is ja nur nen workaround um das "db-verhalten" zu simulieren (also halt die anzahl der angezeigten einträge). wenn das auf sql umgebaut is, braucht man die ned mehr. die normale $count variable muss aber drin bleiben. und statt der textausgaben für löschen und adden musst du halt deine insert/delete's reibauen. achja: und natürlich die tabelle anpassen und somit auch im javascript dass add-teil erweitern und mit entsprechenden inputs/selects versehen.

also quasi: nicht meinen code in deins einbauen, sondern deinen in meinen ^^
 
Aber an diesen 1-2 Schritten scheitert es doch bereits ;) Im übrigen ist der Code den er aktuell verwendet nichts anderes. Nur das er vollständig ohne JavaScript auskommt. Wenn man aber versucht ein Formular mit einem type="Button" statt einem type="Submit" zu versenden, dann kann das ja nicht klappen x-D (Ok der geht auf meine Kappe).

Dann brauchst er nur noch 1-4 for Schleifen im aktuellen Eintragescript und das ganze steht.
 
Okay, dann funktioniert zumindest mal das mit der Zeile, aber die Tabelle fährt uns immer weiter runter. Mit jeder weiteren Zeile wird der Abstand zur Überschrift größer. :wow:

Gibt's auch eine Möglichkeit, dass sich die Seite auf den Ursprungszustand (nur Header und Buttons) "resetet", wenn ich z. B. im Firefox auf den kreisförmigen Pfeil in der Adressleiste klicke?
 
Muss ein <br> sein was in einer Schleife steht und da nicht hingehört.


Ob die Funktion des Zurückbuttons gewährleistet werden kann bin ich mir grade nicht sicher. wir können das ganze aber mit GET statt POST und ohne 2. Formular lösen wenn du willst. Die Anzahl der Spalten sind ja keine sensiblen Daten.

Mir schwebt da so etwas was vor wie Zeile Plus/Zeile Minus
 
Okay, dann funktioniert zumindest mal das mit der Zeile, aber die Tabelle fährt uns immer weiter runter. Mit jeder weiteren Zeile wird der Abstand zur Überschrift größer. :wow:

Gibt's auch eine Möglichkeit, dass sich die Seite auf den Ursprungszustand (nur Header und Buttons) "resetet", wenn ich z. B. im Firefox auf den kreisförmigen Pfeil in der Adressleiste klicke?
ich versteh gerade nur bahnhof... für mich klingt das wie "wieso ergibt 1+1 2? das soll 3 ergeben!" ^^ wenn man tabellenzeilen hinzufügt... ja dann fügt man eben tabellenzeilen hinzu :huh:
 
Jap. Das mit dem "Reset" wäre noch interessant, wenn das ginge.

Ansonsten:
Du hast ...
- name="taetigkeit'.$a.'"
- name="product'.$a.'"
- name="beschreibung'.$a.'"
... gemacht, also einen Index angehängt.

Der fehlt mir jetzt natürlich hier:
- $taetigkeit = $_POST["taetigkeit"];
- $produkt = $_POST["product"];
- $beschreibung = $_POST["beschreibung"];

Aber die Schleife habe ich ja in projektzeiterfassung2.php nicht. Wie kriege ich den Index jetzt trotzdem mit rüber?

@ DarkMo
Das Problem hast du komplett falsch verstanden, aber ist schon egal; hat sich schon gelöst. :)

[EDIT]
Ich seh's schon kommen: Ich muss mir da jetzt in projektzeiterfassung2.php ein Schleifenkonstrukt reinbasteln, das mit ifs abfragt, in welcher Zeile wir gerade sind und welche Felder davon Inhalte haben, oder?
 
Zuletzt bearbeitet:
Ja aber die Überschrift steht Oberhalb der gesamten Tabelle.
Code:
 <h1>Überschrift</h1> 

Hier ist ein Abstand der immer größer wird


<table> Zeilen der Tabelle die immer eine mehr wird </table>


Also wenn du das mit dem zurück haben willst, dann müssen wir den Funktionierenden Code nochmal geringfügig Ändern.
Welche Zeilen du ersetzen musst Poste ich dir dann. Wir simulieren quasi ein abgesendetes Formular ohne das das Formular tatsächlich existiert.

Ich bin jetzt aber gleich erst mal für eine Stunde Weg. Weswegen ich dir das erst danach Erkläre. Die Lösung ist sogar einnfacher als das bisherige 2. Formular nebenbei kannst du dann sogar das neue Zeile über das bestätigen setzen wenn du willst.^^

Das mit dem Index lösen wir nach dem gleichen Schema wie beim erstellen der POST variablen also mit einer for Schleife. Zeige ich dir dann ebenfalls.
 
Zuletzt bearbeitet:
ah ok, ja da wird wohl besagtes <br> mitgebaut. wegen dem index: du musst halt (siehe meinen code - der btnAdd teil) das ganze mittels schleife abarbeiten. aber der index wird da doch anders gebildet oO wenn du ein formular-feld hast mit einem namen ala input[], dann greift man darauf über $_POST['input'][$index] zu. wenn man jetzt sagt $taetigkeit=$_POST['taetigkeit']; (bei der namensvergabe taetigkeit[]), dann greift man eben über $taetigkeit[$index] darauf zu und nicht über $taetigkeit.$index (oder was du da gebaut hattest ^^).
 
Ja aber das eine ist das Array $_POST['teatigkeit'] dessen Einträge du mit [$irgendeinezahl] ansprichst. Was ich hier verwendet habe sind die variablen $_POST['teatigkeit1'] $_POST['teatigkeit2'] etc. Der unterschied dürfte ja klar sein.


PHP:
<!doctype html>
<html>
<head>
<meta charset="ISO-8859-1">
<link rel="stylesheet" type="text/css" href="style.css">
<title>Projektzeiterfassung</title>
</head> 
<body>
<form action="projektzeiterfassung2.php" method="post">
    <br><h1>Projektzeiterfassung</h1>
    <table id="t1">
        <tr><th>Tätigkeit</th>
        <th>Produkt</th>
        <th>Beschreibung</th>
        <th width="150">MO <input name="mo" type="text" size="10" maxlength="10"></th>
        <th width="150">DI <input name="di" type="text" size="10" maxlength="10"></th>
        <th width="150">MI <input name="mi" type="text" size="10" maxlength="10"></th>
        <th width="150">DO <input name="do" type="text" size="10" maxlength="10"></th>
        <th width="150">FR <input name="fr" type="text" size="10" maxlength="10"></th>
        <th width="150">SA <input name="sa" type="text" size="10" maxlength="10"></th>
        <th width="150">SO <input name="so" type="text" size="10" maxlength="10"></th></tr>    
<?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.");

    $taetigkeiten = array();
    $sql_t = "SELECT * FROM taetigkeiten;";
    $res_t = mysql_query($sql_t) or die ("Get Taetigkeiten failed.<br>".mysql_error());
    if (mysql_num_rows($res_t))
        while ($row_t = mysql_fetch_assoc($res_t)) {
            $taetigkeiten[count($taetigkeiten)] = $row_t;
        }

    $products = array();
    $sql_p = "SELECT * FROM produkte;";
    $res_p = mysql_query($sql_p) or die ("Get Produkte failed.<br>".mysql_error());
    if (mysql_num_rows($res_p))
        while ($row_p = mysql_fetch_assoc($res_p)) {
            $products[count($products)] = $row_p;
        }
	
	// Hier beginnt die geänderte Abfrage    
    if(isset($_GET['add'])){$add = $_GET['add']; $add++;}elseif(!isset($_GET['rem'])){$add = 1;}
    if(isset($_GET['rem'])){$add = $_GET['rem']; $add--;}
        // Hier Endet die geänderte Abfrage



    for($a = 1; $a <= $add; $a++) {
        echo '<tr><td><select name="taetigkeit'.$a.'">';
        foreach ($taetigkeiten as $taetigkeit) {
            echo '<option value="'.$taetigkeit['taetigkeit'].'">'.$taetigkeit['taetigkeit'].'</option>';
        }
        echo '</select></td>';

        echo '<td><select name="product'.$a.'">';
        foreach ($products as $product) {
            echo '<option value="'.$product['produkt'].'">'.$product['produkt'].'</option>';
        }
        echo '</select></td>';

        echo '<td><input name="beschreibung'.$a.'" type="text" size="50" maxlength="250"></td>';

        echo '<td><input name="montag'.$a.'" type="text" size="10" maxlength="5""></td>';
        echo '<td><input name="dienstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="mittwoch'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="donnerstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="freitag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="samstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="sonntag'.$a.'" type="text" size="10" maxlength="5"></td></tr><br>';
    } 
    echo '</table><br>';
// Hinzufügen und entfernen
    echo '<button name="add" type="button" value="Zeile hinzufügen" onclick="projektzeiterfassung.php?add='.$add.'">';
    echo '<button name="rem" type="button" value="Zeile entfernen" onclick="projektzeiterfassung.php?rem='.$add.'">';

echo '<input type="hidden" name="add" value="'.$add.'">';
// Hinzufügen und Entfernen Ende
 

   echo '<div class="submit"><input type="submit" name="confirm" value="Bestätigen"></div>';
    
    echo '</form> ';
// Hier endet das "alte" Formular.

?> 
</body>
</html>


[EDIT]

Als nächstes die projektzeiterfassung2.php

PHP:
<?php  
    session_start();
    
    $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 = $_SESSION['name'];   
    $ergebnis = mysql_query("SELECT id FROM user WHERE name='".$user."'");
    $row = mysql_fetch_object($ergebnis);
    $userid = $row->id;  
    
	// Geänderter Code Beginnt

    	

    $add = $_POST['add'];

    for($b = 1; $b <= $add; $b++)
{
    $taetigkeit = $_POST['taetigkeit'.$b.''];
    $produkt = $_POST['product'.$b.'']; 
    $beschreibung = $_POST['beschreibung'.$b.''];    
    
    $stunden = array("montag".$b."", "dienstag".$b."", "mittwoch".$b."", "donnerstag".$b."", "freitag".$b."", "samstag".$b."", "sonntag".$b."");   
    $data = array("mo".$b."", "di".$b."", "mi".$b."", "do".$b."", "fr".$b."", "sa".$b."", "so".$b."");
    
    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('Y-m-d-h-i-s');
            $eintrag = "INSERT INTO zeiten (taetigkeit, produkt, userid, beschreibung, zeit, datum, erstellt) VALUES ('$taetigkeit', '$produkt', '$userid', '$beschreibung', '$dauer', '$tag', '$erstellt')";
            $eintragen1 = mysql_query($eintrag);
        }        
    }

unset($data);
unset($stunden);
}
?>
 
Zuletzt bearbeitet:
^^ Okay, danke. Der weitere Weg ist mir jetzt wieder klar. Ich bin jetzt auch schon zuhause und muss mich erstmal um ein paar andere Dinge kümmern. Weiß noch nicht, ob ich heute noch zum Weiterprogrammieren kommen werde.

Aber eines gäb's noch, das mich brennend interessieren würde: Tessa, kannst du bitte zu erklären versuchen, warum das jetzt nötig(?) war, für die Mehrfachausgabe der Zeile so eine komplizierte Lösung mit verstecktem Feld und Schleifen zu basteln? Und warum meine simple Idee ...
Warum reicht's denn nicht, einfach irgendwo <?php include("dynamictable.php");<br> ?> zu sagen? Es geht ja nur drum, dass der Button neue Zeilen unterhalb bestehender einfügt und die nicht ständig überschreibt.
... nicht gegangen wäre (oder wäre es eh gegangen)?

Der Button hatte ja bei mir immer schon das richtige gemacht, allerdings hat er eben die Zeile immer an der selben Position eingefügt und dadurch immer wieder überschrieben. Warum konnte ich da nicht einfach "irgendwo" mit <br> sagen, dass die nächste eben immer eine Position darunter eingefügt werden soll?
 
Beim klicken des "Button" mit dem ursprünglichen JavaScript hat der User dem Server gesagt (http Request) führe bitte die Datei "dynamictable.php" aus. Als Resultat dieses Codes ist dann die HTML ausgabe einer Zeile entstanden die zu diesem Zeitpunkt nur der Server kennt.
Soweit ist noch alles Klar nehme ich an.

Dieser http Request ist aber nicht so wie wenn du eine neue Seite aufrufst. Dann bekommt der User vom Server eine zum anzeigen fertige Seite zugeschickt also den gesamten Quelltext den du siehst wenn du dir in der Datei den Quelltext anzeigen lässt.
Sondern der Server antwortet jetzt nur auf diesen speziellen Request und bekommt dann als String "Hallo ich bin eine Tabellenzeile" vom Server zugeschickt. Diese wird dann in variable gespeichert. Das ist nur ein Bruchstück aus dem o.g. Quelltext.

Bisher kann der Nutzer diesen noch überhaupt nicht sehen. Deshalb muss das JavaScript jetzt noch wissen wo es beim User denn die Textzeile "Hallo ich bin eine Tabellenzeile" in die Website einbauen soll. Das hast du Ihm mit dem Befehl: document.getElementByID('content').innerHTML(variable);

Dieser Befehl macht im ersten Schritt nichts anderes als im Quelltext der Website nach einem Objekt zu suchen welches die id='content' hat.
In deinem Beispiel war das ein div Container <div id='content'>PLATZHALTER</div>
Im Zweiten Schritt sorgt das innerHTML dann dafür das der Gesamte Inhalt dieses Objektes im bisherigen Fall wäre das PLATZHALTER durch den Inhalt von variable = "Hallo ich bin eine Tabellenzeile" ersetzt wird.
Jetzt steht im Quelltext also <div id='content'>Hallo ich bin eine Tabellenzeile</div>
Würdest du den Button jetzt erneut anklicken wiederholt sich der ganze Vorgang nur das du in dem o.g. Schritten jeweils PLATZHALTER durch "Hallo ich bin eine Tabellenzeile" ersetzen musst. Du ürdest daher "Hallo ich bin eine Tabellenzeile" durch "Hallo ich bin eine Tabellenzeile" ersetzen. Im Ergebnis sieht die Website ab dem zweiten mal also aus wie vorher. Würde die Zeile "Hallo ich bin eine Tabellenzeile<br>" lauten, dann wäre diese eben durch die Zeile "Hallo ich bin eine Tabellenzeile<br>" ersetzt worden. Jeglicher Text und Code der zwischen dem Öffnenden und schließenden Tag steht wurde in deinem Script ersetzt. Denn das ist genau das was innerHTML macht.

Jetzt kommen wird zum einbinden von PHP Code z.B. include mit dieser Methode.

Wie ich bereits oben erwähnt habe ist PHP eine Serverseitige Sprache, JavaScript eine Clientseitige. Würdest du jetzt also dem JavaScipt sagen ersetze PLATZHALTER durch "<?php include="zielpfad"; ?>" würde auf deiner Website als Ausgabe statt einer Tabellenzeile <?php include="zielpfad"; ?> stehen.
Der Browser weiß nämlich nicht was er mit PHP anfangen soll, da er diese Sprache nicht kennt. Er würde das einfach als Text ansehen und als solchen auf dem Bildschirm anzeigen und da du ja die Website nicht neu geladen hast und JavaScript Clientseitig ist, weiß auch der Server garnicht das die Website jetzt anders aussieht als er sie ursprünglich erstellt hat- Er kennt nämlich nur die Website in der dort statt <?php include="zielpfad"; ?> das Wort PLATZHALTER steht.
 
Zuletzt bearbeitet:
ihr habt mein bsp echt nich angeschaut oder? da funzt GENAU das. nur nutze ich nicht das div als platzhalter, sondern geb der tabelle selbst die id "content". was passiert dann hier? ich speicher den bisherigen inhalt der tabelle (also alles zwischen <table> und </table> -> besagtes innerHTML, hier eben des tabel-tags und nicht des div-tags) und füge diesem einfach eine neue tabellenzeile hinzu. wie gesagt, schaut euch das bsp bitte an. wozu mach ich mir die arbeit, wenns alle ignorieren >< eure fragerei is sionnlos, da längst beantwortet.

desweiteren: wozu zum geier braucht man hier php? die tabellenzeile sieht IMMER gleich aus. da is nix dynamisch. ich habs bei mir eben exemplarisch mit einem einzelnen inputfeld gemacht. das auszubauen ist ja nun keine kunst *hoff* ^^

das prob bei dem div ist ganz einfach, dass ihr da für jede tabellenzeile immer eine komplette tabelle mit je einer zeile ausgeben müsst. das lässt sich blöd formatieren und ist unnütz.
wegen dem hidden-counter:
die js-funke liest diesen wert aus, addiert dazu 1 und schreibt ihn wieder zurück, sobald man ne neue zeile added. ich hab hierfür als butten extra <button type="button"> genommen, weil dieser das formular eben NICHT sended. das braucht man für diese js-funke ja ned. is ja der sinn von js, dass man die seite eben nicht neuladen muss, um was zu ändern. daher is nen button, der das formular abschickt und die seite neu "berechnen" lässt doof, wenn nich gar hinderlich. gut, das hidden-field (also <input type="hidden" value="$count" name="count">) enthält also genau die anzahl der zu addenden zeilen. drückt man jetzt den eintragen button, bestätigt also seine eingabe, dann wird die seite neu geladen, das php-script checked die eingaben und kann anhand der mitgelieferten count angabe ($_POST['count']) rausfinden, wieviele datensätze denn nun geliefert wurden. man kann das vllt auch weglassen und ein while(isset($_POST['teatigkeit'][$i])) { ...; $i++; } probieren, das müssts eigentlich auch tun, aber nuja. so gehts auch. das andere wäre eventuell aber sogar die effizientere lösung.

aber wie gesagt, schaut euch/du dir bitte nochmal mein letztes bsp an. wie gesagt, das is nen 4zeiler js code und nen winziger php code der all das macht, was hier krampfahft versucht wird umzusetzen >< und das viel eleganter und einfacher *find*
 
Ich habe mir den code durchaus angeschaut und jetzt zum aber.

Der TE ist nicht und wird auch nicht dazu in der Lage sein den Code entsprechend so anzupassen das eine vollständige Tabellenzeile entsteht.
Das das Script zwar immer den Inhalt anfügt ist auch klar. Ein Beispiel dafür wie man das mit inner HTML in JS Lösen kann hatte ich ebenfalls gepostet.

Sein Vorschlag mit dem include() per JS ist hingegen schlichtweg unmöglich, das kann nicht funktionieren. Das macht schließlich auch dein JS nicht (Das kann man aus deinem Text oben m.E. missverstehen).

Das Script zum eintragen in die Datenbank musst du jetzt ebenfalls entsprechend anpassen (mit einer zusätzlichen For schleife kommst du da nämlich nicht alleine weiter weil du ein Array verwendet hast.)

Er muss daher nicht nur sagen bitte führe die Anweisung xx mal aus, sondern er muss zusätzlich noch die richtigen indizis ansprechen.
Alles in allem sehe ich persönlich den TE momentan nicht in der Lage diese Anpassungen durchzuführen.
 
Der TE ist nicht und wird auch nicht dazu in der Lage sein den Code entsprechend so anzupassen das eine vollständige Tabellenzeile entsteht.
ööh, aus ner einzellen-tabellenzeile ne ... 10 zellen (oder wieviels war) machen ist zuviel? ^^ das is doch wohl das simpelste überhaupt. das is die var add... zeile aus der .js - einfach erweitern und fertig.

Das macht schließlich auch dein JS nicht (Das kann man aus deinem Text oben m.E. missverstehen).
dann war das wirklich missverständlich. ich hatte ja glaube extra noch gesagt, dass man dazu eben KEIN php braucht.

Das Script zum eintragen in die Datenbank musst du jetzt ebenfalls entsprechend anpassen (mit einer zusätzlichen For schleife kommst du da nämlich nicht alleine weiter weil du ein Array verwendet hast.)

Er muss daher nicht nur sagen bitte führe die Anweisung xx mal aus, sondern er muss zusätzlich noch die richtigen indizis ansprechen.
Alles in allem sehe ich persönlich den TE momentan nicht in der Lage diese Anpassungen durchzuführen.
auch hier wieder: ist doch alles exemplarisch schon vorgegeben. ich gebe dieses eine inputfeld korrekt in einer schleife aus. im letzten post (glaub) hatte ich sogar ne noch einfachere variante genannt, die ohne "hidden-counter" auskommt. er braucht jetzt nur noch ausm echo input[$index] geblubbe ein $sql = "update... input[$index]..." machen und ggf noch ne ausgabe malen. schon is der rotz in der db. wie gesagt, das teil is an sich mit wenigen kniffen voll funktionsfähig.

oder versteh ich dich grad falsch, weil das letzte verwirrt mich grad. "nich nur x mal durchlaufen, sondern auch die richtigen indizes..." - genau das mach ich doch ^^
 
Die $_POST Abfrage wird bereits aus einem Array erstellt, du musst jetzt aber da noch einen Index anhängen. Du musst das ganze dann noch um einen Index Erweitern. Du musst da also sowas wie $_POST[$_Array[$index a]][$index b] draus machen.

auch hier wieder: ist doch alles exemplarisch schon vorgegeben. ich gebe dieses eine inputfeld korrekt in einer schleife aus. im letzten post (glaub) hatte ich sogar ne noch einfachere variante genannt, die ohne "hidden-counter" auskommt. er braucht jetzt nur noch ausm echo input[$index] geblubbe ein $sql = "update... input[$index]..." machen und ggf noch ne ausgabe malen. schon is der rotz in der db. wie gesagt, das teil is an sich mit wenigen kniffen voll funktionsfähig.

und genau da scheitert es. Auch wenn es exemplarisch schon da ist, der TE bekommt es nicht auf den rest übertragen.
 
DarkMo's Code so angepasst, dass er (optisch) wieder das selbe Resultat liefert:
PHP:
<?php
    echo '<!doctype html>
            <html>
            <head>
                <meta charset="ISO-8859-1">
                <link rel="stylesheet" type="text/css" href="style.css">
                <title>Projektzeiterfassung</title>
                <script src="zeit.js" type="text/javascript"></script>
            </head>
            <body>';
  
    echo '<form action="formular.php" method="post">';
    echo '<br><h1>Projektzeiterfassung</h1>';
    echo '<table border="1" id="content">';
    echo '  <tr>';
    echo '    <th>Tätigkeit</th>';
    echo '    <th>Produkt</th>';
    echo '    <th>Beschreibung</th>';
    echo '    <th width="150">MO <input name="mo" type="text" size="10" maxlength="10"></th>';
    echo '    <th width="150">DI <input name="di" type="text" size="10" maxlength="10"></th>';
    echo '    <th width="150">MI <input name="mi" type="text" size="10" maxlength="10"></th>';
    echo '    <th width="150">DO <input name="do" type="text" size="10" maxlength="10"></th>';
    echo '    <th width="150">FR <input name="fr" type="text" size="10" maxlength="10"></th>';
    echo '    <th width="150">SA <input name="sa" type="text" size="10" maxlength="10"></th>';
    echo '    <th width="150">SO <input name="so" type="text" size="10" maxlength="10"></th>';
    echo '  </tr>';

    echo '</table>';
    echo '<input type="hidden" value="0" name="count" id="count">';

    echo '<br><div class="submit"><button type="button" onclick="javascript:add_line();">Neue Eingabezeile hinzufügen</button></div><br> <div class="submit"><input type="submit" value="Bestätigen" name="btnAdd"></div>';
  
    echo '</form>';
  
    echo '  </body></html>';
?>
Code:
function add_line() {
    var count = parseInt(document.getElementById('count').value) + 1;
    var add = '<tr><td><input type="text" name="input[' + (count - 1) + ']"></td><td>' + count + '</td></tr>';
    var div = document.getElementById('content');
    div.innerHTML += add;
    document.getElementById('count').value = count;
}
Liefert:

Capture.JPG

^^ Das einzige, das ich dabei gar nicht kapiere: Für die Erstellung meiner einen Zeile ist ja dieser GANZE Code nötig ...
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.");

    $taetigkeiten = array();
    $sql_t = "SELECT * FROM taetigkeiten;";
    $res_t = mysql_query($sql_t) or die ("Get Taetigkeiten failed.<br>".mysql_error());
    if (mysql_num_rows($res_t))
        while ($row_t = mysql_fetch_assoc($res_t)) {
            $taetigkeiten[count($taetigkeiten)] = $row_t;
        }

    $products = array();
    $sql_p = "SELECT * FROM produkte;";
    $res_p = mysql_query($sql_p) or die ("Get Produkte failed.<br>".mysql_error());
    if (mysql_num_rows($res_p))
        while ($row_p = mysql_fetch_assoc($res_p)) {
            $products[count($products)] = $row_p;
        }

    if(isset($_POST['add'])){$add = $_POST['add'];}else {$add = 0;}
    $add++;
    for($a = 1; $a <= $add; $a++) {
        echo '<tr><td><select name="taetigkeit'.$a.'">';
        foreach ($taetigkeiten as $taetigkeit) {
            echo '<option value="'.$taetigkeit['taetigkeit'].'">'.$taetigkeit['taetigkeit'].'</option>';
        }
        echo '</select></td>';

        echo '<td><select name="product'.$a.'">';
        foreach ($products as $product) {
            echo '<option value="'.$product['produkt'].'">'.$product['produkt'].'</option>';
        }
        echo '</select></td>';

        echo '<td><input name="beschreibung'.$a.'" type="text" size="50" maxlength="250"></td>';

        echo '<td><input name="montag'.$a.'" type="text" size="10" maxlength="5""></td>';
        echo '<td><input name="dienstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="mittwoch'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="donnerstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="freitag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="samstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="sonntag'.$a.'" type="text" size="10" maxlength="5"></td></tr>';
    } 
    echo '</table><br>';
    echo '<div class="submit"><input type="submit" name="confirm" value="Bestätigen"></div>';
    echo '</form> ';
    
    echo '<br><form action="projektzeiterfassung.php" method="post">';
    echo '<div class="submit"><input type="hidden" name="add" value="'.$add.'">';
    echo '<input type="submit" name="newLine" value="Neue Eingabezeile hinzufügen"></div><br>';
    echo '</form> ';
?>
Ich kann den doch jetzt nicht einfach ins Javascript bei var add reinknallen. Wie soll ich das denn jetzt anstellen, dass ich meine dynamische Zeile kriege? :huh:
Klar, ist es nicht schwer, einfach statt einer eben zehn Zellen zu machen. Aber ich habe ja nicht nur Zellen, sondern auch die beiden dropdowns (für deren Inhalt wiederum auf diverse Tabellen in der DB zugegriffen wird)!

Damit sind wir auch wieder beim ursprünglichen Problem, dass ich anscheinend bis heute nicht kapiert habe, wie ich diesen Code der Zeile in den Code für die Seite reinkriegen soll. Das war ja vor ein paar Tagen schon das Problem, wo ich ja auch nicht im Javascript "include();" sagen konnte. Deswegen haben wir (soweit ich's verstanden habe) dann in Tessa's Lsg auf das Javascript verzichtet, den Code dieser Zeile in den Code der Seite integriert, und die Seite sich immer wieder neu aufrufen lassen?!
---------
@ Tessa
Danke für die Erklärung oben, ist jetzt klar(er). :)
 
Zuletzt bearbeitet:
hmm, als ersten schritt, kannste ja mal ganz billig alles mit inputs füllen. also so, dass erstmal die zeilen alle passen. mit den selects (du meinst, dass der inhalt der selects, die einzelnen options, ja aus der db ausgelesen werden oder?) is natürlich wahr. aber da gibts auch ne lösung *denk* du pfeiffst auf das js-file und baust die funktion direkt in der html datei. da geht zwar dann der separierte vorteil flöten, aber man kann es dynamisch machen. ich stells mir so vor:
statt
PHP:
echo '...<script src="zeit.js" type="text/javascript"></script>...';
schreibste dann eben
PHP:
echo '...';
echo '<script type="text/javascript">';
echo 'function add_line() {';
echo "  var count = parseInt(document.getElementById('count').value) + 1;";

// hier jetzt der part, weswegen wir unser js dynamisch per php erstellen:
echo "  var taet_select = '<select name=\"taetigkeit[]\"...>';"; // ohne die count-variable sollte das an sich auch gehn, weil ich für die inputs ja  ...[+count+]... geschrieben hatte. also müsste mMn auch so gehen
$sql = "SELECT * FROM taetigkeiten;";
$res = ...; // abfrage senden
while($row = mysql_...($res)) // wie auch immer die jetz hieß xD
  echo "  taet_select += '<option value=\"".$row['ID']."\">".$row['Bezeichnung']."</option>';";
echo "  taet_select += '</select>';";
// und das ganze nochmal für die produkte...

echo "  var add = '<tr><td>' + taet_select + '</td><td>' + prod_select + '</td><td><input type=\"text\" name=\"input[' + (count - 1) + ']\"></td><td>...restliche inputs...</td></tr>';";
echo "  var div = document.getElementById('content');";
echo "  div.innerHTML += add;";
echo "  document.getElementById('count').value = count;";
echo '}';
echo '</script>';
echo '...';
so stell ichs mir grundlegend vor. wenn du das drin hast, können wir uns mal an die js funke machen, die uns lustige produkte zu den tätigkeiten filtert. das stell ich mir grad etwas verzwickter vor ^^ aber das sollte fürs grundlegende funktionieren erstmal reichen. wie gesagt: ich mach sowas gern schritt für schritt :)
 
mit den selects (du meinst, dass der inhalt der selects, die einzelnen options, ja aus der db ausgelesen werden oder?) is natürlich wahr.
Ja, meine ich. Hab's in mein voriges Posting noch reineditiert.
aber da gibts auch ne lösung *denk* du pfeiffst auf das js-file und baust die funktion direkt in der html datei.
Womit wir wieder ganz genau bei Tessa's Lösung wären, die ich schon hatte ... :ugly: ;)

Soweit ich das alles hier verstanden habe, war ja der große Unterschied zwischen euren Lösungen, dass er/sie eben auf das Javascript verzichtet, den Zeilencode in den Seitencode integriert, und die Seite sich dann immer wieder selbst neu laden hätte lassen.
Und du wolltest den Zeilencode immer wieder über das Javascript in den Seitencode reinladen lassen damit sich die Seite eben nicht jedesmal selbst neu laden muss.
----------

Jedenfalls probiere ich jetzt mal deinen letzten Vorschlag.
 
ich kannte jetzt nur dein dingen mit den htm's und php's ^^ und das fand ich halt alles sehr konfus :/ vllt hab ichs deswegen nich geblickt. ohne js gehts freilich auch (also bis hierhin), aber dann haste halt immer seitenreloads. weis ja ned, wie euer firmennetz da is. wenn ich bei uns auf arbeit seh, wie quälend lahm das alles is... omg ^^ da verzichtet man gern auf seitenreloads >< aber ich finds bei uns auch extrem. im "alltag" is das netz eigentlich doch recht flott. gut, traffic minimierung wäre dann vllt noch nen argument... ich schweife ab xD
 
Ich kenne die Firmeninfrastruktur nicht. Ich weiß absolut gar nichts, außer eben, was von mir verlangt wird und, dass bis jetzt erstmal alle Rechner der Abteilung über "IP_meines_PCs/login.html" auf die Website zugreifen können.
Wie das dann alles am Ende wird und ob die das Zeug dann auf den Webserver der Firma legen, oder ob mein Auftraggeber das dann auch selbst mit xampp nutzen will, dürfen die sich selbst überlegen. Das sehe ich nicht mehr als meine Aufgabe. Wenn der das immer nur von seinem PC aus nutzt und da eine statische IP hat, sehe ich da jedenfalls keine Probleme.

Und wegen der Performance, tja, kann ich auch nicht viel dazu sagen, wie das dann in der Praxis ausschauen wird. Ich denke aber nicht, dass bei dem minimalistischen Inhalt, den unsere Website hat, wegen ~20 Zeilen alles (spürbar) langsam wird?! Das würde vielleicht passieren, wenn die Seite auch sonst noch mit zig html Elementen gefüllt wäre?! ...
-----------

Hier nochmal die Lösung, die ich mit Tessa erarbeitet hatte. Schau's dir einfach mal an, und vielleicht, wenn du meinst, können wir's ja doch so belassen und da weiterarbeiten ...

Website und dynamische Zeile erstellen: projektzeiterfassung.php
PHP:
<!doctype html>
<html>
<head>
<meta charset="ISO-8859-1">
<link rel="stylesheet" type="text/css" href="style.css">
<title>Projektzeiterfassung</title>
</head> 
<body>
<form action="formular.php" method="post">
    <br><h1>Projektzeiterfassung</h1>
    <table id="t1">
        <tr><th>Tätigkeit</th>
        <th>Produkt</th>
        <th>Beschreibung</th>
        <th width="150">MO <input name="mo" type="text" size="10" maxlength="10"></th>
        <th width="150">DI <input name="di" type="text" size="10" maxlength="10"></th>
        <th width="150">MI <input name="mi" type="text" size="10" maxlength="10"></th>
        <th width="150">DO <input name="do" type="text" size="10" maxlength="10"></th>
        <th width="150">FR <input name="fr" type="text" size="10" maxlength="10"></th>
        <th width="150">SA <input name="sa" type="text" size="10" maxlength="10"></th>
        <th width="150">SO <input name="so" type="text" size="10" maxlength="10"></th></tr>    
<?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.");

    $taetigkeiten = array();
    $sql_t = "SELECT * FROM taetigkeiten;";
    $res_t = mysql_query($sql_t) or die ("Get Taetigkeiten failed.<br>".mysql_error());
    if (mysql_num_rows($res_t))
        while ($row_t = mysql_fetch_assoc($res_t)) {
            $taetigkeiten[count($taetigkeiten)] = $row_t;
        }

    $products = array();
    $sql_p = "SELECT * FROM produkte;";
    $res_p = mysql_query($sql_p) or die ("Get Produkte failed.<br>".mysql_error());
    if (mysql_num_rows($res_p))
        while ($row_p = mysql_fetch_assoc($res_p)) {
            $products[count($products)] = $row_p;
        }

    if(isset($_POST['add'])){$add = $_POST['add'];}else {$add = 0;}
    $add++;
    for($a = 1; $a <= $add; $a++) {
        echo '<tr><td><select name="taetigkeit'.$a.'">';
        foreach ($taetigkeiten as $taetigkeit) {
            echo '<option value="'.$taetigkeit['taetigkeit'].'">'.$taetigkeit['taetigkeit'].'</option>';
        }
        echo '</select></td>';

        echo '<td><select name="product'.$a.'">';
        foreach ($products as $product) {
            echo '<option value="'.$product['produkt'].'">'.$product['produkt'].'</option>';
        }
        echo '</select></td>';

        echo '<td><input name="beschreibung'.$a.'" type="text" size="50" maxlength="250"></td>';

        echo '<td><input name="montag'.$a.'" type="text" size="10" maxlength="5""></td>';
        echo '<td><input name="dienstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="mittwoch'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="donnerstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="freitag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="samstag'.$a.'" type="text" size="10" maxlength="5"></td>';
        echo '<td><input name="sonntag'.$a.'" type="text" size="10" maxlength="5"></td></tr>';
    } 
    echo '</table><br>';
    echo '<div class="submit"><input type="submit" name="confirm" value="Bestätigen"></div>';
    echo '</form> ';
    
    echo '<br><form action="projektzeiterfassung.php" method="post">';
    echo '<div class="submit"><input type="hidden" name="add" value="'.$add.'">';
    echo '<input type="submit" name="newLine" value="Neue Eingabezeile hinzufügen"></div><br>';
    echo '</form> ';
?> 
</body>
</html>
Bei Klick auf "Bestätigen" Aufrufen des Codes, der die Daten des Formulars in die DB schreibt: formular.php
PHP:
<?php
    include('projektzeiterfassung2.php');
?>
Der eben genannte Code, der nun die Daten in die DB schreibt: projektzeiterfassung2.php
PHP:
<?php  
    session_start();
    
    $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 = $_SESSION['name'];   
    $ergebnis = mysql_query("SELECT id FROM user WHERE name='".$user."'");
    $row = mysql_fetch_object($ergebnis);
    $userid = $row->id;  
    $taetigkeit = $_POST["taetigkeit"];
    $produkt = $_POST["product"]; 
    $beschreibung = $_POST["beschreibung"];    
    
    $stunden = array("montag", "dienstag", "mittwoch", "donnerstag", "freitag", "samstag", "sonntag");   
    $data = array("mo", "di", "mi", "do", "fr", "sa", "so");
    
    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('Y-m-d-h-i-s');
            $eintrag = "INSERT INTO zeiten (taetigkeit, produkt, userid, beschreibung, zeit, datum, erstellt) VALUES ('$taetigkeit', '$produkt', '$userid', '$beschreibung', '$dauer', '$tag', '$erstellt')";
            $eintragen1 = mysql_query($eintrag);
        }        
    }
?>
^^ Wobei, ich merke gerade, der Einzeiler in formular.php ist ja idiotisch. :fresse: Da könnte ich ja gleich den Code aus projektzeiterfassung2.php einfügen und erspare mir schon wieder ein unnötiges File.
 
Zuletzt bearbeitet:
Zurück