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

  • Ersteller Ersteller boss3D
  • Erstellt am Erstellt am
@ Tessa
So schaut's aus. Ich brauche was, das ich verstehe ... und das ist ATM nur mein eigener Code (bestehend aus zig Files). Nur wenn ich mir alles halbwegs selber zusammenbastle, komme ich auch irgendwie weiter. Wenn ich jetzt irgendwelche langen Codes von euch hernehme, die schon fast alles machen, dann kenne ich mich gar nicht mehr aus und weiß auch nicht, wo und wie ich da weitermachen soll. Bei meinen eigenen erkenne ich wenigstens die Baustellen ...
--------------

Die userid würde ich mir jetzt aber schon gerne in "zeiten" auch noch vor jedem Eintrag hinzufügen, gemäß deinem Vorschlag, DarkMo. Aber siehe mein voriges Posting: Will irgendwie nicht ... :huh:
 
PHP:
$user = $_SESSION['name'];   
$id = "SELECT id FROM user WHERE name=$user";
$userid = mysql_query($id) or die ("Get User-ID failed.<br>".mysql_error());


Du hast versucht die Variable $user; abzufragen die Variable heißt aber $user ;)

Copy&Past is not your friend while Coding PHP.
 
^^ So hatte ich's ja eh am Anfang, aber da kommt:
Get User-ID failed.
Unknown column 'test' in 'where clause'
Bei meiner letzten Version kriege ich immerhin schon mal ne Zahl, aber leider eben "0" ...
 
Die Fehlermeldung liefert alles was wir brauchen.

PHP:
$user = $_SESSION['name'];    
$id = "SELECT id FROM user WHERE name= '".$user."'";
$userid = mysql_query($id) or die ("Get User-ID failed.<br>".mysql_error());



Denn er denkt "test" ist ein Spaltenname also fehlen die ' '
 
Ja, das habe ich eh schon alles so in meiner Version. Die "funktioniert" zwar, liefert aber eine falsche id ...

Hier nochmal mein Code (liefert id=0 statt id=1 für User "test"):
PHP:
$user = $_SESSION['name'];   
$userid = mysql_query("SELECT id FROM user WHERE name='".$user."'") or die ("Get User-ID failed.<br>".mysql_error());
 
Ok kannst du mal ein Screeni von der USER DB liefern?

und nimm bitte mal folgenden Code

PHP:
$user = $_SESSION['name'];   
$ergebnis = mysql_query("SELECT id FROM user WHERE name='".$user."'")
$row = mysql_fetch_object($ergebnis);
$userid = $row->id;
 
Zuletzt bearbeitet:
User Tabelle?! ;)

Unbenannt.PNG
 
ok, ihr habt scho wieder zig dinger gepostet, daher zieh ich mein edit mal raus ^^


@tessa,
mein codebeispiel ausm anhang ist mehr als simpel ^^ einfach nur echos überall und das wars im groben schon. 3 ifs und ne forschleife runden alles ab. das problem ist (aus meiner sicht), dass "Registrieren->Login->variable Anzahl an Datensätze erstellen->diese Anzahl In Datenbank Eintragen" kein simples porjekt ist :P das ist schon weiter gedacht. am besten fängt man gaaaaanz simpel an. eben wie beim bsp. die grundlagen sind da, und jetzt wird verfeinert. anstelle des hiddencounters wird die db-abfrage eingebaut und diese ausgegeben, statt dem sinnlos "$i. Eintrag" geblubber. dann wird bei den if's für add und del button der code ausgebaut, dass man eben genau jene funktionen erreicht. auch noch sehr sehr simpel. schon hat man die basics umgebaut auf ein funktionierendes db-basic "prog". jetzt kann man schonmal mit css die tabelle ordentlich darstellen, geht ja fix und ändert sich ned alle fötz lang ^^

weiterhin kann man dann ein javascript für die dropdowns bauen, das wird schon anspruchsvoller. also dass eben die produkte sich an die tätigkeiten anpassen bla. is bissl gefummel, aber machbar. dann kann man eine edit funktion einbauen. entweder löst mans so, dass man in jeder zeile inputfelder hat, die per css einfach nich so aussehen, und per add klick werden die mit ner weiteren javascript funke "plötzlich" zu echten inputs (einfach die css class wechseln lassen) - kann aber durchaus anspruchsvoll sein, ist aber sicher ein hübsches ergebnis - oder man machts wieder per php und der buttonklick (name bspw edit) lässt die seite erneut laden, nur dass diesmal die gewünschte zeile eben mit inputs generiert wird zum editieren. weiterer klick (button name nun bspw editfinal) und es wird in die db geschrieben. wäre das thema auch erledigt. wie schon in nem anderen post angemerkt, kann man sich überlegen, ob man die zusammengehörigen zeilen zusammenfassen mag. ich geh ja grad von der simplen aber effektiven lösung aus, dass jedes datum einen eigenen eintrag erzeugt, auch wenn sie in der exeltabelle in der selben zeile stehen würden. und diesen unterschied ausmärzen, wäre ein weiterer schritt.

das kann man dann immer weiter fortführen, schritt für schritt. da kann man dann auch drüber nachdenken, wie man eine "multi-add" funktion, wie boss sie scheinbar jetzt schon versucht umzusetzen - tatsächlich umsetzen kann.

generell, würde ich eine schritt für schritt methode vorschlagen wollen. html und css sind ja hoffentlich kein problem, das jetz in php zu integrieren sollte das kleinste problem sein. aus html-mit-css wird einfach echo "html-mit-css". also anfangs auf diese elemente beschränken und bei den einfachen geschichten, kann man auch schonmal mit js experimentieren und das zusätzlich reinbauen. man kann durch php ja auch je nach situation und bedürfnis dynamisch seinen js-code basteln. so als bsp. es is ja überhaupt nix anderes wie in allen anderen sprachen auch, wo man frei schnautze irgendwelche bunten texte dynamisch zusammenkleistert. nur das hier der text halt html usw ist. und wenn man das dann mal lauffähig hat, kann man auch gerne mal überlegen, ob man da mal bissl umbaut und probiert das ganze mit ajax zu gestalten, so dass nich laufend die seite neu geladen werden muss.

aber gleich zu anfang son krudes zeugs... das kann doch nix werden ><




und wegen "ellenlangen codes" - nich angeschaut? hier ist der ganze quellcode :P
PHP:
<?php
  echo '<html><head><title>beispiel</title></head><body>';
  
  $count = 0;
  $output = ' ';
  
  if(isset($_POST['count'])) $count = $_POST['count'];
  if(isset($_POST['btnAdd'])) { $count++; $output = 'Simulation: Eintrag in DB erstellt!'; }
  if(isset($_POST['btnDel'])) { $count--; $output = 'Simulation: Eintrag aus DB gelöscht!'; }

  echo '<p>'.$output.'</p>';
  
  echo '<form action="zeit.php" method="post">';
  echo '<table border="1">';
  echo '  <tr>';
  echo '    <td>eine Tabelle</td>';
  echo '    <td border="0"></td>';
  echo '  </tr>';
  
  for($i = 0; $i < $count; $i++) {
    echo '  <tr>';
    echo '    <td>'.($i + 1).'. Eintrag</td>';
    echo '    <td><input type="submit" value="del" name="btnDel"></td>';
    echo '  </tr>';
  }

  echo '  <tr>';
  echo '    <td>add Entry</td>';
  echo '    <td><input type="submit" value="add" name="btnAdd"></td>';
  echo '  </tr>';
  echo '</table>';
  echo '<input type="hidden" value="'.$count.'" name="count">';
  echo '</form>';
  
  echo '</body></html>';
?>
die datei war nur als anschauungsbsp mitgeliefert, da man vom reinen code halt ned unbedingt sieht, was es macht.
 
das problem ist (aus meiner sicht), dass "Registrieren->Login->variable Anzahl an Datensätze erstellen->diese Anzahl In Datenbank Eintragen" kein simples porjekt ist :P das ist schon weiter gedacht.
Ich muss das machen, was der Auftraggeber haben will und da gehört ein Login-System dazu. Dass ich keine wirklichen php-Kentnisse habe, weiß er eh, aber die Aufgabe ist nun mal so. Deswegen habe ich ja auch so "lange" für das Projekt Zeit, eben um mich einarbeiten zu können.
aus html-mit-css wird einfach echo "html-mit-css"
Damit habe ich schon ein bisschen rumprobiert, hat aber nie wirklich funktioniert. Entweder mein style="whatever" wurde einfach nicht übernommen, oder er hat mir in den Dropdowns die obersten Einträge gelöscht.
und wegen "ellenlangen codes" - nich angeschaut? hier ist der ganze quellcode :P
Da hatte ich eigentlich den von Tessa mit dem Switch gemeint. Deinen habe ich mir schon angeschaut, aber ich bin noch damit beschäftigt, die Probleme in meinem zu lösen.

Mein Ziel wäre jetzt eben, bis morgen Abend das gesamte Eingabeformular fertig zu haben. Dazu braucht's eben noch eine optische Formatierung der Zellenbreite der dynamischen Zeile und das mehrfache Funktionieren meines Buttons. Dann ist Halbzeit. Am WE will ich mich dann richtig in deine/eure Beispiele reindenken.
Und ab nächster Woche bin ich dann hoffentlich so weit, dass ich die zweite Halbzeit zum Basteln des "Gegenstücks" hernehmen und das dann hoffentlich auch weitestgehend selber schaffen kann. Das soll dann eine zweite Website nur für den Admin werden, auf der dieser Daten aus der DB von allen MAs abfragen und sich anzeigen lassen kann. Da sollte ich dann auch noch einen export-to-Excel reinbasteln, sodass das dann in Excel hoffentlich wieder halbwegs vernünftig dargestellt wird.
 
Ok also das mit dem kein Simples Projekt, das Login etc.

wenn ich so an mein Anfänge zurückdenke, dann ist es das vermutlich wirklich nicht. Ich habe damals mit einer News Funktion für eine Website angefangen. (Eintag erstellen -> in DB Eintragen -> Aus DB Ausgeben -> Nach 9 Neuen Einträgen Eintrag löschen.)

Ich habe auch beruflich nie was mit Programmieren zu tun gehabt x-D. Das was ich weiß habe ich eben durch Coden "gelernt". Jedes Projekt wieder ne Stufe schwerer oder eben effizienteren Code und seit nunmehr 2 Jahren arbeite ich jetzt an einem Browsergame.
 
Es kommt zwar keine Fehlermeldung, aber irgendwas haben "wir" trotzdem verpfuscht. Es landen nämlich keine Einträge mehr in der DB. Hier nochmal alles:
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, user, userid, beschreibung, zeit, datum, erstellt) VALUES ('$taetigkeit', '$produkt', '$user', '$userid', '$beschreibung', '$dauer', '$tag', '$erstellt')";
            $eintragen1 = mysql_query($eintrag);
        }        
    }
?>
[EDIT]
Stimmt schon. "user" hatte ich in der "zeiten" Tabelle schon gelöscht, wo wir die Identifikation jetzt nur noch über die ID machen, allerdingst stand der noch im INSERT drinnen. *facepalm*
--------------

Also gut, wie soll ich jetzt wirklich zu einer mehrfachen Zeilenausgabe kommen? Javascript? Was anderes?

Am einfachsten wär's wohl, den Fehler in Tessa's vier Zeilen zu finden, wenn das sonst prinzipiell so ginge ...
Code:
    function interpretRequest() {
        var ContNeu= request.responseText;
        var ContAlt = document.getElementByID('content').innerHTML;
        var content = ContAlt + ContNeu;
        document.getElementById('content').innerHTML = content;
    }
oder man machts wieder per php und der buttonklick (name bspw edit) lässt die seite erneut laden, nur dass diesmal die gewünschte zeile eben mit inputs generiert wird zum editieren.
Was ist denn hier eigentlich das genaue Problem bei mir? Der Button funktioniert ja, allerdings ersetzt er immer die eine Zeile, die er beim ersten Klicken erstellt, mit einer weiteren, anstatt die darunter anzufügen. Blöd gefragt, aber kann ich nicht einfach "an der richtigen Stelle" irgendwo ein <br> einfügen und das Problem wäre gelöst???

Oder irgendwo ne kleine "Abfrage" basteln, die ermittelt, wo auf der Hompage die erste Zeile endet, und dann dem Javscript sagt "Füge die nächste Zeile an Position+1 ein"?
 
Zuletzt bearbeitet:
Ich muss das machen, was der Auftraggeber haben will und da gehört ein Login-System dazu. Dass ich keine wirklichen php-Kentnisse habe, weiß er eh, aber die Aufgabe ist nun mal so. Deswegen habe ich ja auch so "lange" für das Projekt Zeit, eben um mich einarbeiten zu können.
mir gings eher um das "variable Anzahl an Datensätze erstellen" ^^ geht sicherlich, aber sowas is immer ne ganze ecke denkarbeit. wobei man hier warscheinlich mit diesem namens.array zeugs arbeiten kann. das mit dem login is sicher auch ned leicht, aber mMn eben eine notwendigkeit, das zweifel ich daher überhaupt nicht an :)

Damit habe ich schon ein bisschen rumprobiert, hat aber nie wirklich funktioniert. Entweder mein style="whatever" wurde einfach nicht übernommen, oder er hat mir in den Dropdowns die obersten Einträge gelöscht.
das is halt auch so ein punkt - wieso? wenn ich echo "hallo welt" schreibe, dann kommt da einfach kein "allo welt" bei raus ^^ also da muss irgendwas anderes schief laufen. vllt nen < oder so vergessen, passiert mir auch oft. hatte bei meinem bsp den form-tag nicht abgeschlossen und mich gewundert, warum er alles in eine zeile klatscht ^^

Da hatte ich eigentlich den von Tessa mit dem Switch gemeint. Deinen habe ich mir schon angeschaut, aber ich bin noch damit beschäftigt, die Probleme in meinem zu lösen.
hier stellt sich mir eben die grundsätzliche und dringende frage: lohnt sich das überhaupt? das is alles so dermaßen verwurschtelt und unnötig kompliziert :/ also wenn das immernoch so aussieht wie das, was du da mal angehängt hattest.

Mein Ziel wäre jetzt eben, bis morgen Abend das gesamte Eingabeformular fertig zu haben. Dazu braucht's eben noch eine optische Formatierung der Zellenbreite der dynamischen Zeile und das mehrfache Funktionieren meines Buttons. Dann ist Halbzeit. Am WE will ich mich dann richtig in deine/eure Beispiele reindenken.
das sind zum bsp probleme, bei denen ich mich einfach nur frag, wie du das hinbekommst :P wie gesagt, alles viel zu verwurschtelt, da blickt doch keiner mehr durch ^^ also das is jetz mein problem dabei, ich hab keinen blassen, was das alles sein soll, wieso weshalb warum. ich kann dir daher auch nicht wirklich speziefisch irgendwo helfen. ich find den ganzen code einfach schrecklich ><

Und ab nächster Woche bin ich dann hoffentlich so weit, dass ich die zweite Halbzeit zum Basteln des "Gegenstücks" hernehmen und das dann hoffentlich auch weitestgehend selber schaffen kann. Das soll dann eine zweite Website nur für den Admin werden, auf der dieser Daten aus der DB von allen MAs abfragen und sich anzeigen lassen kann. Da sollte ich dann auch noch einen export-to-Excel reinbasteln, sodass das dann in Excel hoffentlich wieder halbwegs vernünftig dargestellt wird.
wozu brauchst du ein gegenstück? wenn es nur mitarbeiter und den admin gibt, ist das ne ganz simple geschichte: erweitere deine user-tabelle um die spalte "Rechte" oder wie auch immer und gib dem admin da ne 1 und den anderen allen ne 0. und abhängig davon baust du dann die seite auf. zum bsp sowas:
PHP:
// get user data - irgendwo ganz oben
$admin = false;
if($row['Rechte'] == 1) $admin = true;

// ...

// select table-content - also die einträge zum anzeigen
if($admin) $sql = "SELECT t.Bezeichnung AS tBez, p.Bezeichnung AS pBez, u.Name AS uName   FROM zeiten AS z, user AS u, tätigkeiten AS t, produkte AS p  WHERE  z.User-ID = u.ID AND z.Tätigkeit-ID = t.ID AND z.Produkt-ID =  p.ID AND z.Datum > '".$wochenanfang."' AND z.Datum <= '".$wochenende."';"
else $sql = "SELECT t.Bezeichnung AS tBez, p.Bezeichnung AS pBez, u.Name AS uName   FROM zeiten AS z, user AS u, tätigkeiten AS t, produkte AS p  WHERE  z.User-ID = u.ID AND z.Tätigkeit-ID = t.ID AND z.Produkt-ID =  p.ID AND  z.User-ID = '".$aktueller_user."' AND z.Datum > '".$wochenanfang."' AND z.Datum <= '".$wochenende."';"
// der "user-filter" wird beim admin weggelassen bspw
$res = ....
// baue tabelle mit abfrage-daten...
das wäre jetzt ein simples beispiel. oder wenn es "erweiterbar" sein soll, isses von der logik her vllt günstiger, dem admin die 0 zu geben. kleinste zahl = höchste rechte oder so.
 
nur mal für mich zum mitmeiseln: WAS willst du jetzt genau hier bewirken?
Code:
function interpretRequest() {
  var ContNeu= request.responseText;
  var ContAlt = document.getElementByID('content').innerHTML;
  var content = ContAlt + ContNeu;
  document.getElementById('content').innerHTML = content;
}
also ich hab mir das (vom zuhören) so zusammen gereimt:
du möchtest deiner tabelle mit dem button-klick eine zeile hinzufügen. der buttonklick ruft allerdings eben diese js funktion auf und lädt nicht die seite neu (und sendet somit auch nicht das formular). ist das richtig?

dann die nächste frage: was ist content für ein element? also irgendwas bei dir hat ja ein id="content" dran - was?

und die vorerst letzte frage: was ist request.responseText; ^^ was für daten holt er sich da? woher?
 
hier stellt sich mir eben die grundsätzliche und dringende frage: lohnt sich das überhaupt? das is alles so dermaßen verwurschtelt und unnötig kompliziert :/ also wenn das immernoch so aussieht wie das, was du da mal angehängt hattest.
Der Code von Tessa war mir auch zu kompliziert, aber ich habe den dann eben deswegen eh nicht verwendet. Ihr/Sein Code macht halt mehrere Dinge auf einmal, die ich auf mehrere Files verteilt habe (und dadurch noch die Übersicht habe).
das sind zum bsp probleme, bei denen ich mich einfach nur frag, wie du das hinbekommst :P wie gesagt, alles viel zu verwurschtelt, da blickt doch keiner mehr durch
Ich finde das jetzt nicht unüberschaubar.

Hier, ganz einfach --> dynamictable.php macht nichts anderes, als einfach die gesamte Zeile zu bauen (ist sogar Code von dir drinnen ;)):
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;
        }

    echo '<table>';

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

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

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

    echo '<td><input name="montag" type="text" size="10" maxlength="5""></td>';
    echo '<td><input name="dienstag" type="text" size="10" maxlength="5"></td>';
    echo '<td><input name="mittwoch" type="text" size="10" maxlength="5"></td>';
    echo '<td><input name="donnerstag" type="text" size="10" maxlength="5"></td>';
    echo '<td><input name="freitag" type="text" size="10" maxlength="5"></td>';
    echo '<td><input name="samstag" type="text" size="10" maxlength="5"></td>';
    echo '<td><input name="sonntag" type="text" size="10" maxlength="5"></td></tr></table><br>';
?>
Und in projektzeiterfassung1.html wird der Inhalt dieses ganzen php-Files einfach nur durch das Javascript reingeholt und dann an der Stelle von "content" ausgegeben:
Code:
<!doctype html>
<html>
<head>
<meta charset="ISO-8859-1">
<link rel="stylesheet" type="text/css" href="style.css">
<title>Projektzeiterfassung</title>
<br><script type="text/javascript">
    var request = false;

    function setRequest() {
        request = new XMLHttpRequest();
        
        if (!request) {
            alert("Kann keine XMLHTTP-Instanz erzeugen");
            return false;
        } else {
            var ContNeu= request.responseText;
            var ContAlt = document.getElementByID('content').innerHTML;
            var content = ContAlt + ContNeu;
            document.getElementById('content').innerHTML = content;
        }
    }
    
    function interpretRequest() {
        var content = request.responseText;
        document.getElementById('content').innerHTML = content;
    }
</script>
</head> 
<body>
<form action="formular.php" method="post">
    <br><h1>Projektzeiterfassung</h1>
    <table>
        <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>
    </table><br>    
    <div id="content"></div>
    <div class="submit"><input type="button" onClick="javascript:setRequest()" value="Neue Eingabezeile hinzufügen"></div><br>
    <div class="submit"><input type="submit" name="confirm" value="Bestätigen"></div>
</form> 
</body>
</html>
wozu brauchst du ein gegenstück? wenn es nur mitarbeiter und den admin gibt, ist das ne ganz simple geschichte: erweitere deine user-tabelle um die spalte "Rechte" oder wie auch immer und gib dem admin da ne 1 und den anderen allen ne 0. und abhängig davon baust du dann die seite auf.
Okay, so geht's natürlich auch. Aber warum einfach, wenn's auch kompliziert geht? :fresse:
--------------

Jedenfalls wäre das jetzt meine aktuelle Frage:
Was ist denn hier eigentlich das genaue Problem bei mir? Der Button funktioniert ja, allerdings ersetzt er immer die eine Zeile, die er beim ersten Klicken erstellt, mit einer weiteren, anstatt die darunter anzufügen. Blöd gefragt, aber kann ich nicht einfach "an der richtigen Stelle" irgendwo ein <br> einfügen und das Problem wäre gelöst???

Oder irgendwo ne kleine "Abfrage" basteln, die ermittelt, wo auf der Hompage die erste Zeile endet, und dann dem Javscript sagt "Füge die nächste Zeile an Position+1 ein"?
--------------
nur mal für mich zum mitmeiseln: WAS willst du jetzt genau hier bewirken?
Ich glaube, Tessa's Idee damit war, die eine Zeile zu speichern und beim nächsten Button-Klick dann schon zwei Zeile ausgeben, wobei die obere die ursprüngliche Zeile überschreibt?! Damit habe ich aber trotzdem 2. Und dann so weiter mit weiteren Zeilen?! Wobei die vom User schon in Zeile eingegebene Daten natürlich nicht verloren gehen sollten! Wird das in dem Code irgendwo gespeichert, was schon in einer Zeile steht? K. A.
du möchtest deiner tabelle mit dem button-klick eine zeile hinzufügen. der buttonklick ruft allerdings eben diese js funktion auf und lädt nicht die seite neu (und sendet somit auch nicht das formular). ist das richtig?
Nach meinem Verständnis, ja.
dann die nächste frage: was ist content für ein element? also irgendwas bei dir hat ja ein id="content" dran - was?
Was meinst du mit "Element"? Ich habe mir das immer als "Platzhalter" vorgestellt, der durch den Inhalt von dynamictable.php, die durch das Javascript aufgerufen wird, ersetzt wird?!
und die vorerst letzte frage: was ist request.responseText; ^^ was für daten holt er sich da? woher?
Ich habe keine Ahnung, ich kann kein Javascript. Der Code ist aus dem Web, und dann von Tessa zu erweitern versucht worden. Ich weiß nur, dass der Code in der originalen Version (also vor Tessa's Erweiterung) funktioniert.
 
Zuletzt bearbeitet:
aaaaah, jetz versteh ich auf anhieb so manches problem :fresse: wie gesagt, absolut unnötig kompliziert. du nutzt php und lässt dir irgendwelchen krempel durch JAVASCRIPT?! reinladen? bitte? xD

zumal du den "tabellenkopf" als ne abgeschlossene tabelle behandelst und den "inhalt" der tabelle als neue tabelle untendrunter klatscht - is doch klar, dass dir hier keinerlei einheitliche formatierung gelingt. ich hab grad dieses tisch->kopf syndrom xD

und bitte frag jetzt nicht, wie du ohne js dein php krams da rein bekommen sollst. benenn deine htm in php um, belass alles wie es ist bis auf eines: mach aus
Code:
<div id="content"></div>
einfach ein
Code:
<?php
   include('meinen-php-kram');
?>

das ändert noch rein garnix an deinen problemen, aber du hast schonmal das selbe gekonnt ohne js. wenn du jetzt anstatt des includes einfach deinen code direkt da reinbastelst - fertig. haste immernoch html und php getrennt, aber eben in einem. das is wie gesagt völlig unnötig. nun zu der tabelle:
dein </table> aus der ehemaligen htm verschiebst du UNTER deinen content div. bei deinem php teil hingegen löscht du die table-tags. damit sollte das problem schonmal gelöst sein, nun hast du EINE tabelle und fertig.

jetzt ergibt sich zumindest schonmal ne weitere antwort: was ist dieses content teil ^^ gut, jetzt bleibt mir eben die frage, was ist dieses request gedöhns. wenn da ne tabellenzeile rein soll, dann wird das so nich gehn (ob das überhaupt geht? kA ^^). ich bin gespannt :ugly:
 
Na, das schaut doch endlich mal was z'gleich ... :daumen:
PHP:
<!doctype html>
<html>
<head>
<meta charset="ISO-8859-1">
<link rel="stylesheet" type="text/css" href="style.css">
<title>Projektzeiterfassung</title>
<script type="text/javascript">
    var request = false;

    function setRequest() {
        request = new XMLHttpRequest();
        
        if (!request) {
            alert("Kann keine XMLHTTP-Instanz erzeugen");
            return false;
        } else {
            var ContNeu= request.responseText;
            var ContAlt = document.getElementByID('content').innerHTML;
            var content = ContAlt + ContNeu;
            document.getElementById('content').innerHTML = content;
        }
    }
    
    function interpretRequest() {
        var content = request.responseText;
        document.getElementById('content').innerHTML = content;
    }
</script>
</head> 
<body>
<form action="formular.php" method="post">
    <br><h1>Projektzeiterfassung</h1>
    <table>
        <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;
        }

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

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

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

    echo '<td><input name="montag" type="text" size="10" maxlength="5""></td>';
    echo '<td><input name="dienstag" type="text" size="10" maxlength="5"></td>';
    echo '<td><input name="mittwoch" type="text" size="10" maxlength="5"></td>';
    echo '<td><input name="donnerstag" type="text" size="10" maxlength="5"></td>';
    echo '<td><input name="freitag" type="text" size="10" maxlength="5"></td>';
    echo '<td><input name="samstag" type="text" size="10" maxlength="5"></td>';
    echo '<td><input name="sonntag" type="text" size="10" maxlength="5"></td></tr><br>';
?>
    </table><br>
    <div class="submit"><input type="button" onClick="javascript:setRequest()" value="Neue Eingabezeile hinzufügen"></div><br>
    <div class="submit"><input type="submit" name="confirm" value="Bestätigen"></div>
</form> 
</body>
</html>
Unbenannt.PNG

Was ich jetzt aber noch nicht verstanden habe: Das "<div id="content"></div>" sollte ich durch den php-Code ersetzen?! Damit kann ich auch das Javascript rausschmeißen, oder? Ohne das "content" tut das eh nichts mehr. Allerdings, wie soll ich jetzt wirklich weitere Zeilen dazukriegen?
 
Zuletzt bearbeitet:
Was meinst du mit "Element"? Ich habe mir das immer als "Platzhalter" vorgestellt, der durch den Inhalt von dynamictable.php, die durch das Javascript aufgerufen wird, ersetzt wird?!
ich bin da jetzt auch kein hecht mit, aber soweit bin ich da schon durchgestiegen:
du hast bei html ja verschiedene tags - also besagte "elemente". ein div-container (wie bei dir genutzt) ist zum bsp so ein element. per javascript kann man dadrauf eben zugreifen. man kann parameter ändern (zum bsp die css-klasse abändern) oder auch den inhalt ändern (was hier versucht werden soll) -> das wäre das innerhtml. also <div>innerHTML</div>. WIE man jetzt auf dieses element zugreift... da gibts wohl verschiedene wege. ich glaube man kann in einer art "array-verfahren" zugreifen - also nach der reihenfolge des auftauchens im html-"code". meinetwegen sowas hier: <div></div><p></p> - da kann man mittels (erfunden) document (meint eben die html seite), also document.element[0] -> auf das div zugreifen, mit [1] hätte man das p ding. wie gesagt, ich glaube, so in der art geht das. auch kann man sich so durch ne art hierarschie durcharbeiten. also ein p im div, da müsste man quasi document.div.p - so in etwa drankomen. das ist alles sicher weit entfernbt von der wahrheit, aber so in etwa kann man sichs galube vorstellen. das is halt alles ebbes umständlich und meistens wird eben das mit der id genutzt. du gibst deinem teil da einfach ne id (<div id="bla">...</div>) und kannst dann mittels document.getElementByID("bla") drauf zugreifen - fettich issed. document.getElementByID("bla").innerHTML wäre dann eben in diesem bsp einfach ... ^^

gut, was bedeuted das jetzt also? du hast dieses div und da sollen deine zeilen rein. einfachste lösung: du baust da jetz immer ne tabelle rein mit einer eingabezeile. bei 3 "zeilen" haste halt 3 tabellen mit je einer zeile. das geht definitiv - aber schön is was anderes. grundfunktionsweise: du baust dir einmal hardcoded eine tabelle als string und speicherst das eben in ner variablen. das ersetzt dann das ContNeu. das soll nämlich das sein, was immer hinzugefügt wird. kannst es ja mal ganz simpel in der art testen:
Code:
var ContNeu= "<table><tr><td>test</td></tr></table>";
var ContAlt = document.getElementByID('content').innerHTML;
var content = ContAlt + ContNeu;
document.getElementById('content').innerHTML = content;
bei jeden klick (sofern das funzt) sollte er eine tabelle mit einer zelle in der test steht reinmeiseln. eine unter die andere. bei den inputs kannst du dann wie gesagt mal testen, ob es einfach mit name="name[]" funzt. sollte eigentlich. aber da haste dann halt wie gesagt immer einzeltabellen. kannst ja mal googlen, ob man tabellenzeilen mittels js adden kann. wenn nich, müssmer mal schauen, was wir machen. ich muss aber erstmal los :/

edit: wegen dem content div - lass es testweise erstmal drin, damit wir weiter spielen können. dein php zeugs, was das ersetzen sollte, ist ja (dacht ich) eher für die ausgabe der db daten, dein content-div aber für die erstellung der eingabemaske.
 
Also das Tisch Kopf hatte ich schon früher. Da ist aber noch ein Denkfehler von dir drinn Mo ;)

Denn wenn er sein JavaScript verwendet braucht er genau dieses <div id="content">Platzhalter</div>
Sein JavaScript ist eben AJAX das heißt er führt einen HTTP Request aus ohne dabei die Seite neu zu laden, das Ergebnis des Requests wird dann im Platzhalter (<div id="content"></div>) in die bestehende Website eingesetzt. Der von Ihm verwendete Befehl (document.getElementById('content').innerHTML = content;) hat aber die Angewohnheit das er den gesamten Inhalt des Platzhalters ersetzt und eben nichts an diesen anhängt.
Das PHP Script wird nicht in die Seite included, es wird lediglich am Server ausgeführt und das Ergebnis in ein bestehendes "html" Dokument Clientseitig eingesetzt.
Ein Include würde hingegen den PHP Code in ein bestehendes PHP Dokument einbinden und das Gesamtergebnis ausgeben. Also alles Server Seitig.

Ergo musst du in diesem Fall die gesamte Website neu laden damit der User das Ergebnis sehen kann.(hierdurch würden auch die Nutzer eingaben verloren gehen, außer du pufferst Sie entsprechend zwischen. Das tut er aber bisher nirgends.)

Der Code oben wurde von mir so angepasst das er den Inhalt der Bereits zwischen den DIV tags steht in einer Variable Speichern soll und diese Variable dann mit dem Ergebnis des PHP Scripts verketten soll. Um im Ergebnis danach zwei Zeilen zu haben. Vorher wurde von Ihm ja immer die bereits bestehende Zeile durch eine neue (optisch) gleiche Zeile ersetzt. Was so aussah als würde der Button nur einmal funktionieren, denn die erste Zeile entstand ja erst nach erstmaligem betätigen des Buttons, da gab es noch keine Zeile zu ersetzen.

Mir gefällt diese Lösung übrigens nicht ;)

Code:
<html><head><title>Test</title>
<script type="text/javascript">

var Neu = "neuer <b>fetter<\/b> Text";
function Aendern () {
var old = document.all.meinAbsatz.innerHTML;
var save = old + Neu;
document.all.meinAbsatz.innerHTML = save;

}
</script>
</head><body>
<p id="meinAbsatz">Text</p>
<a href="javascript:Aendern()">Anderer Text</a>
</body></html>

Das gleiche Prinzip, aber keine Ahnung warum es oben nicht klappt. Das Beispiel geht jedenfalls.
 
@DarkMo
Deine Code-Version funktioniert auch nicht.
edit: wegen dem content div - lass es testweise erstmal drin, damit wir weiter spielen können. dein php zeugs, was das ersetzen sollte, ist ja (dacht ich) eher für die ausgabe der db daten, dein content-div aber für die erstellung der eingabemaske.
Blöd ist halt jetzt nur, dass wir den gesamten Code von dynamictable.php praktisch zwei mal nutzen. Einmal haben wir ihn in projektzeiterfassung.html, das ja jetzt "projektzeiterfassung.php" heißt, reinkopiert. Und darin rufen wir ihn aber durch das Javascript nochmal auf.

Ich schaue mir jetzt Tessa's Code an.
 
so, wieder da. was macht denn der php code der da eingebaut wird? ich dachte, der erstellt die tabelle, die anzeigt, was in der db alles drin steht. und das muss so oder so beim seitenladen einmal durchn server rödeln. die eingabe per js zu basteln is ja an sich ok, aber hat doch rein garnix mit dieser "php tabelle" zu tun.

wie gesagt, dieses ganze konstrukt is doch einfach nur zum an die decke laufen >< wozu brauch man überhaupt unbedingt "20" eingabezeilen? kann man doch auch alle nacheinander eingeben. unnötig kompliziert *find*
 
Zurück