franzmann
Goto Top

MySQL Datensätze mit php-Formular ändern

Hallo,
ich habe folgendes Problem:

Ich habe hier nen Formular von einem Kollegen erhalten, was noch ein paar Fehler enthält, die ich lösen soll.

Also ich möchte gerne das ich aus dem Dropdownmenü ausgewählte Datensätze anzeigen(dieses funktioniert schon), Datensätze bearbeiten lassen kann und in der MySQL-Tabelle entsprechend aktualisieren...

Nur das aktualisieren (abspeichern) des geänderten Datensatzes funktioniert noch nicht!

Könnt ihr mir helfen?

<html>
        <head>
        <title>Unbenanntes Dokument</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
        </head>
        <body>
        
        <?php
		 //alle Fehler im Browser anzeigen
   ini_set("diplay_errors",1);  
   error_reporting(E_ALL);
   
           $db = mysql_connect("localhost","root","") or die(mysql_error());  
        
           $sqlab = "SELECT Servername FROM infotain_neu";  
        
          mysql_select_db("test", $db) or die("Konnte die Datenbank nicht  
           waehlen.");  
           
           $server = mysql_query($sqlab) or die("Anfrage nicht erfolgreich");  
           ?>

        Serverauswahl:
        <form action = "form3.php" method = "post">  
          <select name="dd">  
          <?php
   
       while ($srv = mysql_fetch_array($server)){
         echo '<option value="'.$srv['Servername'].'">'.$srv['Servername'].'</option>';  
        }
		?>
           </select><p>
            <input type = "submit">  
            <input type = "reset">  
        </form>
		
<?php
		
    //alle Fehler im Browser anzeigen
   ini_set("diplay_errors",1);  
   error_reporting(E_ALL);
   
if (isset($_POST['dd']))  
{
  $db = mysql_connect("localhost","root","") or die(mysql_error());  
    mysql_select_db("test", $db)  or die(mysql_error());  

   $sql = "SELECT * FROM infotain_neu WHERE Servername = '".$_POST['dd']."'";  

   $res = mysql_query($sql,$db);

   $altsrv = mysql_result($res, 0, "Servername");  
   $altbm = mysql_result($res, 0, "Bemerkung");  
   $altna = mysql_result($res, 0, "Netzart");  
   $altipnat = mysql_result($res, 0, "IPNAT");  
   $altiptvpn = mysql_result($res, 0, "IPTESTVPN");  
   $altipavpn = mysql_result($res, 0, "IPADMINVPN");  
   $altrsbip = mysql_result($res, 0, "RSBIP");  
   $altrsbn = mysql_result($res, 0, "RSBName");  
   $altap = mysql_result($res, 0, "Ansprechpartner");  
   $altsid = mysql_result($res, 0, "SID");  
   $altaart = mysql_result($res, 0, "Aufgabenart");  
   $althtyp = mysql_result($res, 0, "HerstellerTyp");  
   $altotyp = mysql_result($res, 0, "OSTyp");  
   $altort = mysql_result($res, 0, "Standort");  
   $altports = mysql_result($res, 0, "Ports");  
   $altoports = mysql_result($res, 0, "openPorts");  

   echo "Führen Sie die Änderungen durch,<p>";  
   echo "betätigen Sie anschließend den Button<p>";  

   echo "<form action = 'form3.php' ";  
   echo " method = 'post'>";  

   echo "<input name='neusrv' value='$altsrv'>";  
   echo " Servername<p>";  
   echo "<input name='neubm' value='$altbm'> ";  
   echo " Bemerkung<p>";  
   echo "<input name='neuna' value='$altna'>";  
   echo " Netzart<p>";  
   echo "<input name='neuipnat' value='$altipnat'>";  
   echo " IP-NAT<p>";  
   echo "<input name='neuiptvpn' value='$altiptvpn'>";  
   echo " IP-TEST-VPN<p>";  
   echo "<input type='neuipavpn' value='$altipavpn'>";  
   echo " IP-ADMIN-VPN<p>";  
   echo "<input type='neursbip' value='$altrsbip'>";  
   echo " RSB-IP<p>";  
   echo "<input type='neursbn' value='$altrsbn'>";  
   echo " RSB-Name<p>";  
   echo "<input type='neuap' value='$altap'>";  
   echo " Ansprechpartner<p>";  
   echo "<input type='neusid' value='$altsid'>";  
   echo " SID<p>";  
   echo "<input type='neuaart' value='$altaart'>";  
   echo " Aufgabenart<p>";  
   echo "<input type='neuhtyp' value='$althtyp'>";  
   echo " Hersteller-Typ<p>";  
   echo "<input type='neuotyp' value='$altotyp'>";  
   echo " OS-Typ<p>";  
   echo "<input type='neuort' value='$altort'>";  
   echo " Standort<p>";  
   echo "<input type='neuports' value='$altports'>";  
   echo " Ports<p>";  
   echo "<input type='neuoports' value='$altoports'>";  
   echo " OS-Typ<p>";  

   echo "<input type='submit' ";  
   echo " value='Änderungen in DB speichern'><p>";  
   echo "<input type='reset'>";  
   echo "</form>";  

   mysql_close($db);
}

else
   echo "Es wurde kein Datensatz ausgewählt<p>";  
?>

		<?php
    //alle Fehler im Browser anzeigen
   ini_set("diplay_errors",1);  
   error_reporting(E_ALL);
   
if (isset($_POST['submit']))  
{
   $db = mysql_connect("localhost","root","") or die(mysql_error());  
   mysql_select_db("test", $db)  or die(mysql_error());  
   
   $sqlab = "UPDATE infotain_neu SET   
   Servername = '$neusrv',  
   Bemerkung = '$neubm',  
   Netzart = '$neuna',  
   IPNAT = '$neuipnat',  
   IPTESTVPN = '$neuiptvpn',  
   IPADMINVPN = '$neuipavpn',  
   RSBIP = '$neursbip',  
   RSB = '$neuipnat',  
   RSBName = '$neursbn',  
   Ansprechpartner = '$neuap',  
   SID = '$neusid',  
   Aufgabenart = '$neuaart',  
   HerstellerTyp = '$neuhtyp',  
   OSTyp = '$neuotyp',  
   Standort = '$neuort',  
   Ports = '$neuports',  
   openPorts = '$neuoports'  
   where Servername = '".$_POST['dd']."'";  

   mysql_query($sqlab, $db) or die (mysql_error());
   $num = mysql_affected_rows();
   if ($num>0)
      echo "Der Datensatz wurde geändert<p>";  
   else
      echo "Der Datensatz wurde nicht geändert<p>";  

   mysql_close($db);
   }
   else{
   echo mysql_error();
   }
?>

        </body>
        </html>

Danke

Franzmann

Content-Key: 39847

Url: https://administrator.de/contentid/39847

Printed on: April 19, 2024 at 01:04 o'clock

Member: Dani
Dani Sep 11, 2006 at 13:11:18 (UTC)
Goto Top
Hi,
probier es mal so: Einfach bei $sqlab = "UPDATE infotain_neu SET ....jedes mal ' ". dann Variable ." '

und dann noch das Ende:
where Servername = '".$_POST['dd']." ';  ";  

Gruß
Dani
Member: Franzmann
Franzmann Sep 11, 2006 at 13:22:23 (UTC)
Goto Top
Hey,...
also...

$sqlab = "UPDATE infotain_neu SET
Servername = '".$neusrv."', <------------------------ so ?
Bemerkung = '$neubm',
Netzart = '$neuna',
IPNAT = '$neuipnat',
IPTESTVPN = '$neuiptvpn',
IPADMINVPN = '$neuipavpn',
RSBIP = '$neursbip',
RSB = '$neuipnat',
RSBName = '$neursbn',
Ansprechpartner = '$neuap',
SID = '$neusid',
Aufgabenart = '$neuaart',
HerstellerTyp = '$neuhtyp',
OSTyp = '$neuotyp',
Standort = '$neuort',
Ports = '$neuports',
openPorts = '$neuoports'
where Servername = '".$_POST['dd']."';"; <------------------------ so ?

bist du dir sicher das am ende ";"; stehen muss?

Ach noch was:

Immer wenn ich dann Ändern drücke bekomme ich die meldung(selbst erstelle Errormsg):

Es wurde kein Datensatz ausgewählt

obwohl er mir alle Details anzeigt!

Aber speichern tut der immer noch nichts in der DB-Table!
Member: filippg
filippg Sep 11, 2006 at 13:23:45 (UTC)
Goto Top
Wäre schon nett gewesen, wenn du geschrieben hättest, was denn am abspeichern nicht funktioniert.

Filipp
Member: Dani
Dani Sep 11, 2006 at 13:49:56 (UTC)
Goto Top
Hi,
also dein Progammierstil ist "unschön". Abgesehen, dass du uns nicht gesagt hast, dass der Code aus 2 Seiten besteht. Ich habe ihn mal ein bisschen überarbeitet!!

<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
</head>
<body>
        
<?php
//alle Fehler im Browser anzeigen
ini_set("diplay_errors",1);  
error_reporting(E_ALL);
   

/*Datenbankverbindung aufbauen*/
$db = mysql_connect("localhost","root","") or die(mysql_error());  
mysql_select_db("test", $db) or die("Konnte die Datenbank nicht waehlen.");  
        


echo "Serverauswahl:";  
echo "<form method='post'>";  
echo "<select name='dd'>";  
   
/*Abfrage*/
$sqlab = "SELECT Servername FROM infotain_neu";  
$server = mysql_query($sqlab) or die("Anfrage nicht erfolgreich");  
while ($srv = mysql_fetch_array($server))
 {
  echo "<option value='".$srv['Servername']."'>".$srv['Servername']."</option>";  
 }
        ?>
echo "</select><p>";  
echo "<input type = 'submit' name='senden' value='submit'>";  
echo "<input type = 'reset' name='loeschen' value='loeschen'>";  
echo "</form>";  


        
if (isset($_POST['dd']))  
{

   $sql = "SELECT * FROM infotain_neu WHERE Servername='".$_POST['dd']."';";  
   $res = mysql_query($sql);
   $row=mysql_getch_object($res);



   echo "Führen Sie die Änderungen durch,<p>";  
   echo "betätigen Sie anschließend den Button!!<p>";  

   echo "<form method='post'>";  

   echo " Servername<p>";  
   echo "<input name='neubm' value='".$row->Servername."'>";  

   echo " Bemerkung<p>";  
   echo "<input name='neuna' value='".$row->Bmerkung."'>";  

   echo " Netzart<p>";  
   echo "<input name='neuipnat' value='".$row->Netzart."'>";  

   echo " IP-NAT<p>";  
   echo "<input name='neuiptvpn' value='".$row->IPNAT."'>";  

   echo " IP-TEST-VPN<p>";  
   echo "<input type='neuipavpn' value='".$row->IPTESTVPN."'>";  

   echo " IP-ADMIN-VPN<p>";  
   echo "<input type='neursbip' value='".$row->IPADMINVPN."'>";  

   echo " RSB-IP<p>";  
   echo "<input type='neursbn' value='".$row->RSBIP."'>";  

   echo " RSB-Name<p>";  
   echo "<input type='neuap' value='".$row->RSBNAME."'>";  

   echo " Ansprechpartner<p>";  
   echo "<input type='neusid' value='".$row->SAnsprechparnter."'>";  

   echo " SID<p>";  
   echo "<input type='neuaart' value='".$row->SID."'>";  

   echo " Aufgabenart<p>";  
   echo "<input type='neuhtyp' value='".$row->Aufgabenart."'>";  

   echo " Hersteller-Typ<p>";  
   echo "<input type='neuotyp' value='".$row->Herstellertyp."'>";  

   echo " OS-Typ<p>";  
   echo "<input type='neuort' value='".$row->OSType."'>";  

   echo " Standort<p>";  
   echo "<input type='neuports' value='".$row->Standort."'>";  

   echo " Ports<p>";  
   echo "<input type='neuoports' value='".$row->Ports."'>";  


   echo "<input type='submit' value='Änderungen in DB speichern' name='submit2'><p>";  
   echo "<input type='reset' value='loeschen' name='loeschen'>";  
   echo "</form>";  
}

else
 {
  echo "Es wurde kein Datensatz ausgewählt<p>";  
 }

   
if (isset($_POST['submit2']))  
{
   $sqlab = "UPDATE infotain_neu SET   
   Servername='".$_POST['neusrv']."',  
   Bemerkung = '".$_POST['neubm']."',  
   Netzart = '".$_POST['neuna']."',  
   IPNAT = '".$_POST['neuipnat']."',  
   IPTESTVPN = '".$_POST['neuiptvpn']."',  
   IPADMINVPN = '".$_POST['neuipavpn']."',  
   RSBIP = '$".$_POST['neursbip']."',  
   RSB = '".$_POST['neuipnat']."',  
   RSBName = '".$_POST['neursbn']."',  
   Ansprechpartner = '".$_POST['neuap']."',  
   SID = '".$_POST['neusid']."',  
   Aufgabenart = '".$_POST['neuaart']."',  
   HerstellerTyp = '".$_POST['neuhtyp']."',  
   OSTyp = '".$_POST['neuotyp']."',  
   Standort = '".$_POST['neuort']."',  
   Ports = '".$_POST['neuports']."',  
   openPorts = '".$_POST['neuoports']."'  
   where Servername = '".$_POST['dd']."';";  

   mysql_query($sqlab) or die (mysql_error());
   $num = mysql_affected_rows();


   if ($num > 0) echo "Der Datensatz wurde geändert<p>";  
   else        echo "Der Datensatz wurde nicht geändert<p>";  
}
else
{
   echo mysql_error();
}
   mysql_close($db);
?>
</body>
</html>

Gruß
Dani
Member: Franzmann
Franzmann Sep 11, 2006 at 14:11:50 (UTC)
Goto Top
Sagte ich bereits... wenn ich abspeichere bzw. den Wert ändere kommt die Fehlermeldung: "Es wurde kein Datensatz ausgewählt" ! Ansonsten geht es einwandfrei...
Member: filippg
filippg Sep 11, 2006 at 16:33:45 (UTC)
Goto Top
Sagte ich bereits... wenn ich abspeichere
bzw. den Wert ändere kommt die
Fehlermeldung: "Es wurde kein Datensatz
ausgewählt" ! Ansonsten geht es
einwandfrei...
Nein, sagtest du nicht bereits - zumindest noch nicht zu dem Zeitpunkt, wo ich die Seite geladen habe.
Die Fehlermeldung sagt aus, dass "(isset($_POST['dd']))" false ergibt. Und wenn dann $_POST['dd'] in der WHERE-Klausel verwendet wird ist es auch nicht erstaunlich, das kein Datensatz geändert wird.
Du solltest die Select-Box mit Hilfe des Attributs 'size="1"' in eine Dropdown-Box umwandeln.

Daneben kann dein Ursprungscode auch nicht funktionieren, du hast mehrmals Fehler wie " echo "<input type='neuap' value='$altap'>";", da muss stat type wohl name stehen.

Filipp
Member: Chribu
Chribu Sep 12, 2006 at 08:33:36 (UTC)
Goto Top
Hallo Leute,
ich bin nen Kollege von Franzmann und wollte euch schonmal für eure Mühe danken!

Franzmann kommt morgen erst wieder, ich soll das heute für ihn übernehmen!


Die Fehlermeldung sagt aus, dass
"(isset($_POST['dd']))" false
ergibt. Und wenn dann $_POST['dd'] in der
WHERE-Klausel verwendet wird ist es auch
nicht erstaunlich, das kein Datensatz
geändert wird.

Aber warum werden die passenden Datensätze dann in den Textfeldern angezeigt?

Du solltest die Select-Box mit Hilfe des
Attributs 'size="1"' in eine
Dropdown-Box umwandeln.

Wieso? Es ist doch schon ein Dropdownmenü!?

Daneben kann dein Ursprungscode auch nicht
funktionieren, du hast mehrmals Fehler wie
" echo "<input type='neuap'
value='$altap'>";", da muss stat
type wohl name stehen.

Ah okay hab ich ausgemerzt! Danke!

Nur leider funktioniert mein Code immer noch nicht ganz:

@ Dani: Danke für deine Hilfe hier habe ich jetzt den überarbeiteten Quellcode:

<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
</head>
<body>
        
<?php
//alle Fehler im Browser anzeigen
ini_set("diplay_errors",1);  
error_reporting(E_ALL);
   

/*Datenbankverbindung aufbauen*/
$db = mysql_connect("localhost","root","") or die(mysql_error());  
mysql_select_db("test", $db) or die("Konnte die Datenbank nicht waehlen.");  
        

echo "Serverauswahl:";  
echo "<form method='post'>";  
echo "<select name='dd'>";  
   
/*Abfrage*/
$sqlab = "SELECT Servername FROM infotain_neu";  
$server = mysql_query($sqlab) or die("Anfrage nicht erfolgreich");  
while ($srv = mysql_fetch_array($server))
 {
  echo "<option value='".$srv['Servername']."'>".$srv['Servername']."</option>";  
 }
        
echo "</select><p>";  
echo "<input type = 'submit' name='senden' value='submit'>";  
echo "<input type = 'reset' name='loeschen' value='loeschen'>";  
echo "</form>";  

        
if (isset($_POST['dd']))  
{

   $sql = "SELECT * FROM infotain_neu WHERE Servername='".$_POST['dd']."';";  
   $res = mysql_query($sql);
   $row = mysql_fetch_object($res);

   echo "Führen Sie die Änderungen durch,<p>";  
   echo "betätigen Sie anschließend den Button!!<p>";  

   echo "<form method='post'>";  

   echo " Servername<p>";  
   echo "<input name='neusrv' value='".$row->Servername."'>";  

   echo " Bemerkung<p>";  
   echo "<input name='neubm' value='".$row->Bemerkung."'>";  

   echo " Netzart<p>";  
   echo "<input name='neuna' value='".$row->Netzart."'>";  

   echo " IP-NAT<p>";  
   echo "<input name='neuipnat' value='".$row->IPNAT."'>";  

   echo " IP-TEST-VPN<p>";  
   echo "<input name='neuiptvpn' value='".$row->IPTESTVPN."'>";  

   echo " IP-ADMIN-VPN<p>";  
   echo "<input name='neuipavpn' value='".$row->IPADMINVPN."'>";  

   echo " RSB-IP<p>";  
   echo "<input name='neursbip' value='".$row->RSBIP."'>";  

   echo " RSB-Name<p>";  
   echo "<input name='neursbn' value='".$row->RSBName."'>";  

   echo " Ansprechpartner<p>";  
   echo "<input name='neuap' value='".$row->Ansprechpartner."'>";  

   echo " SID<p>";  
   echo "<input name='neusid' value='".$row->SID."'>";  

   echo " Aufgabenart<p>";  
   echo "<input name='neuaart' value='".$row->Aufgabenart."'>";  

   echo " Hersteller-Typ<p>";  
   echo "<input name='neuhtyp' value='".$row->HerstellerTyp."'>";  

   echo " OS-Typ<p>";  
   echo "<input name='neuotyp' value='".$row->OSTyp."'>";  

   echo " Standort<p>";  
   echo "<input name='neuort' value='".$row->Standort."'>";  

   echo " Ports<p>";  
   echo "<input name='neuports' value='".$row->Ports."'>";  
   
   echo " openPorts<p>";  
   echo "<input name='neuoports' value='".$row->openPorts."'>";  

   echo "<input type='submit' value='Änderungen in DB speichern' name='submit2'><p>";  
   echo "<input type='reset' value='loeschen' name='loeschen'>";  
   echo "</form>";  
}

else
 {
  echo "Es wurde kein Datensatz ausgewählt<p>";  
 }

   
if (isset($_POST['submit2']))  
{
   $sqlab = "UPDATE infotain_neu SET   
   Servername='".$_POST['neusrv']."',  
   Bemerkung = '".$_POST['neubm']."',  
   Netzart = '".$_POST['neuna']."',  
   IPNAT = '".$_POST['neuipnat']."',  
   IPTESTVPN = '".$_POST['neuiptvpn']."',  
   IPADMINVPN = '".$_POST['neuipavpn']."',  
   RSBIP = '".$_POST['neursbip']."',  
   RSBName = '".$_POST['neursbn']."',  
   Ansprechpartner = '".$_POST['neuap']."',  
   SID = '".$_POST['neusid']."',  
   Aufgabenart = '".$_POST['neuaart']."',  
   HerstellerTyp = '".$_POST['neuhtyp']."',  
   OSTyp = '".$_POST['neuotyp']."',  
   Standort = '".$_POST['neuort']."',  
   Ports = '".$_POST['neuports']."',  
   openPorts = '".$_POST['neuoports']."'  
   WHERE Servername = '".$_POST['dd']."'"; //<--Zeile 127---------------------------  

   mysql_query($sqlab) or die (mysql_error());
   $num = mysql_affected_rows();

   if ($num > 0) echo "Der Datensatz wurde geändert<p>";  
   else        echo "Der Datensatz wurde nicht geändert<p>";  
}
else
{
   echo mysql_error();
}
   mysql_close($db);
?>
</body>
</html>

Doch folgende Fehler sind imme rnoch da:

"Es wurde kein Datensatz ausgewählt"


Notice: Undefined index: dd in E:\TYPO3\htdocs\form3.php on line 127
Der Datensatz wurde nicht geändert


Ich blick da grade nciht durch, woran das liegt!

Chribu
Member: filippg
filippg Sep 12, 2006 at 10:09:16 (UTC)
Goto Top
Hallo,

du hast zwei Formulare auf deiner Seite. Einmal das zum Auswählen, einmal das zum Ändern. Ersteres hat das Feld "dd", das zweite nicht. Daher kommen dann (wenn du das abschickst) die entsprechenden Fehlermeldungen und es wird kein Datensatz gespeichert. Abhilfe: ein input type="hidden" mit in das zweite Formular aufnehmen, das den Wert aus dem ersten speichert.
Zeile 127 ist bei mir übrigens 'Standort = '".$_POST['neuort']."',' , aber ich vermute, die ersten drei Zeilen gehören bei dir auch nicht wirklich zum Code.

Filipp
Member: Chribu
Chribu Sep 12, 2006 at 10:32:58 (UTC)
Goto Top
Hallo Filipp,

du hast zwei Formulare auf deiner Seite.
Einmal das zum Auswählen, einmal das zum
Ändern. Ersteres hat das Feld
"dd", das zweite nicht. Daher
kommen dann (wenn du das abschickst) die
entsprechenden Fehlermeldungen und es wird
kein Datensatz gespeichert. Abhilfe: ein
input type="hidden" mit in das
zweite Formular aufnehmen, das den Wert aus
dem ersten speichert.

Welchen Wert meinst du genau? Servername?
Und dann wird der erste Fehler mit "Es wurde kein Datensatz ausgewählt " verschwindne und die anderen Fehler auch?

Zeile 127 ist bei mir übrigens
'Standort =
'".$_POST['neuort']."',' , aber ich
vermute, die ersten drei Zeilen gehören
bei dir auch nicht wirklich zum Code.

Entschuldige mich!
Ich habe vergessen die Zeile 127 kenntlich zu machen!
Dies werde ich jetzt sofort ändern(im letzten Post von mir)

;)
Thx

