MySQL Datenbankabfrage -> Problem bei Eintragung

Luca2901

Grünschnabel
Hallo,

ich bin blutiger Anfänger im "Skripten" von PHP.
Ich wollte eine kleine Abfrage erstellen, mit der ich die Namen und Gruppen der User in einer Datenbank bearbeiten kann. Die Ausgabe der Daten klappt soweit, jedoch funktioniert die Eintragung nicht. Hier der Code der Datei Benutzer.php:
Code:
<?php
include("../dbconnect.php");
?>
<?php
if(isset($_GET['benutzer_aendern']))
{
$ergebnis = mysql_query('SELECT * FROM user ORDER BY id');
?>
<center>
<form action="benutzer.php?benutzer_aendern_schritt2" method="post">
<select name="username" id="username">
<?php
while($row = mysql_fetch_object($ergebnis)) 
{
?>		
<option><?php echo $row->username; ?></option>
<?php } ?>
</select><br />
<input type="submit" name="button" id="button" value="Benutzer ausw&auml;hlen">
</form></center> 
<?php 
}
?>
<?php
if(isset($_GET['benutzer_aendern_schritt2'])) 
{
$username = $_POST['username'];
$ergebnis = mysql_query('SELECT * FROM user WHERE username = "'.$username.'"');
while ($row = mysql_fetch_object($ergebnis)) {
$group = $row->group;	 
}
?>
<center>
<form method="post" action="benutzer.php?benutzer_geaendert">
<table width="20%" border="1">
<tr>
<td width="50%">Username:</td>
<td width="50%">
<input name="username" type="text" id="username" value="<?php echo $username; ?>"></td>
</tr>
<tr>
<td width="50%">Gruppe:</td>
<td width="50%">
<select name="group">
<option value="<?php echo $group; ?>"><?php echo $group; ?></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select><br>
Momentane Gruppe: <?php echo $group; ?></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="button" id="button" value="Benutzer speichern"></td>
</tr>
</table>
</form>  
</center> 
<?php
}
?>

<?php
if(isset($_GET['benutzer_geaendert']))
{
$username = $_POST["username"];
$group = $_POST["group"];
mysql_query("UPDATE user SET username = '".$username."' , group = '".$group."' WHERE username = '".$username."'");
?>
<center>Benutzer erfolgreich ge&auml;ndert!<br>
Was nun?<br>
<a href="benutzer.php?benutzer_aendern">Weiteren Benutzer &auml;ndern</a></center>
<?php
}
else {}
?>
Ich bedanke mich im voraus! :)
 
Halli Hallo und willkommen hier im Forum.

Ich könnte mir gut vorstellen, dass dein Problem darin liegt, das die GET-Parameter in deinem Form-Actions nicht mit Werten gefüllt sind. Du kannst das herausfinden, in dem du testweise mit var_dump() das $_GET-Array ausgibst:

PHP:
echo "<pre>";
var_dump($_GET);
echo "</pre>";

Ansonsten kann ich nur noch empfehlen, mysql_error() zu verwenden, und zwar immer dann, wenn ein Fehler auftreten KANN. Beispielsweise bei mysql_query(), _connect() und _select_db():

PHP:
$ergebnis = mysql_query('SELECT * FROM user ORDER BY id') or die(mysql_error());
 
Dankeschön! :)

Habe mal überall "or die(mysql_error());" eingefügt und bekomme beim letzten mysql_query die Fehlermeldung -> "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group = '1' WHERE username = 'Luca290197'' at line 1"

Was ich da tun kann weiß ich leider nicht, da ich davon nicht viel Ahnung habe! :/
 
Siehst du, so kommt man voran :)

Du kannst mal folgendes umbauen. Verwende keine direkten Strings in dem mysql_query() aufrufen sondern Variablen. Das hat nämlich den Charme, das du den Query, so wie er dann an die Datenbank gesendet wird, auch einfach mal im Browser ausgeben kannst, um ihn bspw. in phpMyAdmin mal zu testen. Nehmen wir als Beispiel den letzten UPDATE-Query:

PHP:
mysql_query();

Den bauen wir jetzt folgendermaßen um:

PHP:
$query = sprintf("UPDATE user SET username = '%s' , group = '%d' WHERE username = '%s'",
                                $username, $group, $username);

mysql_query($query) or die("Fehler beim Ausführen des Query: <pre>$query</pre>" . mysql_error());

Was macht sprintf() wirst du dich jetzt vielleicht fragen: Kurz, es formatiert eine Zeichenkette, die %-Tags sind die Format-Angaben. %s steht für String, %d steht für Ganzzahl (Integer). Das sieht nicht nur besser aus, das erleichtert auch die Lesbarkeit und erhöht die Sicherheit etwas.
 
Sorry für Doppel-Post: Das Wort "GROUP" ist ein SQL-Schlüsselwort, daher hast du einen Syntax-Fehler im Query. Wenn die Spalte wirklich "group" heißt, musst du sie im Query in Backticks schreiben. Etwa so:

PHP:
$query = sprintf("UPDATE `user` SET `username` = '%s' , `group` = '%d' WHERE `username` = '%s'",
                                $username, $group, $username);

Datenbank-, Tabellen- und Spalten-Namen sollte man ohnehin bei MySQL immer in Backticks schreiben, um Konflikte zu vermeiden.
 
Entschuldigung, dass es etwas länger gedauert hat, habe einen Fehler in der Datei gesehen.
Nun, dies ist der neue Code. Erhalte keine Fehlermeldungen mehr, allerdings wird auch nichts eingetragen!
PHP:
<?php
include("../dbconnect.php");
?>
<?php
if(isset($_GET['benutzer_aendern'])) {
$result = mysql_query('SELECT * FROM user ORDER BY username') or die(mysql_error());
?>
<center>
<form action="benutzer.php?benutzer_aendern_schritt2" method="POST">
<select name="user" id="user">
<?php
while ($myrow = mysql_fetch_object($result)) {
?>		
<option><?php echo $myrow->username; ?></option>		
<?php } ?>
</select><br />
<input type="submit" name="button" id="button" value="Benutzer ausw&auml;hlen">
</form> </center> 
<?php 
}
?>
<?php
if(isset($_GET['benutzer_aendern_schritt2'])) {
$user = $_POST['user'];
$result = mysql_query('SELECT * FROM user WHERE username = "'.$user.'"') or die(mysql_error());
while ($myrow = mysql_fetch_object($result)) {
$group = $myrow->group;	 
} ?>
<center>
<form name="useredit" method="post" action="benutzer.php?benutzer_geaendert">
<table width="20%" border="1">
<tr>
<td width="50%">Username:</td>
<td width="50%">
<input name="username" type="text" id="username" value="<?php echo $user; ?>"></td>
</tr>
<tr>
<td>Gruppe:</td>
<td>
<select name="group">
<option value="<?php echo $group; ?>"><?php echo $group; ?></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="button" id="button" value="Benutzer speichern"></td>
</tr>
</table>
</form>  
</center> 
<?php 
}
?>
<?php
if(isset($_GET['benutzer_geaendert'])) {
$username = $_POST["username"];
$group = $_POST["group"];
$query = sprintf("UPDATE `user` SET `username` = '%s' , `group` = '%d' WHERE `username` = '%s'",
                                $username, $group, $user) or die(mysql_error());

mysql_query($query) or die("Fehler beim Ausführen des Query: <pre>$query</pre>" . mysql_error());
?>
<p class="center">Benutzer erfolgreich ge&auml;ndert!<br>
Was nun?<br>
<a href="benutzer.php?benutzer_aendern">Weiteren Benutzer &auml;ndern</a></p>
<?php
} else {}
echo "<pre>";
var_dump($_GET);
echo "</pre>";
?>

