Meine Datensatzänderungen werden nicht angenommen... gelöst

Hi Leutz,

ich hab mal wieder ein Problem was warscheinlich ganz einfach zu Lösen ist aber ich komme nicht auf dei Lösung…

Also ich versuch sozusagen ein Adminmenü zu machen.

Dafür verwende ich 3 Seiten die ich nun nacheinander Poste.

benutzer.php

<?php include ("checkuser2.php"); ?> Wählen Sie aus, welcher Datensatz geändert werden soll:

<?php $db = mysql_connect("localhost", "root", "pw"); $res = mysql_db_query("tommist", "select * from benutzerdaten"); $num = mysql_num_rows($res);

// Tabellenbeginn
echo “

”;

// Überschrift
echo "

";
echo "";

for ($i=0; $i<$num; $i++)
{
$bn = mysql_result($res, $i, “benutzername”);
$nn = mysql_result($res, $i, “nachname”);
$vn = mysql_result($res, $i, “vorname”);

  // Tabellenzeile mit -zellen
  echo "<tr> <td><input type='radio' name='auswahl'";
  echo " value='$bn'></td> <td>$bn</td> <td>$nn</td>";
  echo "<td>$vn</td> </tr>";

}

// Tabellenende
echo “

Auswahl BenutzernameNachname Vorname
”;

mysql_close($db);
?>

benutzer2.php

<?php include ("checkuser2.php"); ?> <?php $auswahl = $_POST["auswahl"];

if (isset($_POST[“gesendet”]))
{
if ($auswahl == ‘’)
{
header (“Location: benutzer.php?fehler=1”);
}
else
{

$db = mysql_connect(“localhost”, “root”, “pw”);

$sqlab = “select * from benutzerdaten where”;
$sqlab .= " benutzername = ‘$auswahl’";

$res = mysql_db_query(“tommist”, $sqlab);

$altnn = mysql_result($res, 0, “nachname”);
$altvn = mysql_result($res, 0, “vorname”);

echo “Führen Sie die Änderungen durch,”;
echo " betätigen Sie anschließend den Button:

";

echo "<form action = ‘benutzer3.php’ “;
echo " method = ‘post’>”;

echo “”;
echo " Benutzername

";
echo “”;
echo " Nachname

";
echo " “;
echo " Vorname

”;
echo "<input type=‘hidden’ name=‘oribn’ “;
echo " value=’$auswahl’>”;

echo "<input type=‘submit’ “;
echo " value=‘Änderungen in Datenbank speichern’ name=‘gesendet2’ >

”;
echo “”;
echo “”;

mysql_close($db);
}
}

else
echo “Es wurde kein Datensatz ausgewählt

”;
?>

benutzer3.php

<?php include ("checkuser2.php"); ?> <?php $neubn = $_POST['neubn']; $neunn = $_POST['neunn']; $neuvn = $_POST['neuvn']; $oribn = $_POST['oribn'];

if (isset($_POST[“gesendet2”]))
{
$db = mysql_connect(“localhost”, “root”, “pw”);

$sqlab = “update benutzerdaten set benutzername = ‘$neubn’,”;
$sqlab .= “nachname = ‘$neunn’,”;
$sqlab .= “vorname = ‘$neuvn’,”;
$sqlab .= “where benutzername = ‘$oribn’”;

mysql_db_query(“tommist”, $sqlab);

$num = mysql_affected_rows();
if ($num>0)
{
echo “Der Datensatz wurde geändert

”;
}
else
{
echo “Der Datensatz wurde nicht geändert.

”;
}
mysql_close($db);
}
?>
Zurück zur Auswahl

– Antwort auf Auswahl / Eingabe –

Der Datensatz wurde nicht geändert.

!! HILFE !! Warum wird der Datensatz nicht verändert? !! HILFE !!

Thanks

mfg Tommist

Nabend,

da ich dafür bin Anleitung zur Selbsthilfe zu geben, zeig ich dir jetzt was mit dem du die Lösung deines Problems sicherlich selber hinkriegen wirst.

Grundlegendes Mysql Wissen für PHP, wie connecte ich zu einer Datenbank:

//erstmal das Connect
$dbres = mysql_connect($dbhost, $dbuser, $dbpass) or die ("konnte kein Verbindung herstellen");

//dann die Datenbank auswählen
mysql_select_db($dbname) or die ("Konnte gewählte Datenbank nicht öffnen");

//dann ein Query auf die DB, ob nun Select, Insert, oder Update, 
//der grundlegende Aufbau bleibt gleich
$result = mysql_query($sql_text, $dbres) or die ("konnte die Abfrage nicht ausführen");

//alternativ für alles wofür man kein Result erwartet
if (mysql_query($sql_text, $dbres)) {
  echo "erfolgreich";
}else{
  echo mysql_error();
}
// der vollständigkeithalber geht auch wobei man dann auf mysql_select_db verzichten kann:
$result = mysql_db_query($dbname, $sql_text, $dbres) or die ("Konnte Abfrage nicht ausführen");

//zum schluss das trennen der verbindung
mysql_close($dbres);

in $sql_text steht der jeweilige Abfrage String an die Datenbank, egal welcher das ist:

//einfache Abfrage
$sql_text = "SELECT * FROM $table [WHERE <Spaltenname> = '<Wert>']";
//einfügen
$sql_text = "INSERT INTO $table (<Spaltennamen>) VALUES (<Werte>)";
//oder alternativ
$sql_text = "INSERT INTO $table SET <Spaltenname> = '<Wert>'...";
//ändern
$sql_text = "UPDATE $table SET <Spaltenname> = '<Wert>' ... WHERE <Spaltenname> = '<Wert>'";
//löschen
$sql_text = "DELETE FROM $table WHERE <Spaltenname> = '<Wert>' LIMIT 1";
//Tabelle leeren
$sql_text = "TRUNCATE TABLE $table";
//Tabelle löschen
$sql_text = "DROP TABLE $table";

…als Beispiele für die 6 häufigsten Abfragestrings mit denen man als OttoNormal User durchaus ausreichend bedient ist.
Zu sagen bliebe noch, dass das Tabellennamen und Spaltennamen, sollten sie nicht durch eine Variable sondern direkt gesetzt werden immer in `` stehen müssen.
Beispiel: SELECT * FROM tabellenname [WHERE = ‘’]
gleiches gilt für Spaltennamen in Inserts
Beispiel: INSERT INTO tabellenname (Spalte1, Spalte2,…) VALUES (’$Wert1’, ‘$Wert2’, …)
ebenso wie für Updates
Beispiel: UPDATE tabellenname SET = ‘’ … WHERE = ‘’

Denke damit kannst du dein Problem nun selber lösen und hast auch was gelernt.

Greez

omg bin so blöd …

hab das eine ‘,’ zu viel gehabt… DANKE PHIL

Ich habe aber noch eine Frage:

Also ich hab nen login der admin + normaluser unterscheidet und daraufhin zwei verschiedene Banner (durch checkuser geschützt) läd. Jetzt würde ich noch gerne wissen wie ich machen kann das er den Inhalt genau einer Spalte bei dem eingegebenen Userdaten kontrolliert und falls die Spalte Administrator= ‘ja’ ist soll er die bannerunterscheidung machen.

Bislang habe ich 2 Tabellen (user und Admin und er kontrolliert ob der anmeldungsuser in tabelle 1 und 2 vorhandne ist).

Tommist

Problem 1 : gelöst

Moin Tommist,

ich hab dir da mal eben was zusammen gefrickelt als Beispiel:

Tabellenstruktur:

CREATE TABLE `users` (
  `id` int(10) NOT NULL auto_increment,
  `uname` varchar(100) NOT NULL default '',
  `upass` varchar(100) NOT NULL default '',
  `uadmin` int(1) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `uname` (`uname`)
) TYPE=MyISAM;

PHP/HTML Code:

<html>
<head>
	<title>Login</title>
</head>
<body>
<?php
if (isset($_GET["submit"])){
	$uname = $_GET["uname"];
	$pass = $_GET["upass"];
	$dbres = mysql_connect("localhost", "root", "");
	$result = mysql_db_query("bplaced", "SELECT * FROM `users` WHERE uname='$uname' AND upass='$pass'");
	$user = mysql_fetch_array($result);
	If ($user['uadmin'] == 0) {
		echo "du bist kein Admin";
	}else{
		echo "Hallo Admin ".$user['uname']."";
	}
	mysql_close($dbres);
}else{
?>
<form action="<?php echo $_SERVER["PHP_SELF"] ?>" methode="GET">
Username: <input type="text" name="uname"></input><br>
Passwort: <input type="text" name="upass"></input><br>
<input type="submit" name="submit" value="einloggn">
</form>
<?php
}
?>
</body>
</html>

Das ganze ist eigentlich selbst erklärend. Nach dem abschicken des Formulars sucht er in der Datenbank den entsprechenden User raus, das Result wird in nen Array zerlegt, im entsprechendem Feld wird geschaut ob 0 (kein Admin) oder 1(Admin) und dementsprechend dann die Ausgabe gestaltet.
Es empfiehlt sich immer den kompletten Datensatz zum User Xy zulesen, dann kannst du zum Beispiel alles was du brauchst in die Session schreiben oder als globale Variable nutzen und sparst dir so zukünftige Requests.
Es fehlen im obigen Beispiel noch ein paar Fehlerbehandlungen, wenn kein user in DB gefunden, dann wieder LoginForm anzeigen, evtl md5() verschlüsseltes Passwort, usw… Es soll ja lediglich als Beispiel dienen und dir die Funktion verdeutlichen.

Greez

Danke Phil,

einen Login hatte ich ja schon mit den nötigen verschüsselungen usw. .
Ich wusste allerdings nicht wie ich diese Admin / Aktiviert abfrage einbauen kann mit einer Tabelle. Dank deiner Hilfe sollte es nun klappen und mein Script wird vereinfacht.

Danke nochmal und Grüße Tommist

gelöst