Chribu
Member: filippg
filippg Sep 12, 2006 at 10:57:28 (UTC)
Goto Top
Hallo,

also:
1. Formular
echo "Serverauswahl:";  
echo "<form method='post'>";  
echo "<select name='dd'>";  
   
/*Abfrage*/
$sqlab = "SELECT Servername FROM infotain_neu";  
$server = mysql_query($sqlab) or die("Anfrage nicht erfolgreich");  
while ($srv = mysql_fetch_array($server))
 {
  echo "<option value='".$srv['Servername']."'>".$srv['Servername']."</option>";  
 }
        
echo "</select><p>";  
echo "<input type = 'submit' name='senden' value='submit'>";  
echo "<input type = 'reset' name='loeschen' value='loeschen'>";  
echo "</form>";  

Hier wird ein Input-Element mit dem Namen "dd" definiert, richtig, offensichtlich für den Servernamen. Nach dem Klicken auf den Submit-Button wird die Seite neu geladen. Es wird überprüft ob
if (isset($_POST['dd']))  
, was der Fall ist, dann wird das zweite Formular angezeigt, in dem man die Daten auch ändern kann, also folgendes:
   $sql = "SELECT * FROM infotain_neu WHERE Servername='".$_POST['dd']."';";  
   $res = mysql_query($sql);
   $row = mysql_fetch_object($res);

   echo "Führen Sie die Änderungen durch,<p>";  
   echo "betätigen Sie anschließend den Button!!<p>";  

   echo "<form method='post'>";  

   echo " Servername<p>";  
   echo "<input name='neusrv' value='".$row->Servername."'>";  

   echo " Bemerkung<p>";  
   echo "<input name='neubm' value='".$row->Bemerkung."'>";  

   echo " Netzart<p>";  
   echo "<input name='neuna' value='".$row->Netzart."'>";  
[...]
Dieses Formular enthält kein Input mit dem Namen "dd". Das ist der Fehler. Wenn man hier auf den Submit-Button (heisst hier "submit2") klickt, dann wir die Seite wieder neu geladen. Es wird wieder die Abfrage
if (isset($_POST['dd']))  
ausgeführt (frag bitte nicht wo, diese Zeile kommt nur einmal vor), diese wird nach false ausgewertet (weil ja nur die Daten des Formulars, dessen Submit-Button gedrückt wurde übermittelt wurden, und dieses Formular kein Feld Namens "dd" enthält), also wird im else-Zweig die Meldung "Es wurde kein Datensatz ausgewählt" ausgegeben. Danach wird überprüft, ob
if (isset($_POST['submit2']))  
, was Wahr ergibt, also wird der Zweig ausgeführt. Dort soll dann in Zeile 127 die Variable $_POST['dd'] verwendet werden, die aber nicht existiert (wir erinnern uns: im zweiten Formular, das übermittelt wurde ist sie nicht vorhanden). Das führt dann natürlich zu einem Fehler ("Notice: Undefined index: dd in E:\TYPO3\htdocs\form3.php on line 127"), weswegen auch keine Änderungen gespeichert werden.

Lösung: füge in das Zweite Formular noch die Zeile echo "<input type='hidden' name='dd' value='"..$_POST['dd']."'>" ein, also etwa:
   $sql = "SELECT * FROM infotain_neu WHERE Servername='".$_POST['dd']."';";  
   $res = mysql_query($sql);
   $row = mysql_fetch_object($res);

   echo "Führen Sie die Änderungen durch,<p>";  
   echo "betätigen Sie anschließend den Button!!<p>";  

   echo "<form method='post'>";  

echo "<input type='hidden' name='dd' value='".$_POST['dd']."'>"  

   echo " Servername<p>";  
   echo "<input name='neusrv' value='".$row->Servername."'>";  


Dann solltest du noch die Blöcke
if (isset($_POST['dd']))  
{
 [...]
}
und
if (isset($_POST['submit2']))  
{
[...]
}
vertauschen (sprich: letzteren zuerst), dann wird nämlich beim Speichern die Änderung erst gespeichert, dann wieder ausgelesen und angezeigt, so dass man die Änderung gleich nochmal kontrollieren kann. Ansonsten würden hier nochmal die alten Daten angezeigt.
(Nochmal deutlich: nicht die Anweisungen innerhalb der if-Zweige austauschen, sondern den ganzen Block, inklusive der ifs, nur die Reihenfolge tauschen).

So, für sowas nehme ich normalerweise einen ordentlichen Stundensatz...

Filipp
Member: Chribu
Chribu Sep 12, 2006 at 11:25:36 (UTC)
Goto Top
Hallo Fillip,

erst einmal möchte ich ein großes Lob an dich aussprechen!

Super das du das gemacht hast, jetzt blicke ich da etwas mehr durch danke!!!!

So jetzt folgendes:

Nachdem ich die beiden If-Blöcke getauscht habe und meine Details für einen Server ausgebebn lassen wollte bekam ich folgende Fehlermeldungen:

Warning: mysql_query() [function.mysql-query]: Access denied for user 'ODBC'@'localhost' (using password: NO) in E:\TYPO3\htdocs\form3.php on line 75

Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in E:\TYPO3\htdocs\form3.php on line 75

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in E:\TYPO3\htdocs\form3.php on line 76

und zwischen den einzelnen Feldern:
Notice: Trying to get property of non-object in E:\TYPO3\htdocs\form3.php on line 86


So anhand der aufschluss reichen Fehlermeldung "A link to the server could not be established ", habe ich mal das mysql_close($db); auskommentiert und siehe da... ...er ändert eienn Datensatz in der Datenbank zeigt aber nach dem Submit des geänderten Datensatzes wieder folgende Fehler:

Notice: Trying to get property of non-object in E:\TYPO3\htdocs\form3.php on line 86 usw

Anscheinend verliert er nach einem submit irgendwelche zugehörigkeiten..`?

Also dank dir speichert er endlich geänderte Daten ab nur die Fehler sind noch da. (property of non...)

Fillip SUPER-Leistung DANKEEE!

Chribu
Member: filippg
filippg Sep 12, 2006 at 11:38:38 (UTC)
Goto Top
Hallo,

die Fehler in Zeile 75 und 76 kamen, weil die DB-Verbindung wieder geschlossen wurde, das hast du wohl richtig erkannt. Das mysql_close() solltest du als letzte Zeile ruhig im Code lassen (gehört ja auch nicht mehr zu den if-Blöcken, die zu tauschen ich dir empfohlen habe). Für den Fehler in Zeile 86 vermute ich einen einfachen Syntax-Fehler (Punkt zuviel o.ä.), nur habe ich keine Ahnung, was bei dir jetzt Zeile 86 ist.

Filipp
Member: Chribu
Chribu Sep 12, 2006 at 11:48:36 (UTC)
Goto Top
Hi Fillip,

der Fehler hier:

Notice: Trying to get property of non-object in E:\TYPO3\htdocs\form3.php on line 86

tritt nicht nur in Zeile 86 auf, sondern auch:
86,92,95..bis 131 auf:

hier meine letzten Zeilen:

if (isset($_POST['dd']))   //<<<<<<Zeile71---------------------------------  
{

   $sql = "SELECT * FROM infotain_neu WHERE Servername='".$_POST['dd']."';";  
   $res = mysql_query($sql);
   $row = mysql_fetch_object($res);

   echo "Führen Sie die Änderungen durch,<p>";  
   echo "betätigen Sie anschließend den Button!!<p>";  

   echo "<form method='post'>";  

   echo "<input type='hidden' name='dd' value='".$_POST['dd']."'>";  
	
   echo " Servername<p>";  
   echo "<input name='neusrv' value='".$row->Servername."'>";  

   echo " Bemerkung<p>";  
   echo "<input name='neubm' value='".$row->Bemerkung."'>";  

   echo " Netzart<p>";  
   echo "<input name='neuna' value='".$row->Netzart."'>";  

   echo " IP-NAT<p>";  
   echo "<input name='neuipnat' value='".$row->IPNAT."'>";  

   echo " IP-TEST-VPN<p>";  
   echo "<input name='neuiptvpn' value='".$row->IPTESTVPN."'>";  

   echo " IP-ADMIN-VPN<p>";  
   echo "<input name='neuipavpn' value='".$row->IPADMINVPN."'>";  

   echo " RSB-IP<p>";  
   echo "<input name='neursbip' value='".$row->RSBIP."'>";  

   echo " RSB-Name<p>";  
   echo "<input name='neursbn' value='".$row->RSBName."'>";  

   echo " Ansprechpartner<p>";  
   echo "<input name='neuap' value='".$row->Ansprechpartner."'>";  

   echo " SID<p>";  
   echo "<input name='neusid' value='".$row->SID."'>";  

   echo " Aufgabenart<p>";  
   echo "<input name='neuaart' value='".$row->Aufgabenart."'>";  

   echo " Hersteller-Typ<p>";  
   echo "<input name='neuhtyp' value='".$row->HerstellerTyp."'>";  

   echo " OS-Typ<p>";  
   echo "<input name='neuotyp' value='".$row->OSTyp."'>";  

   echo " Standort<p>";  
   echo "<input name='neuort' value='".$row->Standort."'>";  

   echo " Ports<p>";  
   echo "<input name='neuports' value='".$row->Ports."'>";  
   
   echo " openPorts<p>";  
   echo "<input name='neuoports' value='".$row->openPorts."'>";  

   echo "<input type='submit' value='Änderungen in DB speichern' name='submit2'><p>";  
   echo "<input type='reset' value='loeschen' name='loeschen'>";  
   echo "</form>";//<<<<<<<<<<Zeile 135-----------------------------------  
}

else
 {
  echo "Es wurde kein Datensatz ausgewählt<p>";  
 }
Member: filippg
filippg Sep 12, 2006 at 12:06:49 (UTC)
Goto Top
Da stehe ich auch gerade etwas auf dem Schlauch.
Er kann wohl nicht per $row->... auf die Datenfelder zugreifen. Ich würde also davon ausgehen, dass $row nicht definiert/leer ist. Das wiederum würde bedeuten, dass die Abfrage keine Zeilen zurückliefert. Was natürlich etwas seltsam wäre.... überprüf doch mal, was zu diesem Zeitpunkt in $_POST['dd'] ist (z.B. in dem du im HTML-Quelltest einfach mal schaust, was in dem hidden-Field steht). Und dann lass dir mal ausgeben, wieviel Zeilen die Abfrage zurückgibt. Und wenn du es dann nicht findest poste halt nochmal den ganzen akutellen Code.

Filipp
Member: Chribu
Chribu Sep 12, 2006 at 12:16:16 (UTC)
Goto Top
Hi Fillip,

hier ist mal nen Auszug aus dem Quelltext(HTML):

<input type='hidden' name='dd' value='test'> Also wurde "Test" erfolgreich übergeben!!!

"TEST" stimmt auch!

Aber bei all den anderen feldern ist value=' ' =>leer

Aber das sind ja auch nur Notices keine Warnings!

Lso könnte ich die auch, wenn wir die Fehlerquelle nicht feststellen können, das einfach nicht anzeigen lassen d.h. E_NOTICE ...

Cya

Chribu
Member: Chribu
Chribu Sep 12, 2006 at 12:43:44 (UTC)
Goto Top
Hi Fillip,

ich habe noch was rausgefunden, um das Problem noch ein bisschen einzugrenzen!

Er gibt mir nur diese komischen Fehler aus, wenn ich den Inhalt des ersten Feldes(Servername) ändere!!(er speichert zwar aber gibt Fehler aus notice blabla)

Bei den anderen kann ich so oft ändern wie ich will und es läuft!

Cya

Chribu
Member: filippg
filippg Sep 12, 2006 at 13:10:42 (UTC)
Goto Top
Oh ja, das hatte ich übersehen, das man den ändern kann.
Damit ist der Fehler völlig klar. Wenn du den Servernamen änderst, dann aber die Details zu dem alten Servernamen abfragst liefert er natürlich kein Ergebnis mehr zurück.
Das ist ein bisschen auch eine Frage von Datenbankdesign - jede Tabelle sollt ein Primärschlüsselattribut besitzen, und dessen Werte sollten sich nicht ändern. Und mit diesem Primärschlüssel sollte man dann in Anwendungen auf die einzelnen Zeilen zugreifen.

Abhilfe:
Füge ganz oben ein
$anzuzeigenderServer = "";  
if (isset($_POST['dd']))  
  $anzuzeigenderServer = $_POST['dd'];  

Dann in dem Block für das Update hinzufügen:
$anzuzeigenderServer = $_POST['neusrv'];  

und ändere in
if (isset($_POST['dd']))  
{

   $sql = "SELECT * FROM infotain_neu WHERE Servername='".$_POST['dd']."';";  
   $res = mysql_query($sql);
   $row = mysql_fetch_object($res);
die SQL-Anfrage in
$sql = "SELECT * FROM infotain_neu WHERE Servername='".$anzuzeigenderServer."';";  
Wenn jetzt innerhalb des Update-Blocks der Servername geändert wird, dann wird nachher bei der Abfrage der neue Wert verwendet, nicht mehr der in der POST-Variable abgelegte alte. Wird der Update-Block nich durchlaufen (also beim ersten Aufruf, wo die Details angezeigt und noch nicht geändert werden) so sind $anzuzeigenderServer und $_POST['dd'] gleich.


Andere Möglichkeit:
Ändere in
if (isset($_POST['dd']))  
{

   $sql = "SELECT * FROM infotain_neu WHERE Servername='".$_POST['dd']."';";  
   $res = mysql_query($sql);
   $row = mysql_fetch_object($res); [...]
die if-Bedingung in
if (isset($_POST['dd']) AND !isset($_POST['submit2']))  
damit werden nach der Änderung die aktualisierten Daten einfach nicht mehr angezeigt, und damit hat sich auch das Problem erledigt, wie man sie abfragen soll.

Grundsätzlich ist das ganze aber unsauber. Wenn man bei zwei Datensätzen den selbern Servernamen eingibt wirken alle Änderungen später immer auf beide aus (und man kann sie auch nur als einen anzeigen).

Filipp
Member: Chribu
Chribu Sep 12, 2006 at 13:22:18 (UTC)
Goto Top
irgendwie klappt das noch net so!

Hab ich das so richtig gemacht?

<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
</head>
<body>
        
<?php
//alle Fehler im Browser anzeigen
ini_set("diplay_errors",1);  
error_reporting(E_ALL);
   

/*Datenbankverbindung aufbauen*/
$db = mysql_connect("localhost","root","") or die(mysql_error());  
mysql_select_db("test", $db) or die("Konnte die Datenbank nicht waehlen.");  
        

echo "Serverauswahl:";  
echo "<form method='post'>";  
echo "<select name='dd'>";  
   
/*Abfrage*/
$sqlab = "SELECT Servername FROM infotain_neu";  
$server = mysql_query($sqlab) or die("Anfrage nicht erfolgreich");  
while ($srv = mysql_fetch_array($server))
 {
  echo "<option value='".$srv['Servername']."'>".$srv['Servername']."</option>";  
 }
        
echo "</select><p>";  
echo "<input type = 'submit' name='senden' value='submit'>";  
echo "<input type = 'reset' name='loeschen' value='loeschen'>";  
echo "</form>";  

if (isset($_POST['submit2']))  
{
   $anzuzeigenderServer = $_POST['neusrv'];  
   $sqlab = "UPDATE infotain_neu SET   
   Servername='".$_POST['neusrv']."',  
   Bemerkung = '".$_POST['neubm']."',  
   Netzart = '".$_POST['neuna']."',  
   IPNAT = '".$_POST['neuipnat']."',  
   IPTESTVPN = '".$_POST['neuiptvpn']."',  
   IPADMINVPN = '".$_POST['neuipavpn']."',  
   RSBIP = '".$_POST['neursbip']."',  
   RSBName = '".$_POST['neursbn']."',  
   Ansprechpartner = '".$_POST['neuap']."',  
   SID = '".$_POST['neusid']."',  
   Aufgabenart = '".$_POST['neuaart']."',  
   HerstellerTyp = '".$_POST['neuhtyp']."',  
   OSTyp = '".$_POST['neuotyp']."',  
   Standort = '".$_POST['neuort']."',  
   Ports = '".$_POST['neuports']."',  
   openPorts = '".$_POST['neuoports']."'  
   WHERE Servername = '".$_POST['dd']."'";  

   mysql_query($sqlab) or die (mysql_error());
   $num = mysql_affected_rows();

   if ($num > 0) echo "Der Datensatz wurde geändert<p>";  
   else        echo "Der Datensatz wurde nicht geändert<p>";  
}
else
{
   echo mysql_error();
}

$anzuzeigenderServer = "";   
        
if (isset($_POST['dd']))  
{
   $anzuzeigenderServer = $_POST['dd'];  
   $sql = "SELECT * FROM infotain_neu WHERE Servername='".$anzuzeigenderServer."'";  
   $res = mysql_query($sql);
   $row = mysql_fetch_object($res);

   echo "Führen Sie die Änderungen durch,<p>";  
   echo "betätigen Sie anschließend den Button!!<p>";  

   echo "<form method='post'>";  

   echo "<input type='hidden' name='dd' value='".$_POST['dd']."'>";  
	
   echo " Servername<p>";  
   echo "<input name='neusrv' value='".$row->Servername."'>";  

   echo " Bemerkung<p>";  
   echo "<input name='neubm' value='".$row->Bemerkung."'>";  

   echo " Netzart<p>";  
   echo "<input name='neuna' value='".$row->Netzart."'>";  

   echo " IP-NAT<p>";  
   echo "<input name='neuipnat' value='".$row->IPNAT."'>";  

   echo " IP-TEST-VPN<p>";  
   echo "<input name='neuiptvpn' value='".$row->IPTESTVPN."'>";  

   echo " IP-ADMIN-VPN<p>";  
   echo "<input name='neuipavpn' value='".$row->IPADMINVPN."'>";  

   echo " RSB-IP<p>";  
   echo "<input name='neursbip' value='".$row->RSBIP."'>";  

   echo " RSB-Name<p>";  
   echo "<input name='neursbn' value='".$row->RSBName."'>";  

   echo " Ansprechpartner<p>";  
   echo "<input name='neuap' value='".$row->Ansprechpartner."'>";  

   echo " SID<p>";  
   echo "<input name='neusid' value='".$row->SID."'>";  

   echo " Aufgabenart<p>";  
   echo "<input name='neuaart' value='".$row->Aufgabenart."'>";  

   echo " Hersteller-Typ<p>";  
   echo "<input name='neuhtyp' value='".$row->HerstellerTyp."'>";  

   echo " OS-Typ<p>";  
   echo "<input name='neuotyp' value='".$row->OSTyp."'>";  

   echo " Standort<p>";  
   echo "<input name='neuort' value='".$row->Standort."'>";  

   echo " Ports<p>";  
   echo "<input name='neuports' value='".$row->Ports."'>";  
   
   echo " openPorts<p>";  
   echo "<input name='neuoports' value='".$row->openPorts."'>";  

   echo "<input type='submit' value='Änderungen in DB speichern' name='submit2'><p>";  
   echo "<input type='reset' value='loeschen' name='loeschen'>";  
   echo "</form>";  
}

else
 {
  echo "Es wurde kein Datensatz ausgewählt<p>";  
 }
mysql_close($db);
?>
</body>
</html>

Danke nochmal für deine Hilfe!

Chribu
Member: filippg
filippg Sep 12, 2006 at 13:29:09 (UTC)
Goto Top
Nein, das ist so nicht richtig.
$anzuzeigenderServer = "";  
if (isset($_POST['dd']))  
  $anzuzeigenderServer = $_POST['dd'];  
solltest du ganz oben einfügen. Sprich: z.B. hinter "error_reporting(E_ALL);".


Also, ganzer Code:

<html>
<head>
<title>Unbenanntes Dokument</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
</head>
<body>
        
<?php
//alle Fehler im Browser anzeigen
ini_set("diplay_errors",1);  
error_reporting(E_ALL);

$anzuzeigenderServer = "";  
if (isset($_POST['dd']))  
  $anzuzeigenderServer = $_POST['dd'];  
   

/*Datenbankverbindung aufbauen*/
$db = mysql_connect("localhost","root","") or die(mysql_error());  
mysql_select_db("test", $db) or die("Konnte die Datenbank nicht waehlen.");  
        

echo "Serverauswahl:";  
echo "<form method='post'>";  
echo "<select name='dd'>";  
   
/*Abfrage*/
$sqlab = "SELECT Servername FROM infotain_neu";  
$server = mysql_query($sqlab) or die("Anfrage nicht erfolgreich");  
while ($srv = mysql_fetch_array($server))
 {
  echo "<option value='".$srv['Servername']."'>".$srv['Servername']."</option>";  
 }
        
echo "</select><p>";  
echo "<input type = 'submit' name='senden' value='submit'>";  
echo "<input type = 'reset' name='loeschen' value='loeschen'>";  
echo "</form>";  

if (isset($_POST['submit2']))  
{
   $anzuzeigenderServer = $_POST['neusrv'];  
   $sqlab = "UPDATE infotain_neu SET   
   Servername='".$_POST['neusrv']."',  
   Bemerkung = '".$_POST['neubm']."',  
   Netzart = '".$_POST['neuna']."',  
   IPNAT = '".$_POST['neuipnat']."',  
   IPTESTVPN = '".$_POST['neuiptvpn']."',  
   IPADMINVPN = '".$_POST['neuipavpn']."',  
   RSBIP = '".$_POST['neursbip']."',  
   RSBName = '".$_POST['neursbn']."',  
   Ansprechpartner = '".$_POST['neuap']."',  
   SID = '".$_POST['neusid']."',  
   Aufgabenart = '".$_POST['neuaart']."',  
   HerstellerTyp = '".$_POST['neuhtyp']."',  
   OSTyp = '".$_POST['neuotyp']."',  
   Standort = '".$_POST['neuort']."',  
   Ports = '".$_POST['neuports']."',  
   openPorts = '".$_POST['neuoports']."'  
   WHERE Servername = '".$_POST['dd']."'";  

   mysql_query($sqlab) or die (mysql_error());
   $num = mysql_affected_rows();

   if ($num > 0) echo "Der Datensatz wurde geändert<p>";  
   else        echo "Der Datensatz wurde nicht geändert<p>";  
}
else
{
   echo mysql_error();
}

        
if (isset($_POST['dd']))  
{
   $sql = "SELECT * FROM infotain_neu WHERE Servername='".$anzuzeigenderServer."'";  
   $res = mysql_query($sql);
   $row = mysql_fetch_object($res);

   echo "Führen Sie die Änderungen durch,<p>";  
   echo "betätigen Sie anschließend den Button!!<p>";  

   echo "<form method='post'>";  

   echo "<input type='hidden' name='dd' value='".$_POST['dd']."'>";  
    
   echo " Servername<p>";  
   echo "<input name='neusrv' value='".$row->Servername."'>";  

   echo " Bemerkung<p>";  
   echo "<input name='neubm' value='".$row->Bemerkung."'>";  

   echo " Netzart<p>";  
   echo "<input name='neuna' value='".$row->Netzart."'>";  

   echo " IP-NAT<p>";  
   echo "<input name='neuipnat' value='".$row->IPNAT."'>";  

   echo " IP-TEST-VPN<p>";  
   echo "<input name='neuiptvpn' value='".$row->IPTESTVPN."'>";  

   echo " IP-ADMIN-VPN<p>";  
   echo "<input name='neuipavpn' value='".$row->IPADMINVPN."'>";  

   echo " RSB-IP<p>";  
   echo "<input name='neursbip' value='".$row->RSBIP."'>";  

   echo " RSB-Name<p>";  
   echo "<input name='neursbn' value='".$row->RSBName."'>";  

   echo " Ansprechpartner<p>";  
   echo "<input name='neuap' value='".$row->Ansprechpartner."'>";  

   echo " SID<p>";  
   echo "<input name='neusid' value='".$row->SID."'>";  

   echo " Aufgabenart<p>";  
   echo "<input name='neuaart' value='".$row->Aufgabenart."'>";  

   echo " Hersteller-Typ<p>";  
   echo "<input name='neuhtyp' value='".$row->HerstellerTyp."'>";  

   echo " OS-Typ<p>";  
   echo "<input name='neuotyp' value='".$row->OSTyp."'>";  

   echo " Standort<p>";  
   echo "<input name='neuort' value='".$row->Standort."'>";  

   echo " Ports<p>";  
   echo "<input name='neuports' value='".$row->Ports."'>";  
   
   echo " openPorts<p>";  
   echo "<input name='neuoports' value='".$row->openPorts."'>";  

   echo "<input type='submit' value='Änderungen in DB speichern' name='submit2'><p>";  
   echo "<input type='reset' value='loeschen' name='loeschen'>";  
   echo "</form>";  
}

else
 {
  echo "Es wurde kein Datensatz ausgewählt<p>";  
 }
mysql_close($db);
?>
</body>
</html>

?>

Filipp
Member: Guenni
Guenni Sep 12, 2006 at 22:34:58 (UTC)
Goto Top
@Franzmann

Hi,

ich würde das Script auf mehrere Seiten verteilen.

Zum einen ist es übersichtlicher, zum anderen weniger fehleranfällig,
bzw. Fehler können leichter eingegrenzt werden.

Der Übersichtlichkeit halber habe ich eine auf meinem Webserver
vorhandene Tabelle benutzt.

Eine Index-Seite(index.php). Hier wird mittels DropDown-Box ein PC ausgewählt.
Das Formular wird an die Seite edit.php gesendet.


<html>
        <head>
        <title>Unbenanntes Dokument</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
        </head>
        <body>
        
<?
//alle Fehler im Browser anzeigen
ini_set("diplay_errors",1);  
error_reporting(E_ALL);
$conn=mysql_connect("localhost","guenni","guenni") or die(mysql_error());  
$db=mysql_select_db("test") or die("Konnte die Datenbank nicht waehlen.");  
$sql="SELECT id,computer FROM computer";  
$result=mysql_query($sql,$conn) or die("Anfrage nicht erfolgreich");  
?>
Serverauswahl:
<form action = "edit.php" method = "post">  
<select name="server">  
<?
while ($srv = mysql_fetch_array($result,MYSQL_ASSOC)){
 echo "<option value=$srv[id]>$srv[computer]</option>";  
}
?>
</select><p>
<input type = "submit" name="cmd" value="Abfragen">  
<input type = "reset" value="Zurücksetzen">  
</form>
</html>

Die Seite edit.php sucht anhand echo "<option value=$srv[id]>...
den richtigen Datensatz über die id in der Tabelle.

<?
//alle Fehler im Browser anzeigen
ini_set("diplay_errors",1);  
error_reporting(E_ALL);
$conn=mysql_connect("localhost","guenni","guenni") or die(mysql_error());  
$db=mysql_select_db("test") or die("Konnte die Datenbank nicht waehlen.");  
$sql="SELECT * FROM computer WHERE id = $server";  
$result = mysql_query($sql,$conn);
echo "<form action = 'update.php' method = 'post'>";  
$row=mysql_fetch_array($result,MYSQL_BOTH);
echo "<input type=hidden name=id value=$row[id]><p>";  
echo "<input type=text name=computer value=$row[computer]><p>";  
echo "<input type=text name=prozessor value=$row[prozessor]><p>";  
echo "<input type=text name=mainboard value=$row[mainboard]><p>";  
echo "<input type=text name=festplatte value=$row[festplatte]><p>";  
echo "<input type=text name=speicher value=$row[speicher]><p>";  

echo "<input type='submit' name='cmd' value='Aendern'>";  
echo "<input type='reset'>";  
echo "</form>";  
?>

Klickt man nun auf Aendern, so wird die Seite update.php
aufgerufen.

<?
//alle Fehler im Browser anzeigen
ini_set("diplay_errors",1);  
error_reporting(E_ALL);
$conn = mysql_connect("localhost","guenni","guenni") or die(mysql_error());  
$db=mysql_select_db("test")  or die(mysql_error());  
$sql="UPDATE computer set ";  
$sql.="computer='$computer',";  
$sql.="prozessor='$prozessor',";  
$sql.="mainboard='$mainboard',";  
$sql.="festplatte='$festplatte',";  
$sql.="speicher=$speicher";  
$sql.=" where id=$id";  
mysql_query($sql, $conn) or die (mysql_error());
header("location:result.php?id=$id");  
?>

In der Seite edit.php gibt's ein verstecktes Feld id.
In der Seite Update werden nun die Felder des Datensatzes id
durch die Felder im Formular der Seite edit.php ersetzt.

Der Befehl header("location:result.php?id=$id"); ruft nun die
Seite result.php mit den geänderten Werten auf.

<?
//alle Fehler im Browser anzeigen
ini_set("diplay_errors",1);  
error_reporting(E_ALL);
$conn=mysql_connect("localhost","guenni","guenni") or die(mysql_error());  
$db=mysql_select_db("test") or die("Konnte die Datenbank nicht waehlen.");  
$sql="SELECT * FROM computer WHERE id = $id";  
$result = mysql_query($sql,$conn);
$row=mysql_fetch_array($result,MYSQL_ASSOC);
echo "<table border=1>";  
echo "<tr>";  
while($field=key($row)){
 echo "<th>";  
 echo $field;
 next($row);
}
echo "</tr>";  
$result = mysql_query($sql,$conn);
while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
 echo "<tr><td>";  
 echo implode("<td>",$row);  
}
echo "</table>";  
echo "<a href=edit.php?server=$id title='Aendern'>Aendern?</a>  ";  
echo "<a href=index.php title='Zurueck zur Startseite'>Beibehalten</a>";  
?>

Am Schluß der Seite result.php werden zwei Links angezeigt.
Der erste Link geht zurück nach edit.php, mit der Variablen Server,
Inhalt der Variablen: die id des geänderten Datensatzes.

Klickt man den Link an, wird der Datensatz erneut zum Ändern angezeigt.

Der zweite Link ruft einfach die Startseite wieder auf.

Gruß
Günni

PS.: Das Abrufen von gesendeten Variablen über $_POST['Vari'] oder
"select ...... where Spalte='".$_POST['dd']."'"; kannst du dir sparen.

Ein Textfeld <input type="text" name="eingabe"..... > in einem Formular,
kannst du ganz normal mit Variable=$eingabe zuordnen bzw. mit
"select...... where Spalte=$eingabe"; verwerten.

In einem Select gilt dann:

Zeichenketten mit Hochkomma: "select...... where Spalte='$eingabe'";
Zahlen ohne Hochkomma: "select...... where Spalte=$eingabe";
Member: Chribu
Chribu Sep 13, 2006 at 06:49:05 (UTC)
Goto Top
Morgen Filipp!!

Leider funktioniert das immer noch nicht! *verzweifel*

@günni

Danke, werde ich aufsplitten wie du gesagt has, aber erst muss das erstmal laufen^^

Cya

Chribu
Member: Chribu
Chribu Sep 13, 2006 at 09:23:18 (UTC)
Goto Top
Hi Fillip,

es geht doch! Er speichert alles richtig ab!

Wenn ich den Datensatz jetzt ändere, ist er zwar richtig in der DB gespeichert aber im Dropdownmenü ist dann immernoch die alte Serverbezeichnung!

Das kann ich doch bestimmt beheben irgendwie, wenn ich nach der Aktualisierung (DB-Speicherung) das Dropdownmenü aktualiesieren lasse oder?

Cya

Chribu
Member: filippg
filippg Sep 13, 2006 at 10:40:35 (UTC)
Goto Top
Hallo,

naja... die Lösung ist eigentlich eher einfach... da könnte man mit etwas Nachdenken schon drauf kommen...
Für die Dropdownlist liest er die Servernamen aus der DB aus und gibt sie aus. Wenn ich das vor der Aktualisierung mache steht natürlich noch der alte Name drin. Wenn ich es danach mache... Insofern könnte es hilfreich sein, die Dropdownlist einfach hinter den Update-Block zu verschieben.
Dann würde sich übrigens noch anbieten die while-Schleife etwas abzuändern, etwa:
while ($srv = mysql_fetch_array($server))
 {
  echo "<option value='".$srv['Servername']."'";  
  if($srv['Servername'] == $anzuzeigenderServer)  
    echo " selected";  
  echo ">".$srv['Servername']."</option>";  
 }
Damit hier immer der Server ausgewählt ist, dessen Details angezeigt werden sollen.

Filipp
Member: Chribu
Chribu Sep 13, 2006 at 11:47:48 (UTC)
Goto Top
Hallo Filipp,

naja... die Lösung ist eigentlich eher
einfach... da könnte man mit etwas
Nachdenken schon drauf kommen...

Oh mist das war ja echt einfach *peinlich*

Nochmals VIELEN DANK!

Du hast mich einen riesen Schritt weitergebracht!

Cya

Chribu
Member: Franzmann
Franzmann Sep 15, 2006 at 09:40:06 (UTC)
Goto Top
fertig!