EDIT: Das Eintragen / Ändern der Gruppen funktioniert nun. Das Eintragen des Namens funktioniert leider nicht, so wie es sollte. Auch wenn das Namensfeld ausgefüllt ist, trägt er nichts in die Datenbank ein, bzw. entfernt den vorhandenen Namen.
 
Zuletzt bearbeitet:
Habe den Code in meinem letzten Beitrag mal bearbeitet.
Dort siehst Du nun, wo es herkommt.
Mit diesem Code konnte ich eben ein leeres Feld wieder füllen und die Gruppen ändern, nun geht es aber nicht mehr. :/

Kann länger dauern, bis ich wieder antworte, da es jetzt erstmal Essen gibt!
 
Essen ist wichtig :)

Nun stellt sich die Frage, wo $user im letzten Query herkommt. Die Kondition dürfte nun leer und damit nicht erfüllt sein, da alle Zeilen (Datensätze) in der Tabelle nun keinen leeren Benutzernamen mehr haben. Allerdings ist auch die Frage, ob man einen Benutzernamen wirklich ändern sollte. Jedenfalls macht der Code so keinen Sinn. Ich schreibe mal wörtlich hin, was der Query bewirken soll:

Code:
$Benutzer sei 'saftmeister';
$Gruppe sei 1234;

Ersetze benutzername auf '$Benutzer', gruppe auf '$Gruppe' bei allen Datensätzen, in denen benutzernamen $irgendwas ist;

Irgendwie komisch oder?
 
Stimmt!
Dann machen wir das anders. Ich möchte den Benutzernamen nun nicht mehr ändern, sondern nur die Gruppe. Ich versuch das mal entsprechend hinzukriegen!

EDIT: Funktioniert nun! Ich danke für die Hilfe!
Der funktionale Code:
PHP:
<?php
include("../dbconnect.php");
?>
<?php
if(isset($_GET['benutzer_aendern'])) {
$result = mysql_query('SELECT * FROM user ORDER BY username') or die(mysql_error());
?>
<center>
<form action="benutzer.php?benutzer_aendern_schritt2" method="POST">
<select name="user" id="user">
<?php
while ($myrow = mysql_fetch_object($result)) {
?>		
<option><?php echo $myrow->username; ?></option>		
<?php } ?>
</select><br />
<input type="submit" name="button" id="button" value="Benutzer ausw&auml;hlen">
</form> </center> 
<?php 
}
?>
<?php
if(isset($_GET['benutzer_aendern_schritt2'])) {
$user = $_POST['user'];
$result = mysql_query('SELECT * FROM user WHERE username = "'.$user.'"') or die(mysql_error());
while ($myrow = mysql_fetch_object($result)) {
$group = $myrow->group;	 
} ?>
<center>
<form name="useredit" method="post" action="benutzer.php?benutzer_geaendert">
<table width="20%" border="1">
<tr>
<td width="50%">Username:</td>
<td width="50%">
<input name="username" type="text" id="username" value="<?php echo $user; ?>" readonly="readonly"></td>
</tr>
<tr>
<td>Gruppe:</td>
<td>
<select name="group">
<option value="<?php echo $group; ?>"><?php echo $group; ?></option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="button" id="button" value="Benutzer speichern"></td>
</tr>
</table>
</form>  
</center> 
<?php 
}
?>
<?php
if(isset($_GET['benutzer_geaendert'])) {
$username = $_POST["username"];
$group = $_POST["group"];
$query = sprintf("UPDATE `user` SET `group` = '%d' WHERE `username` = '%s'",
                                $group, $username) or die(mysql_error());

mysql_query($query) or die("Fehler beim Ausführen des Query: <pre>$query</pre>" . mysql_error());
?>
<p class="center">Benutzer erfolgreich ge&auml;ndert!<br>
Was nun?<br>
<a href="benutzer.php?benutzer_aendern">Weiteren Benutzer &auml;ndern</a></p>
<?php
} else {}
echo "<pre>";
var_dump($_GET);
echo "</pre>";
?>
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück