Datenbankupdate aus formular heraus

papabaerchen

Mitglied
Hi.

Ich habe keine Ahnung wie ich das Problem beschreiben soll aber ich fange mal an:

Ich habe eine Seite erstellt in der mir verschiedene Artikel angezeigt werden und auch die Stückzahl die auf Lager sind. Nun will ich aber mal das Lager neu zählen und auch die Stückzahl ändern. Also lass ich mir alle Artikel anzeigen (in einer Tabelle) und habe dahinter ein Input feld wo ich die Stückzahl eingeben will. Aber wie mach ich das, das es auch wirklich die Zahl speichert/in datenbank einträgt die ich dahinter schreibe. Ich will nicht nach jedem Artikel auf speichern drücken aber sobald ich die Seite verlasse weil ich vielleicht was am Artikel selber ändern will und ich wieder auf die eigentliche Seite komme wird die ja neu geladen und die Stückzahlen die ich bereits eingegeben habe sind dann weg.
Ich habe mir schon überlegt ob es mit einem Mouse.out geht, das sobald die maus aus den eingabefeld drausen ist es gespeichert wird aber da komme ich total mit den Variablen durcheinander.

Habt ihr eine Idee?

Mfg
Seppi
 
ja mit Java Script ginge es bedingt , Ajax wäre da wohl besser aber frage mich nicht wie man das mit Ajax macht.

Eine Idee die ich hätte wäre folgende auch wenn das nun reiner HTML / Java Script Code ist und hier wohl weniger zu suchen hat im eigentlichen.

HTML:
<html>
    <head>
        <script type="text/javaScript">
        
            function changeCount(id){
                with(document.getElementById(id)){
                    // wenn man noch die Tabelle rausfinden will die verändert werden soll oder wo die Daten liegen
                    // bei meheren Produkten angeboten sicher hilfreich
                    var mysql_table_name = parentNode.name;

                    var value = value;
                    var id  = name;
                    alert(name);
                    var url = "changeCount.php?newValue="+value+"&id="+id;
                    window.open(url,'','width=400 height=400');
                }
            }
        
        </script>
    </head>
    <body>
        <form name="buecher">
            <input type="text" id="id" name="mysql_primary_key" value="20" onchange="changeCount('id')">
        </form>
    </body>
</html>

Also könntest du in einer anderen Datei , in dem falle nun mal die changeCount.php die URL abfragen und über die GET Variablen den MySQL_Query ausführen um die Daten zu aktualisieren.
Da PHP ja zuerst durchläuft und danach erst der HTML "Code" bzw JavaScript Code ausgeführt wird , könntest nachdem er damit fertig ist mit HIlfe von JavaScript das fenster wieder schliessen.

Nachteil , naja ich würde es nur für den Admin bereit stellen und dieser muss dann halt Java Script anhaben. Des weiteren müsste man sich absichern das der User auch die Rechte hat um was zu änderen. Wenn einer rausfindet hey da gibs ja ne Datei da gebe ich in der URL noch das und das an und dann mal sehen was passiert.
 
Zuletzt bearbeitet:
Hm.
Daran habe ich noch gar nicht gedacht das ganze über ein neues Fenster zu machen. Die Idee ist gar nicht mal so schlecht.
Vielleicht könnte man auch mit einem Mouse-over und out machen, dass sobald ich das eingabe-Textfeld verlasse alle daten der Zeile mithilfe von GET an ein neues Script im neuen Fenster übergeben wird und ein mysql-Update ausführt. Die Idee ist gut, werd ich mal Testcode.

Wenn einer rausfindet hey da gibs ja ne Datei da gebe ich in der URL noch das und das an und dann mal sehen was passiert.
Darum mach dir keine Sorgen, das ganze Programm/Script läuft Local und wird nie im www erscheinen. Ich und ein paar meiner Kollegen sind die einzigen die es verwenden
 
Ja naja möglichkeiten hast da viele , ob ich das onmouserover onmouseout da nehmen würde , mhm das is so ne sache scrollst einmal drüber legt er dann sofort los egal ob Du was geändert hast.

Onfocus ginge auch , aber wenn man da nix ändert dann aktualisiert er es dennoch. Ich fände nun onchange das beste.
Sobald man den Wert geändert hat und dann das Feld wieder verlässt , dann wird dies in der Datenbank vermerkt.
 
Ok, onChange ist genau das was ich haben will. Aber wie kann ich das nun einbauen?

Ja klar, ich schreibe ein Textfeld. <input type='Text' name='anzahl' value='0' size='5' maxlength='10' onchange='update()'>

Aber wie bekomme ich in den funktion update() jetzt einen Update-php-befehl rein? Kann ich einfach schreiben
Code:
 <script>
function Update () 
(hier beginnt php)
..................
(hier endet php)
</script
oder wie füge ich php in Javascript ein?

Oder muss ich mit dem update() ein neues Fenster öffnen lassen, den Datensatz den ich ändern will, sowie die neue anzahl per get übergeben und im neuen Fenster wird dann erst alles geändert oder wie geht es jetzt weiter
 
Also im JavaScript würde ich den PHP Code nicht unterbringen. Du baust die aus dem Ergebniss des MySQL Querys sozusagen ne Tabelle zusammen.

Nehmen wir an die MySQL Tabelle Bücher sieht so aus

id name preis bildchen anzahl

PHP:
<?php
	$query = "SELECT * FROM Buecher";
    $result = mysqL_query($query);

    $table = '<table>'."\r\n";
    $tableCell = '';
	$tableCellBuffer = '';
	
	function getJavaScript($id){
		return 'onchange="changeCount(\''.$id.'\')"';
	}
	
	function getInputField($jScript,$id,$anzahl){
		return '<input id="'.$id.'" type="text" value="'.$anzahl.'" '.$jScript.'>';
	}	

    while($ergeb = mysql_fetch_assoc($result)){
	    $table .= '<tr>'."\r\n";
			do{
	           $tableCell  = '<td>';
			   /* hier wird überprüft wie der Schlüssel heisst , sollte der Schlüssel = anzahl lauten 
			            dann wird dementsprechend ein input tag gesetzt und in diesem Feld der JavaScript Eventhandler
				 untergebracht als feld ID wird im Inputtag noch das attribute id=" mysql_id " untergebracht */
			   $tableCell .= ((key($ergeb) == 'anzahl')?getInputField(getJavaScript($ergeb['id']),$ergeb['id'],current($ergeb)):current($ergeb));
			   $tableCell .= '</td>'."\r\n";
			   $tableCellBuffer .= $tableCell;
			   $tableCell = '';
	        }while(next($ergeb));
		$table .= $tableCellBuffer.'</tr>'
   }

   $table .= '</table>'."\r\n";
   echo $table;
?>

Das ergebniss sah dann einfach mit einen TestArray dann so aus:

HTML:
<table>
<tr>
<td >12</td>
<td >Agatha Chrsties gute Nachtgeschichten</td>
<td >123.34</td>
<td >hier würde ein Bild sein</td>
<td id="12"><input type="text" value="200" onchange="changeCount('12')"></td>
</tr>
</table>

Ich seh aber war ein kleiner Fehler unterlaufen. Wurde korregiert , das attribute id sollte nun bei dem Input Feld sein und nicht mehr beim td tag.
 
Zuletzt bearbeitet:
Hi.
Ich habe mir das jetzt mal so angeschaut, ausprobiert und ich häng.

Am besten gefällt mir die Lösung wo ich, sobald das imputfeld den Focus verliert, ein neues Fenster geöffnet wird wo die nötigen variablen übergeben werden und dann ein php Updatebefehl ausgegeben wird.

Aber ich bekomme das Fesnteröffnen schon nicht hin. So sieht mein Code aus:

PHP:
echo "<td><input type='Text' name='".$id."' value='".$sql['anzahl_alt']."' size='5' maxlength=''onchange=' window.open('update.php?id= ".$id."&neu_anzahl=(this.value) ', 'update','width=100,height=100,scrollbars=yes,location=yes') '></td>";

