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

  • Ersteller Ersteller boss3D
  • Erstellt am Erstellt am
hmm, ja ok. das ist pur php, stimmt. was mir jetzt spontan erstmal auffällt is das mit dem "taetigkeit".$a zeugs ^^ jetz versteh ich auch, wieso "ihr" das so komisch gelöst hattet. ihr vergebt quasi individuelle namen und baut diese dann später szs nach. dabei gibts doch diese praktische array "funktion" da: "taetigkeit[]" - fertig ^^ dann muss man nich $_POST["bla".$a] abfragen, es reicht ein $_POST["bla"][$a] - was darin gipfelt, dass man das schön in ner foreach abhandeln kann: foreach($_POST['bla'] as $bla)... so solltest dann auch das gesendete formular zeile für zeile abarbeiten um es in die db zu speichern dann.

so, ich hatte doch nochwas gesehn *dacht*

achja, das hier:
PHP:
$taetigkeit = $_POST["taetigkeit"];
$produkt = $_POST["product"]; 
$beschreibung = $_POST["beschreibung"];
egal ob $_POST gesetzt is oder nich, du fragst es ab. UND! du fragst was ab, was es garnich geben kann ^^ in dem code müsstest du eben $taetigkeit[$a] = $_POST["taetigkeit".$a]; abfragen - in einer schleife. und diese schleife handelst duja nich immer ab, sondern nur, wenn du es brauchst. ich schreib sowas eigentlich NUR hinter nem if(isset($_POST['button'])) zum bsp. genereller aufbau für mich: formulardaten verarbeiten (besagtes if isset - für alle buttons usw), dann das formular bauen.
 
Ja, das was du hier erwähnst, war eben noch die letzte offenen Baustelle, die wir hatten. Genau wegen den drei Zeilen habe ich noch Index Errors bekommen, weil Tessa, soweit ich's verstehe, die genannten Variablen in arrays umgewandelt hat, was aber natürlich in dem "Auslese-File" noch zu machen wäre ...

Die besagt Schleife wollte ich mir heute noch vornehmen (isset() ist mir auch bekannt). Ich denke mich da jetzt mal rein und poste dann das Ergebnis, sobald ich eines habe.
 
ich kritzel schonmal meine überlegungen zu den 2 select-boxen nieder ^^

grunsätzlicher aufbau schwebt mir folgendermaßen vor:
HTML:
<td><select name="taetigkeit" onselect="javascript:changeSelect();"...>...</select></td>
<td>
  <div id="produkt0">Tätigkeit wählen</div>
  <div id="produkt1" style="display:none"><select name="produkt1"...>...</select></div>
  <div id="produkt2" style="display:none"><select name="produkt2"...>...</select></div>
  ...
  <div id="produktn" style="display:none"><select name="produktn"...>...</select></div>
</td>
joa, sinn des ganzen und erklärung:
du baust EIN select für die tätigkeit, al optionen kommen da alle in der db enthaltenen tätigkeiten - wie gehabt. jede tätigkeit hat eine id (also in der db, aus der tabelle taetigkeiten) - genau diese wird als value übergeben. beim absenden des formulars kann man dann ganz easy die id auswerten (zudem soll die ja eh gespeichert werden ^^). so, desweiteren wird die id nun hier noch genutzt: bei den produkt selects. bis auf den default teil mit dem produkt0 (das wird "hardcoded" ausgegeben - beachte: KEIN display:none - also sichtbar) werden hier dann die produkte für jede tätigkeit gebaut. daher auch produkt.tätigkeit-ID als name. die db-id beginnt immer bei 1, daher kann man gemütlich die 0 als default nehmen. wenn man mal irgendwann die tätigkeit mit der id1 löscht, dann wird für die auch kein select mehr gebaut und es sähe von der reihenfolge eben so aus: produkt0 produkt2... ich will damit nur verdeutlichen, dass das KEINE zählvariable sein soll, sondern eben der index der tätigkeit, für die diese produkt-select-box gebaut ist.

gut, wir haben nun also in tabellen-zelle 1 unsere eine selectbox mit den tätigkeiten und in der 2. haben wir für jede tätigkeit ein div das jeweils eine selectbox für die produkte (für die jeweilige tätigkeit gefiltert) enthält. und von all diesen ist nur eine sichtbar - by default produkt0.

die tätigkeiten selectbox hat dann diesen aufruf für onselect - also wenn ich was aus tätigkeiten auswähle, wird unsere changeselect funke aufgerufen. und die soll folgendes tun: sie ließt (sofern das geht - ich hoffs ^^) die tätigkeiten selectbox aus - jede einzelne vorhandene option. sie ließt sie dessen value aus und sofern diese option die selektierte ist, wird das div mit der id produkt+value (wir erinnern uns, der value ist die tätigkeiten-id, und aus produkt und dieser id wurden die namen (später fürs auswerten des gesendeten formulars) und id's (für die auswertung per js) gebildet) derart manipuliert, dass nun display:block gilt. somit wird dieses div angezeigt. ist es NICHT die selektierte option, wird display auf none gesetzt (und damit das div wieder versteckt). damit wäre dann der wechsel auch geschafft.

was wir dafür noch brauchen, ist eine "verknüpfungs tabell" in der db. weis nich, ob du die schon hast. das wäre die tabelle (nennen wir sie mal taetigkeiten_produkte), in der eigentlich nur 3 spalten stehn: id, taetigkeiten-id und produkt-id. für jede tätigkeit werden für alle betreffenden produkte zeilen angelegt. hmm, blöd zu beschreiben - bsp ^^

wir haben die tätigkeiten 1 und 2 und die produkte 1 2 und 3. für tätigkeit 1 kann man produkte 1 und 2 wählen, für tätigkeit 2 allerdings dann die produkte 2 und 3. in tabellenform sähe es dann so aus:
1|1|1 // id1: zu tätigkeit1 gehört produkt1
2|1|2 // id2: zu tätigkeit1 gehört produkt2
3|2|2 // id3: zu tätigkeit2 gehört produkt2
4|2|3 // id4: zu tätigkeit2 gehört produkt3

jetzt müsste man quasi immer select * from taetigkeiten_produkte where taetigkeiten_id = "aktuelle tätigkeiten id". bzw eben erweitert, dass man auch den produktnamen hat: "SELECT * FROM taetigkeiten_produkte AS tp, produkte AS p WHERE tp.taetigkeiten_id = $taet_id AND p.ID = tp.produkt_id;" so glaub ich. dann kann man di zeile in etwa so bauen:
PHP:
echo '<div id="produkt'.$row['taetigkeiten_id'].'"><select name="produkt'.$row['taetigkeiten_id'].'">...</select></div>';
// bzw eben
echo '<option value="produkt'.$row['taetigkeiten_id'].'">'.$row['bezeichnung'] /* oder wie die spalte mit dem produktnamen in der produkte-tabelle heisst ^^ */ .'</option>';
aber ich würds warscheinlich eher so machen (man sollte immer versuchen, db-anfragen zu minimieren):
PHP:
// tätigkeiten-select bauen
$sql_t = "select * from taet...";
<select name="taetigkeiten" onselect...>
<option value="0">---------</option> // default-ausgabe
while(row...) {
  <option value="row_t[id]">row_t[name]</option>
  // also hier eben die options bauen, ABER zusätzlich hier schon die produkt-selecs bauen und in ner variable speichern
  $sql_p = select * from teat_prod...;
  $selectbox[$row_t[id]] = <div name="produkt0" style="display:none"><select name="produkte.$row_t[id]"...>
  while(row_p...)
    $selectbox[$row_t[id]] += <option value="row_p[id]">row_p[name]</option>
  $selectbox[$row_t[id]] += </select></div>
}
</select>
// produkt-selects bauen
<div name="produkt0">Tätigkeit wählen</div> // default-ausgabe
foreach($selectbox as $sb)
  echo $sb;
  // und hier eben diese erstellten variablen wieder ausgeben und in die tabellen-zelle einfügen
ich hoffe mal, es kommt raus, was ich meine. problem bis hierhin: für eine eingabezeile funzt das sicher, für mehrere mit integration ins js... müssmer mal schauen. abe das wäre so die basis als ausgangspunkt :)
 
So, die Schleife, wie ich mir das vorgestellt hätte:
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;
    
    $stunden = array("montag", "dienstag", "mittwoch", "donnerstag", "freitag", "samstag", "sonntag");   
    $data = array("mo", "di", "mi", "do", "fr", "sa", "so");
    
    if (isset($_POST['add'])) {
        $add = $_POST['add'];
        for ($a = 0; $a <= $add; $a++) {
            if (isset($_POST["taetigkeit"]) and isset($_POST["product"])) {
                $taetigkeit = $_POST["taetigkeit".$a];
                $produkt = $_POST["product".$a]; 
            }
            if (isset($_POST["beschreibung"])) {
                $beschreibung = $_POST["beschreibung"];
            } else {
                $beschreibung = "";
            }
            for ($a = 0; $a < 7; $a++) {
                $erstellt = date('Y-m-d-h-i-s');
                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, userid, beschreibung, zeit, datum, erstellt) VALUES ('$taetigkeit', '$produkt', '$userid', '$beschreibung', '$dauer', '$tag', '$erstellt')";
                    $eintragen = mysql_query($eintrag);
                }
            }
        }
    }
?>
Aber es werden leider keine Daten in die DB geschrieben. K. A. wo jetzt wieder der Hund begraben liegt. :huh:

Jedenfalls habe ich das so verstanden, dass in add die Anzahl der Zeilen gespeichert wird (in projektzeiterfassung.php) und ich mir über POST den Inhalt der add Variable auch in mein formular.php rüberholen kann?! Dort hätte ich dann eben eine Schleife so oft laufen lassen wie es Zeile gibt, immer schön mit isset() abfragen, ob überhaupt was in den Feldern der jeweiligen Zeile steht, und dann eben per INSERT ab damit in die DB. Aber irgendwo habe ich wohl einen Fehler drinnen ...
 
Zuletzt bearbeitet:
hmm, add ist bei dir quasi mein count, wenn ichs richtig sehe oder? mein problem ist: ich sehe hier weder anfang noch ende ^^ also wenn ich das richtig sehe, dann bekommt add einen wert aus den formular-daten und wandert wieder ins formular. aber es wird nie initialisiert. als nächstes... wenn du auf das vorhandensein von add prüfst, dann wird dat nix. du hast doch 2 buttons - newline und confirm (namentlich). wenn du einen von beiden drückst, wird das formular abgeschickt - und somit auch add. aber bei newline soll add garnicht ausgewertet werden. sprich: du fügst eine neue zeile zum eingeben hinzu und dabei wird schon zeug gespeichert. daher: prüfe auf buttons! if(isset($_POST['confirm']))... und hier brauchste dann nichmehr prüfen, ob add gesetzt ist. di form wurde abgeschickt, die daten sind da. man kann aufs richtige format achten usw, das geht, aber das vorhandensein ist gesichert.

ach ich seh gerade, du hast ja 2 formulare... ok gut, wenn du confirm drückst, wird das formular abgesendet, in dem de button ist. add ist aber in der anderen form ^^ also ist add garnicht gesetzt. lass einfach alles in einer form und gut ist (also in der "mitte" das </form>...<form...> weglassen). weil du brauchst add in beiden varianten. ist newline gesetzt, wird ne zeile angefügt und add inkrementiert, wurde confirm gedrückt, werden add datensätze in die db geschrieben.

aber wie gesagt: alles in allem brauchste das nichmal. mach aus tätigkeit.$a ein tätigkeit[] und rödel den kram einfach mittels foreach($_POST[tätigkeit] as t) ab. wobei, ne, müssen ja den key noch auslesen: foreach($_POST[tätigkeit] as $key => $t). und dann kannst du $ speichern und $_POST[produkte][$key] und $_POST[beschreibung][$key]...
 
^^ Sorry, aber aus dem Posting habe ich jetzt, glaube ich, gar nichts kapiert?!

echo '<br><form action="projektzeiterfassung.php" method="post">';
echo '</form>';
... soll ich löschen?

Die foreach Schleife ist mir auch nicht ganz geheuer. Da bleibe ich lieber bei for und .$a. Geht doch auch, oder? Und von welchem key redest du eigentlich? Meinst du den Index?

Ich kapiere auch gerade gar nicht, wie ich überhaupt an alle Daten kommen soll. Ich dachte, ich müsste jetzt erstmal per Schleife überprüfen, wie viele Zeilen überhaupt erzeugt wurden?! Und diese Anzahl habe ich doch nur in add?!
Und dann hätte ich eben so oft geprüft, welche Felder in jeder Zeile befüllt sind, und die Werte in die DB geschrieben.

:huh:

[EDIT]
Ich kann die newline Code-Zeilen nicht einfach in das andere <form> ... </form> mitreinpacken, weil das erste form ein php Script aufruft, das nur die Daten in die DB schreibt. Das zweite jetzige form hingegen ruft jenes Script auf, das die dynamische Zeile zusammenbaut.
 
Zuletzt bearbeitet:
Ja, das was du hier erwähnst, war eben noch die letzte offenen Baustelle, die wir hatten. Genau wegen den drei Zeilen habe ich noch Index Errors bekommen, weil Tessa, soweit ich's verstehe, die genannten Variablen in arrays umgewandelt hat, was aber natürlich in dem "Auslese-File" noch zu machen wäre ...

Die besagt Schleife wollte ich mir heute noch vornehmen (isset() ist mir auch bekannt). Ich denke mich da jetzt mal rein und poste dann das Ergebnis, sobald ich eines habe.

Die Lösung dafür habe ich auch bereits in einem meiner letzten Posts geschrieben ;)

Habe es jetzt nochmal aus POST 229 hier hin kopiert.

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

        
// hier könntest du danütlich noch mit if isset abfangen falls jemand versucht die Seite so aufzurufen. Ist aber nur von bedeutung wenn jemand die Seite direkt aufruft ohne das Formular zu benutzen.
    $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);
}
?>
 
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.
Wir haben in projektzeiterfassung.php ja schon 1 Index, der uns in formular.php bei den gleichnamigen Variablen fehlt. Und du willst, dass ich da jetzt trotzdem auch noch einen zweiten anhänge (wozu überhaupt)?!

Irgendwas verstehe ich hier komplett falsch ...

[EDIT]
Achso, du bist jetzt wieder in formular.php unterwegs. Okay, auf den ersten Blick ist dein Code, zumindest sinngemäß, aber gar nicht weit weg von dem, den ich gebastelt hatte. Die Indexe haben mir halt noch gefehlt, aber du löst das ebenfalls über eine Schleife mit add als Maximum.
 
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.

Bezieht sich auf den Array Ansatz von DarMo da müsste dann eben stehen $_POST['montag'][1] und da du 'montag' aus einem Array holst steht dann eben im Quelltext $_POST[$_Array[$index a]][$index b]-

Zu meinem Post oben. Natürlich musst du es über eine Schleife lösen. Du kannst es wenn du ein Array verwendest eben über eine foreach schleife Lösen, das mache ich persönlich aber eigentlich selbst bei arrays nie.
Oder eben über eine for Schleife. Dann brauchst du aber die Anzahl der einzutragenden Zeilen. Diese steht in $add und wird als hidden field vom Formular übermittelt.


Jedenfalls habe ich das so verstanden, dass in add die Anzahl der Zeilen gespeichert wird (in projektzeiterfassung.php) und ich mir über POST den Inhalt der add Variable auch in mein formular.php rüberholen kann?! Dort hätte ich dann eben eine Schleife so oft laufen lassen wie es Zeile gibt, immer schön mit isset() abfragen, ob überhaupt was in den Feldern der jeweiligen Zeile steht, und dann eben per INSERT ab damit in die DB. Aber irgendwo habe ich wohl einen Fehler drinnen ...

Kann nicht funktionieren. Die for Schleifen sind ja ineinander verschachtelt. Du kannst also nicht für beide die variable $a nehmen. Sonst wird ja bereits im Verlauf des ersten Durchlaufs in der zweiten Schleife $a derart erhöht, das die erste Schleife nach einem Durchlauf abbricht. Also muss eine Schleife eine andere Variable z.B. $b benutzen.
 
Zuletzt bearbeitet:
Ich versuche gerade zu verstehen, wozu jetzt eigentlich die ganzen Indexe nötig sind ...

Das $b gibt uns an, aus welcher Zeile wir gerade die Feldinhalte abfragen?!
Aber als zweiten Index hast du noch ein '' bzw. "" angehängt. Dessen Sinn erkenne ich nicht.

Übrigens kriegen wir noch:
Notice: Undefined index: add in C:\xampp\htdocs\db\formular.php on line 12
Ich traue mich wetten, dass ich das mit isset() wegkriegen würde, dann aber wieder keine Daten in die DB geschrieben werden würden.

[EDIT]
Nein, dann überträgt sich der Fehler auf das add in der for-Schleife.
 
Poste bitte mal den aktuellen Code von Projektzeiterfassung. Ich nehme an da fehlt das hidden field aus Post 229, sodass du garkeine $_POST['add'] übergibst.
 
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>
formular.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;  
    
    $add = $_POST['add'];

    for ($a = 1; $a <= $add; $a++) {
        $taetigkeit = $_POST['taetigkeit'.$a.''];
        $produkt = $_POST['product'.$a.'']; 
        $beschreibung = $_POST['beschreibung'.$a.''];    
    
        $stunden = array("montag".$a."", "dienstag".$a."", "mittwoch".$a."", "donnerstag".$a."", "freitag".$a."", "samstag".$a."", "sonntag".$a."");   
        $data = array("mo".$a."", "di".$a."", "mi".$a."", "do".$a."", "fr".$a."", "sa".$a."", "so".$a."");
    
        for ($b = 0; $b < 7; $b++) {
            if (isset($_POST[$stunden[$b]]) and $_POST[$stunden[$b]] != "" and isset($_POST[$data[$b]]) and $_POST[$data[$b]] != "") {        
                $dauer = $_POST[$stunden[$b]];
                $tag = $_POST[$data[$b]];
                $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);
    }
?>
Die Kombi liefert eben den Index Fehler wegen add ...
 
Genau das habe ich erwartet. Der Code stimmt nicht mit meinem COde aus 229 überein. Sicher ihn bitte mal in einer anderen Datei und verwende statt dessen den Code hhier

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>

Dieser Code sollte übrigens zeitgleich auch ein "eine Zeile entfernen" Button einrichten und er kommt mit einem Formular aus^^

Wenn die Datei jetzt nicht mehr projektzeirerfassung2 heißt, dann musst du die <form action="projektzeiterfassung2.php" method="post"> natürlich in <form action="formular.php" method="post"> ändern.
 
Zuletzt bearbeitet:
Du hast da ineinander verschachtelte Buttons drinnen, die keine Funktion zeigen. Ansonsten sehe ich keinen Unterschied zu meinem Code.

Capture.JPG

Ich versuche mal, die Buttons zu trennen, aber wieso die nichts machen, sehe ich noch nicht.

[EDIT]
Jetzt hätte ich mal die Buttons getrennt. "Bestätigen" ruft auch das formular.php auf, es werden aber keine Daten in die DB geschrieben. Und die add und rem Buttons zeigen gar keine Wirkung, auch wird deren Beschriftung nicht angezeigt.

Statt type="button", type="submit" sagen, sollte ich lieber nicht, oder?
 
Zuletzt bearbeitet:
Na da sind schon ein paar unterschiede drinn. Das wirst du feststellen sobald die Buttons funktionieren. Notfalls können wir die Funktion auch als Link testen.

Also erweiter die Buttons bitte mal um eine</button> und schreibe und Schreibe den Text aus Value jeweils zwischen den öffnenden und schließenden tag

Edit:

Also
PHP:
 echo '<button name="add" type="button" value="Zeile hinzufügen" onclick="window.location.href=\'/projektzeiterfassung.php?add='.$add.'\'">Zeile hinzufügen</button> ';
    echo '<button name="rem" type="button" value="Zeile entfernen" onclick="window.location.href=/projektzeiterfassung.php?rem='.$add.'\'">Zeile entfernen</button> ';

Habe den code in diesem Beitrag jetzt nochmal editiert. Das Problem sollte dadurch behoben sein
 
Zuletzt bearbeitet:
Okay, damit schaut's schon mal nach was aus:

Capture.JPG

Allerdings passiert bei den beiden Buttons halt noch nichts ...

[EDIT]
Laut neuester Fehlermeldung sind zuviele = in deinem Code. Sieht man ja auch hier im Forum schon, dass das farblich unterschiedlich gewertet wird.
 
PHP:
echo '<button name="add" type="button" value="Zeile hinzufügen" onclick="window.location.href=\'projektzeiterfassung.php?add='.$add.'\';">Zeile hinzufügen</button> ';
    echo '<button name="rem" type="button" value="Zeile entfernen" onclick="window.location.href=\'projektzeiterfassung.php?rem='.$add.'\';">Zeile entfernen</button> ';

Das Problem ist das Buttons nur mit JavaScript funktionieren. Habe das mal geändert. Hoffe das alle '' richtig maskiert sind. Wenn man ganz auf JavaScript verzichten möchte muss man einen Link nehmen und Ihn aussehenlassen wie einen Button. Wir haben hier aber einen Button der funktioniert wie ein Link ;)


Ich hatte noch ein ; vergessen, habe das noch eingefügt.
 
Zuletzt bearbeitet:
Es wird immer "lustiger":

Capture.JPG

Was sollte denn dieses window.location.href machen?
Ja, auf projektzeiterfassung.php verweisen, aber wieso so?

[EDIT]
'localhost/db/projektzeiterfassung.php' zu sagen, hilft auch nicht.
 
Ja es soll die seite selber aufrufen. Allerdings erweitert um einen GET parameter. Zumindest funktioniert der Link an sich schonmal.

Was steht denn in der Browserzeile bei der Fehlermeldung? Wenn du den Code verwendest der grade editiert in POST 257 steht.
 
Zurück