# Daten aus MySQL-DB auslesen, über Formular ändern und speichern



## Fabian Frank (25. Januar 2006)

Hallo Liebe Tutorials-Gemeinde,

ich hab ein Problem (mal wieder ):

Und zwar hab ich ein Login-Script, bei dem die Daten über folgenden Code aus einer MySQL-DB ausgelesen werden:


```
if (mysql_num_rows ($result) > 0) 
{ 
  $data = mysql_fetch_array ($result); 

  $_SESSION["id"] = $data["id"]; 
  $_SESSION["email"] = $data["email"]; 
    $_SESSION["anrede"] = $data["anrede"]; 
  $_SESSION["vorname"] = $data["vorname"]; 
    $_SESSION["nachname"] = $data["nachname"];



  header("Location: account.php");
} 
else 
{ 
  header ("Location: login.php?fehler=1"); 
}
```

Sie werden ja praktisch zwischengespeichert mit der session. So. Jetzt lese ich die Daten in der Datei "account.php" aus. Das mach ich mit folgendem Befehl:


```
<?php echo $_SESSION["vorname"]; ?>
```

Jetzt will ich es aber so hinbekommen, das man die Daten auf der Website ändern kann, und eben die neu eingegebenen Daten anstatt der alten im selben Datensatz abspeichert.
Wie kann ich soetwas realisieren?

Vielen Dank schonmal für eure Hilfe, würde mich freuen, wenns schnell gehen würde 

Grüße,

Fabi


----------



## Tosso (25. Januar 2006)

also ich weiß nicht so ganz genau was du meinst, aber ich meine wenn du willst das man irgentetwas ändern kann musst du erst mal ein formular erstellen mit 


```
<form action="account.php" methode="GET"> 
<input type="text" ...
```
usw.


----------



## Fabian Frank (25. Januar 2006)

ja klar. Aber ich wollte den Befehl wie Daten überschreiben kann, in der MySQL-DB


----------



## hpvw (25. Januar 2006)

Siehe: UPDATE-Syntax

Gruß hpvw


----------



## Fabian Frank (25. Januar 2006)

ok danke. Das hat mir schon etwas weitergeholfen. Aber so wie ich das interpretiert habe ist der code dann folgender:


```
<?
mysql = UPDATE [LOW_PRIORITY] [IGNORE] user
    SET vorname=$_POST['name']
    [WHERE where_definition]
	
?>
```

dann kommt aber folgende fehlermeldung:


```
Parse error: parse error, unexpected '[' in /var/www/web39/html/login/2.php on line 2
```


----------



## hpvw (25. Januar 2006)

Das ist eine Syntax-Beschreibung in Anlehnung an die Backus-Naur-Form. Der Teil zwischen den eckigen Klammern ist ein optionaler Parameter.

Gruß hpvw


----------



## Fabian Frank (25. Januar 2006)

achso...aber ich bin jetzt schonmal soweit:


```
<?
$connectionid = mysql_connect ("localhost", "web39", "QKVmoNZ2"); 
if (!mysql_select_db ("usr_web39_1", $connectionid)) 
{ 
  die ("Es konnte keine Verbindung zur Datenbank hergestellt werden."); 
} 
mysql_query("UPDATE user " 
        ."SET vorname=$_POST['name'] " 
        ."WHERE vorname=".$name)

	
?>
```

Dann kommt folgende Fehlermeldung:


```
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/web39/html/login/2.php on line 8
```

Es tut mir wirklich leid dass ich zu blöd bin, dass selbst zu erledigen. Aber ich bin neu auf dem Gebiet und es ist sozusagen ein Schulprojekt...


----------



## Ceppi (25. Januar 2006)

Versuchs mal so, dann müsste es eigentlich gehen:

```
<? 
$connectionid = mysql_connect ("localhost", "web39", "QKVmoNZ2");  
if (!mysql_select_db ("usr_web39_1", $connectionid))  
{  
  die ("Es konnte keine Verbindung zur Datenbank hergestellt werden.");  
}  
mysql_query("UPDATE user "  
        ."SET vorname = '".$_POST['name']."' "  
        ."WHERE vorname='".$name."';") 
     
?>
```


----------



## Fabian Frank (25. Januar 2006)

naja, wenigstens kommt jetzt keine fehlermeldung mehr...aber ändern tuts nicht ...

Ich dachte mir, es liegt vlt. daran, dass nicht klar ist, was eigentlich überschrieben werden soll, bzw. welcher datensatz...jetzt hab ichs mal so versucht:



```
<? 
session_start (); 
$connectionid = mysql_connect ("localhost", "web39", "QKVmoNZ2");   
if (!mysql_select_db ("usr_web39_1", $connectionid))   
{   
  die ("Es konnte keine Verbindung zur Datenbank hergestellt werden.");   
}   
mysql_query("UPDATE user "   
        ."SET $_SESSION['vorname'] = '".$_POST['name']."' "   
        ."WHERE $_SESSION['vorname']='".$name."'");  
      
?>
```

was irgendwie auch nicht ...:


```
Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /var/www/web39/html/login/2.php on line 9
```


----------



## hpvw (25. Januar 2006)

Das Semikolon gehört, wie bei jeder anderen Funktion hinter die schließende Klammer:
	
	
	



```
<? 
$connectionid = mysql_connect ("localhost", "web39", "QKVmoNZ2");  
if (!mysql_select_db ("usr_web39_1", $connectionid))  
{  
  die ("Es konnte keine Verbindung zur Datenbank hergestellt werden.");  
}  
mysql_query("UPDATE user "  
        ."SET vorname = '".$_POST['name']."' "  
        ."WHERE vorname='".$name."'"); 
     
?>
```


----------



## Fabian Frank (25. Januar 2006)

ja stimmt...aber ich habs mal anders funktioniert wegen den sessions, könnte ja sein, dass es dann geht (siehe beitrag oben)...geht aber auch nicht


----------



## Tosso (26. Januar 2006)

OK... wenn man sich das mal als einen gesamten string anschaut dann sieht das ja so aus:
	
	
	



```
"UPDATE user SET vorname = '$_POST['name']' WHERE vorname='$name'"
```
Jetzt sieht man den Fehler finde ich ziemlich deutlich... bei '$_POST['name']'  benutzt du zwei mal die gleichen anführungszeichen, das kann nicht klappen... mach es lieber einfach so: 
	
	
	



```
$postname = $_POST['name'];
mysql_query("UPDATE user SET vorname = '$postname' WHERE vorname='$name'");
```


----------



## hpvw (26. Januar 2006)

Man beachte, dass sowohl Fabian, als auch ich, den String mit dem Punkt verkettet haben, da gibt es keine Probleme mehr mit den Anführungszeichen und auch Array-Elemente lassen sich auf diese Weise problemlos übergeben.

Gruß hpvw


----------



## Ceppi (26. Januar 2006)

@Fabian:
Funktioniert es denn jetzt?
Wenn nicht, kannst du ja mal schauen welches (boolsche) Ergebnis das myql_query zurückliefert - also so:

```
$result = mysql_query("UPDATE...");
if(!$result) {
  die("SQL-Query nicht erfolgreich.");
}
```

Und hast du mal vor dem SQL-Statement überprüft, welche Werte deine Variablen $_POST['name'] und $name haben?


----------



## Radhad (26. Januar 2006)

Außerdem ist die Spalte $_SESSION nicht in einer MySQL Tabelle verfügbar. Deine Tabelle sollte folgenden Aufbau haben:

ID - interger - auto_increment - primary key
Nickname (oder loginname) - varchar - unique
Vorname - varchar
Nachname - varchar
Passwort - varchar (MD5 Hashwert abspeichern)

Dann kannst du mittels dem Update Befehl folgendes machen:

```
"Update tbl.user SET vorname = ".$_GET["vorname"]." WHERE id = ".$_SESSION["userid"].";"
```

Die Variablen kannst du anpassen wie du willst. So wird es auf jeden Fall funktionieren. Zum testen würde ich mir immer den SQL String mit dem echo-Befehl ausgeben lassen, um zu prüfen, ob die Anweisung richtig ist (unabhängig von der Fehlermeldung, kann ja auch falsch sein ohne das ein Fehler kommt). Das wichtigste ist eh immer, eine saubere Datenbank zu haben, am besten in der 3. NF, dann ist das auch viel leichter mit den SQL-Anweisungen 


Gruß Radhad


----------



## hpvw (26. Januar 2006)

Ceppi hat gesagt.:
			
		

> Wenn nicht, kannst du ja mal schauen welches (boolsche) Ergebnis das myql_query zurückliefert - also so:
> ...


Wenn schon, denn schon:
	
	
	



```
$result = mysql_query("UPDATE...") 
    or die("MySQL-Fehler: ".mysql_error());
```
Gruß hpvw


----------



## Fabian Frank (27. Januar 2006)

Radhad hat gesagt.:
			
		

> Außerdem ist die Spalte $_SESSION nicht in einer MySQL Tabelle verfügbar. Deine Tabelle sollte folgenden Aufbau haben:
> 
> ID - interger - auto_increment - primary key
> 
> ...



Danke. Aber beim anlegen der Spalte id gibts schon probleme, und zwar:


```
MySQL meldet:  

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
```

Daweil hab ich es so gemacht wie beschrieben...

Danke,

Grüße,

Fabi


----------



## Neori (12. August 2006)

Hast du auch den Key gesetzt?

http://katana.wutachsound.de/uploads/files/key.jpg

Schau hinten bei den Radio Buttons 

mfg Neori


----------

