PHP, MySQL Abfragen und Weiterverarbeitung

FreshGarden

Grünschnabel
Hallo,

ich habe ein Formular, das die Variablen "Vorname" und "Spalte" an dieses Script übergibt, weil ich dieses Feld ändern möchte. Die Spalte wird über ein Dropdown-Menü ausgewählt, es ist also sichergestellt dass es diese auch gibt. Ich durchsuche dann die Datenbank nach dem Vornamen und anschließend nach dem Wert der Spalte (Muss ich das überhaupt in zwei getrennten Abfragen machen? Ich bekomme aber den Wert der Spalte ja erst durch die erste Abfrage).
Für die Update-Anweisung brauche ich doch den Namen der Spalte sowie den (alten) Wert.
Es gibt in meiner Tabelle 2 Arten von Werten: ENUM (Ja/Nein) und Varchar. Falls die betroffene Spalte vom Typ ENUM ist, möchte ich dass ein ein Dropdown Menü mit Ja/Nein erscheint. Andernfalls soll ein Texteingabefeld erscheinen.
Die restlichen notwendigen Werte für die Update-Anweisung übergebe ich dann versteckt an update.php.

Ich weiß, dass das Ganze sehr unübersichtlich ist und ich habe sicher mehr als einen Fehler gemacht. Ich habe aber keine Ahnung, wo diese sein könnten, und habe deswegen mal den gesamten Code beigefügt.

Momentan macht dieses Script gar nichts außer die beiden übergebenen Variablen auszugeben und dahinter "Datenbankzugriff erfolgreich" zu schreiben.

Vielen Dank im Voraus!
Philipp.

Code:
<html>
<head>
<title>Änderungen auswählen</title>
</head>
<body>

<?php

$host = "localhost";
$user = "********";
$password = "*****";
$dbname = "*******";
$tabelle ="*********";
$Vorname = $HTTP_POST_VARS['Vorname'];
$Spalte = $HTTP_POST_VARS['Spalte'];
		echo $Vorname;
		echo $Spalte;
$dbverbindung = mysql_connect ($host, $user, $password);
$dbanfrage = "SELECT * from $tabelle WHERE Vorname = \"$Vorname\" ";
$result = mysql_db_query ($dbname, $dbanfrage, $dbverbindung);



 
  while ($ausgabe = mysql_fetch_array ($result))
 {
      
     $WertSpalte = $ausgabe[$Spalte];   
     /* Wert der Spalte auslesen */ 
      
    
$dbanfrage2 = "SELECT * from $tabelle WHERE Vorname = \"$Vorname\" AND $Spalte = \"$WertSpalte\" "; 
/* 2. Abfrage um nur das eine Feld zu bekommen. */
$result2 = mysql_db_query ($dbname, $dbanfrage2, $dbverbindung);

         while ($ausgabe2 = mysql_fetch_array ($result2))
 {  

	        /* Eigenschaft des Feldes ermitteln: */	  
	        $menge = mysql_num_fields($result2);   
     		for($x=0;$x<$menge;$x++) 
 {     
     		$type = mysql_field_flags($result2,$x);
   			echo ("$type");
        	if ($type = "ENUM")
 {
?>

<form action="update.php" method="Post">
  <select name="NeuerWert" size="1">
  <option>Ja</option>
  <option>Nein</option>
  </select>
<input type="hidden" name="Vorname" value="<?PHP echo ("$Vorname"); ?>">
<input type="hidden" name="Spalte" value="<?PHP echo ("$Spalte"); ?>">
<input type="hidden" name="WertSpalte" value="<?PHP echo ("$WertSpalte"); ?>">

</form>

<?PHP
} else {
?>

  <form action="update.php" method="Post">
   Neuer Wert: <input name="NeuerWert" type="text" size="50">
<input type="hidden" name="Vorname" value="<?PHP echo ("$Vorname"); ?>">
<input type="hidden" name="Spalte" value="<?PHP echo ("$Spalte"); ?>">
<input type="hidden" name="WertSpalte" value="<?PHP echo ("$WertSpalte"); ?>">    
</form>
  
<?PHP
}
}
}
}




if (mysql_db_query ($dbname, $dbanfrage, $dbverbindung)) {
print ("Datenbankzugriff erfolgreich.");
} else {
print ("Es traten Probleme auf.");
}
echo mysql_error();
mysql_close ($dbverbindung);


?>

</body>
</html>
 
Zuletzt bearbeitet:
Wenn ich das richtig sehe, geht es dir nur um eine Änderung eines Wertes?
Eigentlich sollte jede Tabelle ja eine Spalte bestizen die Eindeutig ist, also einen Schlüssel darstellt.
Somit musst du, wenn du einen Datensatz zum ändern auswählst, dessen Schlüssel und den neuen Wert übergeben.
Danach baust du dir dann dein Updatestatement zusammen. Den alten Wert der zu ädernden Spalten brauchst du hierzu allerdings nicht.

Das druchsuchen der Datenbank brauchst du zum einen nicht in zwei Abragen machen, das kannst du ja alles in ein Wehere Statement fassen.
Ich frage mich nur wozu. Wenn du den von mir oben erwähnten Schlüssel verwenden würdest, kann es dir egal sein, ob der Datensatz existiert oder nicht. Denn wenn er nicht existiert, wird logischerweise auch nix geändert.

Mal ein Beispiel:
Deine Tabelle hat die Spalten ID, Vorname, Name.
Nun Liest du zum ändern den Datensatz aus und änderst diesen.
An dein Formular, welches die Veränderung verarbeitet empfängt dann die Werte ID, Vorname, Name (enweder per POST oder GET).
Und mit den Werten kannst du dir dein Änderung zusammenbauen:
PHP:
  $result = mysql_query("UPDATE `meinetabelle` SET `Vorname`=' {$_POST['Vorname']}' , `Name`='{$_POST['Name']}' WHERE `ID`= ".$_POST['ID']);
 if( ! $result )
     die("Fehler: ".mysql_error());
 else
     echo "Eitnrag erfolgreich geändert";

Das wäre grob was du zum Ändern brauchst. Zu Beachten ist allerdigns, das die neuen Werte noch nicht validiert sind!

Und die Oberfläche zum Ausählen des Datensatzes hast du ja bereits. Wichtig ist eben nur das die ID des Datensatzes irgendwie mitübergeben wird.
 
Soweit, sogut..

Hallo und vielen Dank,

ich habe mittlerweile eine Eingabemöglichkeit, bei der die alten Werte als Standardwert im Formular enthalten sind, hinbekommen. Dieses Formular schickt nun sämtliche Werte an dieses Script, und wieder mal bekomme ich nur einen weißen Bildschirm... Ich habe mal exemplarisch nur die Anrede1 drin gelassen.
Wo liegt der Fehler? Sollte ich statt dem \" was anderes schreiben? Ich habe schon einiges ausprobiert, leider ohne Erfolg.

Die Variablen scheinen ordnungsgemäß übergeben zu werden.

Wenn ich deine UPDATE-Syntax benutze, kommt genauso nur ein weißer Bildschirm:
PHP:
$result = mysql_query(UPDATE `$tabelle` SET `Anrede1`=' {$_POST['Anrede1']}'   WHERE `Kennummer`=' {$_POST['Kennummer']} ');

Code:
<html>
<head>
<title>Datenbankeintrag aendern</title>
</head>
<body>

<?PHP

$host = "localhost";
$user = "********";
$password = "********";
$dbname = "*************";
$tabelle ="**********";

$dbverbindung =  @MYSQL_CONNECT($host, $user, $password);

$Kennummer  = $HTTP_POST_VARS['Kennummer'];
$Anrede1  = $HTTP_POST_VARS['Anrede1'];
echo $Anrede1 . $Kennummer;


$dbanfrage = "UPDATE $tabelle SET Anrede1 = \"$Anrede1\" WHERE Kennummer= \"$Kennummer\" ";



$db_select = @MYSQL_SELECT_DB($dbname);
$result = mysql_query($dbanfrage);
if( ! $result ) 
     die(echo mysql_error()); 
else 
     echo "Eintrag erfolgreich geändert";

	 
echo mysql_error();
mysql_close ($dbverbindung);



?>

</body>
</html>
 
Zuletzt bearbeitet:
dieser weisse Screen erscwert natürlich das debuggen.
Probier mal zu beginn des Scriptes die folgenden Zeilen einzufügen:

PHP:
 ini_set("log_errors", 0);
  ini_set("display_errors", 1);
 ini_set("error_reporting", "E_ALL");

Das Schaltet das Loggen in ein Logfile ab, das Zeigen der errors an und Zeigt alle Erros inklusive Notices an.
Dann solltest du auch endlich mal ne Fehlermeldung sehen.
Ist das Privat bei dir auf dem Rechenr oder bei deinem Provider?
 
Original geschrieben von Ben Ben

Ist das Privat bei dir auf dem Rechenr oder bei deinem Provider?

Ich teile mir mit Freunden einen Webserver, mir gehören 10% und der Admin ist ein guter Freund von einem guten Freund von mir ;) . Er studiert Informatik, hat aber von MySQL nur wenig Ahnung. Gut möglich, dass er was in der Config verstellt hat.

Danke, ich probiere das mal aus.

Philipp.
 
Error reporting

Sorry, auch wenn ich das anschalte gibt es nur einen weißen Bildschirm. Ich gebe dir nochmal den ganzen Code:

PHP:
<html>
<head>
<title>Datenbankeintrag aendern</title>
</head>
<body>

<?php

ini_set("log_errors", 0); 
  ini_set("display_errors", 1); 
ini_set("error_reporting", "E_ALL");
 

$host = "localhost";
$user = "************";
$password = "********";
$dbname = "*********";
$tabelle ="**********";

 $dbverbindung =  @MYSQL_CONNECT($host, $user, $password); 

$Kennummer  = $HTTP_POST_VARS['Kennummer'];
$Anrede1  = $HTTP_POST_VARS['Anrede1'];
$Vorname  = $HTTP_POST_VARS['Vorname'];
$Anrede2  = $HTTP_POST_VARS['Anrede2'];
$Nachname  = $HTTP_POST_VARS['Nachname'];



echo $Anrede1 . $Nachname . $Kennummer;

$dbanfrage = "UPDATE $tabelle SET Anrede1=\"$Anrede1\" WHERE Kennummer=\"$Kennummer\"";


$db_select = @MYSQL_SELECT_DB($dbname);
$result = mysql_query($dbanfrage);
if( ! $result ) 
     die(echo mysql_error()); 
else 
     echo "Eintrag erfolgreich geändert";

if (mysql_query ($dbname, $dbanfrage, $dbverbindung)) {
print ("Datenbankzugriff erfolgreich.");
} else {
print ("Es traten Probleme auf.");
}	 
	 
	 
echo mysql_error();
mysql_close ($dbverbindung);
?>
</body>
</html>
 
Hallo,

ich wollte nur kurz Bescheid sagen, dass es jetzt geht. Ich habe deine
if( ! $result )
die(echo mysql_error());
else
echo "Eintrag erfolgreich geändert";

Schleife rauskommentiert (war mein Fehler, ich habe sie falsch geändert) und das mysql_query durch mysql_db_query ersetzt.

Vielen herzlichen Dank für deine Gedanken!
Dein Philipp.
 
Zurück