php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 21.03.2009, 21:53  
Neuer Benutzer
 
Registriert seit: 21.03.2009
Beiträge: 2
easyhoo befindet sich auf einem aufstrebenden Ast
Standard MYSQL Daten via Formular bearbeiten

Hallo php.de Gemeinde,

ich bin neu im Forum und erhoffe mir den ein oder anderen Denkanstoss für mein Problem. Zuert vorweg, ich bin Änfänger was php betrifft und arbeite mich z.Z. anhand eines kleinen privaten Projekts ala learnig by doing in die Materie ein.

Ich möchte gerne aus einer MySql Datenbank die Daten in einem Formular ausgeben, diese dort ändern und durch Betätigung eines Button den entsprechenden Eintrag in der Datenbank ändern. Dazu wäre ein "Eintrag löschen" und ein leeres Feld für das Hinzufügen eines neuen Datensatzes sehr praktisch.

Ich habe zu dieser Thematik so ziehmlich alles hier im Forum und was mir die Suchmaschienen liefern durch und seh nun den Wald vor lauter Bäumen nicht mehr.

Meine Beispiel-Tabelle in der DB hat 4 Felder (id, name, preis, kategorie).
Das Einfügen der Daten in Formularfelder hab ich mit einer Schleife hinbekommen und generiere so mehrere Tabellen mit jeweils einem Datensatz ein einer Zeile:
PHP-Code:
$db_link mysql_connect("adresse","dbname","pw");
mysql_select_db("db");

$abfrage "SELECT * FROM tabelle1 WHERE kategorie='modellbau'";
$ergebnis mysql_query($abfrage);
 while(
$row mysql_fetch_object($ergebnis)) 
 {
echo <<<END
<table><tr>
<td><input name='id' type='text' size='10' value=$row
->id></td>
<td><input name='name' type='text' size='10' value=$row
->name></td>
<td><input name='preis' type='text' size='10' value=$row
->preis_klein></td>
</tr></table>
END;

Ich hab nun gelesen das ich die einzelnen Formularfelder nun über $GET oder $POST ansprechen kann....aber da hänge ich gerade fest.

Die update Syntax von mysql hab ich mir mitlerweile recht gut erarbeitet, ich weis aber nicht genau wie ich nun einzelne Felder ansprechen kann, zumal die Formular-Felder ja pro Datensatz generiert werden und somit mehrfach vorhandensind oder?
Welchen Eintrag/ Welches Formular-Feld würde ich so bekommen:
PHP-Code:
$ID$_POST['id']; 
Kann mir da jmd weiterhelfen?


Was das Löschen bzw. Hinzufügen eines Datensatzes angeht (das wär aber erst der nächste Schritt ) habe ich auch noch keine Idee wie ich das mit der Indizierung klappen kann. Ich habe als Primary Key die ID in der Tabelle. Wird ein Datensatz gelöscht würden ja Lücken entstehen. Bietet MySql da auch automatische Indizierungen oder würde da nur die Prüfung der manuell neu angegebenen ID auf bereits Vorhandensein funktionieren?

Ich wärde mich über jede Art Tipp freuen

Gruß

easyhoo
easyhoo ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 22.03.2009, 08:24  
Erfahrener Benutzer
 
Benutzerbild von Screeze
 
Registriert seit: 04.01.2009
Beiträge: 844
PHP-Kenntnisse:
Fortgeschritten
Screeze wird schon bald berühmt werden
Standard

also zu dem 1. Problem.
Du hast dort zwar formularelemente (textboxen) aber kein Formular (außer es fehlt im copy)
du brauchst natürlich vor den elementen ein
Code:
<form action="DieAktuelleSeite.php" method="POST">
bei action gibst du den name deiner php datei an (kann auch ruhig die selbe sein in der das drin is) und bei method gibst du die übertragungsart an. In diesem Fall POST.

Dann brauchst du nach den elementen noch
Code:
<input type="submit" name="submit" value="Abschicken!">
</form>
Wenn du jetzt die felder ausfüllst, und auf Abschicken klickst, kannst du auf der seite die angegeben wurde mit
PHP-Code:
$_POST['id'
auf die werte zugreifen (in dem fall das feld mit name id)


Zu deiner 2. Frage:
Wenn du in der Tabelle der Datenbank, das Feld 'ID' sowohl Primary Key, als auch Auto_increment (manchmal ne checkbox mit einem A_I als überschrift) einstellst, dann nimmt die datenbank beim einfügen eines datensatzes ...
PHP-Code:
mysql_query("INSERT INTO `tabelle1` (`name`, `preis`, `kategorie`) VALUES (" mysql_real_escape_string($_POST['name']) . ", " mysql_real_escape_string($_POST['preis']) . ", " mysql_real_escape_string($_POST['kategorie']) . ")"
(wenn du dich fragst was mysql_real_escape_string ist: Das ist eine absicherung, dass man nicht durch sql injection deine datenbank hacken kann, ohne das hättest du eine grobe sicherheitslücke, mehr infos bietet google)

... Automatisch eine nächsthöhere ID für den eintrag. Du musst id nicht extra zuweisen. Wenn du datensätze löscht, entstehen zwar lücken, aber beim auslesen ist das kein Problem, das erledigt dann die Datenbank schon selber für dich.

Ich hoffe damit kommst du erstmal klar, ansonsten schreib nochmal.
Screeze ist offline  
Alt 22.03.2009, 11:40  
Neuer Benutzer
 
Registriert seit: 21.03.2009
Beiträge: 2
easyhoo befindet sich auf einem aufstrebenden Ast
Standard

Hallo Screeze,

erstmal tausend Dank für Deine Antwort. Da mangelt es wohl ordentlich an meinen html Kenntnissen.
Ich habe jetzt Deine Tipps befolgt und die nötige Formularsyntax hinzugefügt:

PHP-Code:
<form action="aendern.php" method="POST">
<?php
$db_link 
mysql_connect("adresse","db","pw");
mysql_select_db("db");

$abfrage "SELECT * FROM tabelle1 WHERE kategorie='modellbau'";
$ergebnis mysql_query($abfrage);
 while(
$row mysql_fetch_object($ergebnis))
 {
echo <<<END
<table><tr><td>
<input name='id' type='text' size='10' value=$row
->id></td>
<td><input name='name' type='text' size='10' value=$row
->name></td>
<td><input name='preis' type='text' size='10' value=$row
->preis></td>
<td><input type="submit" name="submit" value="Abschicken!"></td></tr>
END;
}
echo 
"</form>";
$name $_POST["name"]; 
$id $_POST["id"]; 
$sqlab="UPDATE tabelle1 SET name = '".$name."' WHERE id='".$id."'";
mysql_db_query("db78272_1"$sqlab); 
?>
Das update funktioniert so jedoch nur beim leztzten Datensatz und das bisher auch nur etwas umständlich. Wenn ich im letzten Datensatz den Namen ändere und den Button dieser Zeile betätige wird die Seite ja neu geladen, jedoch mit dem alten Inhalt im Feld. Ein erneutes Laden der Seite überschreibt also die aktuelle Änderung wieder mit dem alten.
Ich denke das mir $POST beim generieren durch die Schleife immer wieder überschrieben wird und ich nach dem Seitenaufbau nur noch den letzten Datensatz in $POST habe oder??
easyhoo ist offline  
Alt 22.03.2009, 15:07  
Erfahrener Benutzer
 
Benutzerbild von Screeze
 
Registriert seit: 04.01.2009
Beiträge: 844
PHP-Kenntnisse:
Fortgeschritten
Screeze wird schon bald berühmt werden
Standard

ahhh hab ich übersehen, du hast da nen logischen fehler drin.

also wenn du alle datensätze auf einmal bearbeiten willst, solltest du den submit button nicht in die while schleife, sondern außerhalb setzen, aber noch vor </form>

Dann solltest du bei value angaben nicht
PHP-Code:
value=$row->name 
schreiben, denn sobald sonderzeichen oder ein leerzeichen im name sind, wird der rest abgeschnitten.
besser:
PHP-Code:
value="$row->name" 
und dann zum logischen fehler:
du generierst eine seite mit x*3 Feldern. (x=datenanzahl)
Allerdings haben dann alle den selben Name, wenn x = 20 ist, hast du also 20 Felder mit name 'id', 20 mit 'preis' und 20 mit 'name' als name.

Wenn du dann auf $_POST['id'] z.b. zugreifst, erhälst du nur einen der werte, ich schätze mal den aus dem letzten datensatz.

Du solltest die Felder eher so benennen:
PHP-Code:
<input name='id[]' type='text' size='10' value=$row->id></td>
<
td><input name='name[]' type='text' size='10' value=$row->name></td>
<
td><input name='preis[]' type='text' size='10' value=$row->preis></td
man beachte die [] am ende des Namens.
Dadurch werden alle Werte in ein Array geschrieben, und du hast dann am Ende die 3 Arrays: name[], id[], preis[]
Du kannst dann z.b. das ID array durchlaufen, und immer den paralellen wert der anderen Arrays abrufen.
Screeze ist offline  
Alt 22.11.2010, 11:04  
Neuer Benutzer
 
Registriert seit: 17.03.2010
Beiträge: 15
PHP-Kenntnisse:
Fortgeschritten
theparasit befindet sich auf einem aufstrebenden Ast
Standard

Hallo zusammen, ich muss diese Sache nochmal aufgreifen.

Ich stehe genau bei diesem Problem, ich generiere in einer while Schleife eine Tabelle mit input Feldern. hinter jedem Datensatz generiere ich einen Button zum korrigieren.
Wenn ich dann auf irgendeinen Button klicke wird mir immer der letzet Datensatz zum korrigieren aufgemacht.
Wie kann ich die richtige id übergeben?
PHP-Code:
while($row=mysql_fetch_array($result))
{
echo 
"<tr><td>";
    echo 
"<input type=\"hidden\" name=\"id\" value=$row[id]>";
    echo 
"<input type=\"text\" name=\"menge\" value=" str_replace("."","$row[menge]) .">" " kg";
    echo 
"<td>";
    echo 
"<input type=\"text\" name=\"wsa\" value=$row[wsa]>" "er";
    echo 
"<td>";
    if (
$row[nachwaesche]==0){
    echo 
"nein";
    }
    else
    {
    echo 
"ja";
    }
    echo 
"<td>";
    echo 
"<input type=\"text\" name=\"kto\" value=$row[kundennummer]>";
    echo 
"<td>";
    echo 
"<input type=\"text\" name=\"datum\" value=$row[datum]>";
    echo 
"<td>";
    echo 
"<input type='submit' name='korrigieren' value='korrigieren'></td>";
    echo 
"</td></tr></form>";


Geändert von theparasit (22.11.2010 um 11:31 Uhr).
theparasit ist offline  
Alt 22.11.2010, 11:09  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Wenn du in jeder Zeile ein Formular haben willst, dann solltest du auch in jeder Zeile ein öffnendes <form>-Tag haben und nicht nur das schließende.
cycap ist offline  
Alt 22.11.2010, 11:21  
Neuer Benutzer
 
Registriert seit: 17.03.2010
Beiträge: 15
PHP-Kenntnisse:
Fortgeschritten
theparasit befindet sich auf einem aufstrebenden Ast
Standard

Herr Gott noch eins, es ist immer wieder so, es muss nur mal jemand anderes drüber schauen und der eigene Esel sieht den Fehler nicht.
Vielen Dank!
theparasit ist offline  
Alt 22.11.2010, 15:18  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Um solche Riesen-Eseleien zu vermeiden, validiert man seinen HTML-Code.
Das nächste Mal bitte vor dem Fragen machen!
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline  
Alt 23.11.2010, 11:29  
Neuer Benutzer
 
Registriert seit: 17.03.2010
Beiträge: 15
PHP-Kenntnisse:
Fortgeschritten
theparasit befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ChrisB Beitrag anzeigen
Um solche Riesen-Eseleien zu vermeiden, validiert man seinen HTML-Code.
Das nächste Mal bitte vor dem Fragen machen!
ähm, das war nur ein snippet aus meinem code, das öffnende Tag war schon da, nur nicht in der while Schleife.

Das nächste Mal bitte vor dem schiessen Fragen!
theparasit ist offline  
Alt 23.11.2010, 14:26  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von theparasit Beitrag anzeigen
ähm, das war nur ein snippet aus meinem code, das öffnende Tag war schon da, nur nicht in der while Schleife.
Was dafür sorgt, dass dein Script fehlerhaftes HTML erzeugt,
was wiederum einen Fehler darstellt, auf den der Validator dich sicher hingewiesen hätte!

Zitat:
Das nächste Mal bitte vor dem schiessen Fragen!
Nein, validieren vor dem Fragen. Punkt.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MySql - Daten übers Formular einfügen? Toby PHP Tipps 2008 9 07.11.2007 09:51
Zugriff auf eine ORACLE DB die Daten in eine MYSQL schreiben Cheesy PHP Tipps 2007 5 12.06.2007 15:36
Mysql daten wieder hochladen Matthiasnet Datenbanken 0 14.08.2006 15:25
Einlesen von Daten in Formular Fragenfrager PHP Tipps 2006 3 14.08.2006 10:11
POST Daten ohne Formular übergeben? &lt;Daniel&gt; PHP Tipps 2006 8 19.06.2006 14:34
Serverumzug - Problem mit MySQL Daten [GE]ReeN Datenbanken 6 28.03.2006 17:02
Formular übermittelt keine Daten PHP Tipps 2006 4 08.03.2006 13:09
Daten über Formular eingeben und in Tabelle speichern. WIE? PHP Tipps 2006 20 10.02.2006 16:04
[Erledigt] Formular (POST) übergabe von Daten PHP-Fortgeschrittene 5 23.01.2006 20:34
Daten von einer Liste in eine Eingabemaske (Formular) - wie? PHP Tipps 2005 6 26.05.2005 08:33
[Erledigt] MYSQL Daten im Formular ändern Datenbanken 1 01.03.2005 08:15
[Erledigt] Daten via Formular in MySql eintragen Datenbanken 2 11.02.2005 14:03
[Erledigt] Ausgelesende Daten in MySQL Tabellen mit Links verbinden Datenbanken 8 15.01.2005 20:50
[Erledigt] Daten in einem Formular ausgeben und ändern PHP Tipps 2004-2 7 07.12.2004 17:22
[Erledigt] Daten in neuem Formular anzeigen PHP Tipps 2004 6 21.07.2004 10:44

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
http://www.php.de/php-einsteiger/53221-mysql-daten-via-formular-bearbeiten.html, php mysql tabelle bearbeiten, mysql php daten einfügen, mysql daten ändern, php formular bearbeiten mysql, php formular daten ändern, php mysql daten einfügen, php mysql bearbeiten, mysql daten ausgeben und ändern, mysql tabelle bearbeiten php, mysql datenbank bearbeiten mit formular, daten via formular aus datenbank löschen, mysql datensatz ändern, php formular mit mysql, mysql daten einfügen php, mysql daten in formular ausgeben, php mysql daten ändern formular, php formulardaten ändern, mysql daten bearbeiten, daten in mysql bearbeiten

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:30 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum