Wie kann ich eine MySQL Tabelle mit HTML/PHP aktualisieren ?

Awek

Fleet Captain Special
Mitglied seit
07.10.2006
Beiträge
267
Renomée
0
Hallo,

folgendes Problem: Ich habe eine Datenbank mit 2 Tabellen. In der ersten sind verschieden Personen mit PW gespeichert. In der zweiten ihre persönlichen Daten, wie Vorname, Nachname...
Jetzt möchte ich eine Seite programmieren in der man seine persönlichen Daten eingeben und speichern kann. Leider komme ich hier nicht weiter. Ich verbinde mich mit der Datenbank und der ersten Tabelle, nur wie kann ich jetzt das PW abrufen um diese Daten zu ändern. Oder muss ich ganz anders an diese Sache herangehen?
Ich habe schon sehr viel mit Gästebuch Tutorials gearbeitet, aber mir wird gesagt das ein Fehler aufgetreten ist.
PHP:
<html>
 <head>
 <title>Eintrag hinzufügen</title>
 </head>
 <body bgcolor="#cccccc" text="#ffffff" link="#333333" alink="#cc6600" vlink="#333333">
 <?php


 $DatabasePointer = mysql_connect("localhost", "name", "pw");
 mysql_select_db("datenbank", $DatabasePointer);
 $SQL = "INSERT INTO 2. tabelle (Vorname, Nahcname, Geb, Ort) VALUES ('".$_REQUEST['Name']."',
 '".$_REQUEST['Titel']."', '".$_REQUEST['Eintrag']."', NOW(''))";
 mysql_query($SQL, $DatabasePointer);

 if(mysql_affected_rows($DatabasePointer) == 1)
 {
 ?>
 <p>Vielen Dank für Ihren Eintrag!<br>
 <a href="gaestebuch08.php">Zurück</a></p>
 <?php
 }
 else
 {
 ?>
 <p>Beim Eintragen ist ein Fehler aufgetreten.<br>
 <a href="javascript:history.back();">Zurück</a></p>
 <?php
 }
 ?>
 </body>
 </html>

In der Verbindugnszeile tritt folgende Meldung auf.

Ich hoffe ihr könnt mir helfen.

Gruß,
Awek
 
Code:
[COLOR=Black] $DatabasePointer = mysql_connect("localhost", "name", "pw"); [/COLOR]


hier musst du natürlich user und pw der mysql datenbank eintragen.

außerdem: lagere die PHP unbedingt in eine eigene Datei aus!


Code:
[COLOR=#000000][COLOR=#007700][/COLOR][COLOR=#0000BB]$SQL [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#DD0000]"INSERT INTO 2. tabelle (Vorname, Nahcname, Geb, Ort) VALUES ('"[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]$_REQUEST[/COLOR][COLOR=#007700][[/COLOR][COLOR=#DD0000]'Name'[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#DD0000]"', 
 '"[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]$_REQUEST[/COLOR][COLOR=#007700][[/COLOR][COLOR=#DD0000]'Titel'[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#DD0000]"', '"[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]$_REQUEST[/COLOR][COLOR=#007700][[/COLOR][COLOR=#DD0000]'Eintrag'[/COLOR][COLOR=#007700]].[/COLOR][COLOR=#DD0000]"', NOW(''))"[/COLOR][COLOR=#007700]; [/COLOR][/COLOR]
Außerdem sollte natürlich hier statt "2. tabelle" der Name der zweiten Tabelle stehen - UND du musst natürlich die ID angeben durch die die beiden Tabellen verknüpft sind (mit einer WHERE Anweisung).

mir scheint, du bist eine Anfänger in Sachen PHP und SQL und solltest dir dringend mal ein Tutorial zum Thema anschauen.



.
EDIT :
.

speziell zum Thema Gästebuch hilft vielleicht das hier:

http://www.php-kurs.com/beispiel-gaestebuch-programmieren-in-php-und-mysql.htm
 
Zuletzt bearbeitet:
Also pw und Name habe ich dort eingetragen, nur nicht hier rein kopiert. Nur sind das ja die Daten der Datenbank, müsste jetzt nicht noch eine Abfrage programmiert werden, in der ich die Daten einer Person angebe, so das ich diese Daten dann verändern kann!?
 
Ich kann dir morgen mal ein kleines Beispiel dazu heraussuchen. Und nein per UPDATE musst du die Daten nicht auslesen sondern kannst diese direkt verändern - und zwar alle Zeilen die der WHERE-Klausel entsprechen (wenn du dort z.B. nur nach Vorname Franz suchst und diese mit Fritz updatest wird sowohl Franz Müller als auch Franz Schubert in Fritz umbenannt!)
 
Ok so langsam verstehe ich es wieder.
Also so in der Art:
PHP:
$SQL = "INSERT INTO schueler (Vorname, Nachname, Ort, PLZ, StrasseHausnummer, Geb, Telefon, Handy, Email, ICQ, TC, Studi, SchuelerCC, Myspace, Hobbys, Bildung) where Nummer =2";

Naja ich warte auf dein Beispiel morgen und schon einmal vielen Dank für die schnelle Hilfe.
 
naja fast... INSERT fügt immer eine neue Zeile ein - die WHERE-Klausel brauchst du da nicht. Hier könntest du aber mit UPDATE arbeiten falls du den alten Schüler mit ID = 2 rauswerfen willst.

Die Spalte Nummer in deinem Beispiel sollte dann auch UNIQUE sein (kannst du beim Erstellen der Datenbank-Tabelle bzw. -Tabellenspalte angeben)
 
Ja eig. sollen die Daten aktualisiert werden, also in den Spalten wo etwas eingeben wird, wird es aktualisiert und dort wo man nichts eingibt bleibt das Alte bestehen.

Werde jetzt aber erst einmal aufhören und melde mich morgen wieder.
 
Um dem Problem von SQL-Injections zu begegnen, sollte man vielleicht auch direkt vernünftig anfangen, und nicht die Fehler aus diversen "Tutorials" (was nicht unbedingt für die hier verlinkten gelten muss) übernehmen. Zum Beispiel sollte man wenn möglich PHP Data Objects benutzten mit Prepared-Statements und Parametern. Und auf jeden Fall immer den Inhalt filtern/überprüfen, bevor man ihn an die DB übergibt.
 
Zuletzt bearbeitet:
Komme nich an die Daten kann also frühestens am 5.1. was dazu sagen
 
5.1 erster wär super, danke! Danke auch an alle anderen, habe aber noch nicht alles durchgearbeitet.
Ich denke an einem Beispiel kann ich es mir am besten erklären.
 
Jemand eine Idee?
JKuehl kommst du an deine Daten?
 
Also, ich habe jetzt ein Formular, die Daten werden auch in die Tabelle übertragen. Wenn ich im Formular nichts eintrage/ändere, wird in der Tabelle die Information die ich nicht geändert habe gelöscht.
Wie ändere ich nur einige Informationen und nicht alle?

Wie kann man es programmieren, das im Formular die vorhandene Einträge schon vorhanden sind?
Oder das ein leeres Feld als keine Information "gesehen" wird?

Ich hoffe ihr versteht was ich meine und könnt mir helfen.

Code bis jetzt:
pers-login.php (Ausschnitt):
PHP:
$anfrage="update schueler set  
Hobbys='".$_REQUEST['Hobbys']."',
Bildung='".$_REQUEST['Bildung']."'

WHERE Nummer='1';";
mysql_query($anfrage);
?>

pers-formular.php (Ausschnitt):
PHP:
<form action="pers-login.php" method="post">
  Vorname: &nbsp; <input type="text" name="Vorname" size="40"><br>
  Nachname: <input type="text" name="Nachname" size="40"><br>

Brauche dringend Antworten...

Gruß,
Awek
 
Du mußt auf jeden Fall noch die aus den Formularfeldern ausgelesenen Daten verarbeiten, bevor Du sie in den Tabelle einträgst (dazu gibt es haufenweise Tutorials, deswegen erspar ich mir mal Quelltextschnipsel).

Du könntest z.B., wenn das Formular zum Editieren vorhandener Datensätze benutzt werden soll, ein Dropdownfeld einbauen, was die vorhandenen Unique-Schlüssel enthält, also "Nummer", und nach dessen Auswahl die vorhandenen Daten in die Formularfelder lädt, so daß diese entweder vom Nutzer geändert werden oder unverändert wieder reingeschrieben werden (mit UPDATE blabla WHERE Nummer=x). Zusätzlich dann eben im "Nummer"-Dropdownfeld die Option der Neuanlage eines Datensatzes, bei dem die Felder leer sind und vom Nutzer gefüllt werden müssen (Eintrag danach entsprechend mit INSERT).

Natürlich sollte man die Formularfeldeingaben noch entsprechend absichern, indem man überprüft, ob erlaubte Eingaben drin sind (d.h. keine Angaben vergessen, keine Sonderzeichen, die ggf. zu Problemen führen usw.) und falls man so einen Fehler findet, eine Meldung auswirft "Bitte Feld 'Vorname' ausfüllen" oder sowas. Je unbedarfter oder potentiell böser der Nutzer ist, desto umfangreicher muß man das machen (ein Hacker könnte z.B. einen SQL-Codeschnipsel reinschreiben und so die Datenbank abschießen, falls das nicht richtig abgefangen wird), aber wenn man nur selbst einträgt, kann man sich das auch sparen.
 
Danke OBrian, aber das mit dem Dropdownmenü brauche ich garnicht. Bei mir geht es um eine feste Nummer. Leider finde ich kein Tutorial. Könntest du mir einen Link schicken?

Es geht nur darum das die Textfelder mit den Informationen der Nummer, die in dem Quelltext festgelegt wurde "gefüllt" werden.

Ich hoffe mir kann jemand helfen.
 
PHP:
if($_REQUEST['Hobbys'] != "" && $_REQUEST['Bildung'] != "")
{
    $anfrage="update schueler set  
    Hobbys='".$_REQUEST['Hobbys']."',
    Bildung='".$_REQUEST['Bildung']."'

    WHERE Nummer='1';";
    mysql_query($anfrage);
}
else
{
    echo "Bitte Werte eingeben.";
}
?>

Zur erläuterung:

Vorrausgesetzt, es geht dabei um das "update schueler..." -statement. Habe den Thread nur überflogen...

Wenn du möchtest, dass im Formular schon die Werte stehen, die derzeit eingetragen sind, dann geht das beim erstellen des z.B. Formulars folgendermaßen:
PHP:
$result = mysql_fetch_assoc(mysql_query("select Bildung, Hobbys from schueler where Nummer = '1';"));
echo '<form action="pers-login.php" method="post">
...
  Bildung: &nbsp; <input type="text" name="Vorname" size="40" value="'.$result["Bildung"] .'"><br>
  Hobby: <input type="text" name="Nachname" size="40" value="'.$result["Hobby"] .'"><br>
... ';

Habe den Code nicht probiert, aber wenn er nicht auf Anhieb geht, wirst du bestimmt verstehen, wie es gemeint ist und den/die Fehler finden.

Diese Art zu Programmieren würde ich als "quick and very dirty" bezeichnen. Aber du scheinst es ja grade erst zu lernen. So hat jeder mal angefangen. Sei trotzdem darauf hingewiesen, dass man solche Codes nicht produktiv einsetzen sollte.

Grade wie BoMbY schon erwähnt hat, ist die Gefahr durch SQLInjections enorm, da das jeder kann, der auch nur ein wenig Ahnung von SQL und PHP hat. Und das sind genug Leute. Zur Folge kann das veränderte/gelöschte oder auch einfach nur die Veröffentlichung von Daten aus der Datenbank bis hin zu veränderten/zerstörten Datenbankstrukturen haben.
Die Begriffe Date_Objects und Prepared_Statements sind zwar auf Dauer sicherlich die sauberste und sicherste Lösung, aber grade am Anfang möchtest du wohl lieber kleiner Anfangen. Versuchs mal mit dem Suchbegriffen "escape sql injection".
Mit der Methode versteht man meiner Meinung nach am schnellsten worum es geht weil man das Problem an der Wurzel bekämpft.

Hoffe die Antwort kam dir nicht zu spät!

Marrek
 
Zurück
Oben Unten