Im neuen Fenster ist dann ein php Code der mit erstmal die Get-infos liest und dann eben die änderungen in der Datenbank macht.

Mal abgesehen das sich das neue Fenster nicht öfnet, bin in ich mir auch nicht sicher ob auch wrklich die neue Anzahl in der variable This.Value übergeben wird.

Also wo liegt der Fehler?
 
Ich vermute das Problem liegt in den einfachen Anführungsstrichen.
onchange = 'window.open(\'seite\',\'titel\',...)' aber sicher bin ich mir da nun
nicht. Aber wenn Du nun mal meine beiden Vorschläge zusammen kopierst
dann sollte es klappen. Du müsstest nur den Query abändern rein theoretisch.

PHP:
<?php
    $query = "SELECT * FROM Buecher";
    $result = mysqL_query($query);

    $table = '<table>'."\r\n";
    $tableCell = '';
    $tableCellBuffer = '';
    
    function getJavaScript($id){
        return 'onchange="changeCount(\''.$id.'\')"';
    }
    
    function getInputField($jScript,$id,$anzahl){
        return '<input id="'.$id.'" type="text" value="'.$anzahl.'" '.$jScript.'>';
    }    

    while($ergeb = mysql_fetch_assoc($result)){
        $table .= '<tr>'."\r\n";
            do{
               $tableCell  = '<td>';
               /* hier wird überprüft wie der Schlüssel heisst , sollte der Schlüssel = anzahl lauten 
                        dann wird dementsprechend ein input tag gesetzt und in diesem Feld der JavaScript Eventhandler
                 untergebracht als feld ID wird im Inputtag noch das attribute id=" mysql_id " untergebracht */
               $tableCell .= ((key($ergeb) == 'anzahl')?getInputField(getJavaScript($ergeb['id']),$ergeb['id'],current($ergeb)):current($ergeb));
               $tableCell .= '</td>'."\r\n";
               $tableCellBuffer .= $tableCell;
               $tableCell = '';
            }while(next($ergeb));
        $table .= $tableCellBuffer.'</tr>'
   }

$table .= '</table>'."\r\n";
?>
<html>
    <head>
        <script type="text/javaScript">
        
            function changeCount(id){
                with(document.getElementById(id)){
                    // wenn man noch die Tabelle rausfinden will die verändert werden soll oder wo die Daten liegen
                    // bei meheren Produkten angeboten sicher hilfreich
                    var mysql_table_name = parentNode.name;

                    var value = value;
                    var id  = name;
                    alert(name);
                    var url = "changeCount.php?newValue="+value+"&id="+id;
                    window.open(url,'','width=400 height=400');
                }
            }
        
        </script>
    </head>
    <body>
        <form name="buecher">
           <?php echo $table; ?>
        </form>
    </body>
</html>
?>
sollte es passen. Zwar nen bissel unsauberer alles da es so schön gemischt ist. Aber zur Veranschaulichung sollte es reichen ;)
 
Irgendwie kapier ich den Code nicht.
Selbst wenn ich ihn einfach so kopiere, den Datenabnkaufruf mache und mir nur die ersten 10 einträge anschaue sieht das dann so aus:
Code:
3064 
3064 3067 
3064 3067 3080 
3064 3067 3080 7 1 
3064 3067 3080 7 1 8 2 
3064 3067 3080 7 1 8 2 9 10 
3064 3067 3080 7 1 8 2 9 10 3057 
3064 3067 3080 7 1 8 2 9 10 3057 11 3 
3064 3067 3080 7 1 8 2 9 10 3057 11 3 12 2 
3064 3067 3080 7 1 8 2 9 10 3057 11 3 12 2 13 1

Ok, ja es sind die Id's der einzelnen einträge aber ich kann sie weder ändern noch sonst was damit machen. Sie stehen auch nicht in einem Inputfeld und sie sollen doch alle einzeln stehen.

Oder habe cih da jetzt was falsch verstanden?

P.S.
Es gehört ein ";" bei "$table .= $tableCellBuffer.'</tr>'" hin. Also heißt die Zeile dann "$table .= $tableCellBuffer.'</tr>';"
 
Zurück