Daten aus Datenbank updaten

nordi

Erfahrenes Mitglied
Hallo, ich würde gerne in einem Adminbereich Daten aus einer Datenbank updaten. Dazu lade ich die Daten in einen Textbereich wie folgt:

PHP:
Titel: <input type="hidden" name="id" value="<? echo $_GET["id"];?>">
        <textarea name="edit_titel" cols="50" rows="1"><?php
	include("../../content/config/config.php");
		
		@mysql_connect("$dbhost", "$dbuser", "$dbpass"); 
@mysql_select_db("$dbtable"); 

$sql = "SELECT * FROM $essay"; 
$result = @mysql_query($sql);  

  $ergebnis = mysql_query("SELECT titel FROM $essay WHERE id = ".$_GET["id"]."");
  while ($row = mysql_fetch_object($ergebnis))
    {
      echo $row->titel;
    }
  ?></textarea><br />
     Fachgebiet: <textarea name="edit_fachgebiet" cols="50" rows="1"><?php
	include("../../content/config/config.php");
		
		@mysql_connect("$dbhost", "$dbuser", "$dbpass"); 
@mysql_select_db("$dbtable"); 

$sql = "SELECT * FROM $essay"; 
$result = @mysql_query($sql);  

  $ergebnis = mysql_query("SELECT fachgebiet FROM $essay WHERE id = ".$_GET["id"]."");
  while ($row = mysql_fetch_object($ergebnis))
    {
      echo $row->fachgebiet;
    }
  ?></textarea>

// hier werden noch weitere Textbereiche mit Daten

Nach Klicken des Update-Button wird man weitergeleitet auf die Seite done.php, ab da weiß ich nicht genau, wie das Updaten der Datenbank durchführen soll. Es sind eventuell ca. 8 Textbereiche, die geupdatet werden können. Meine Vorgehensweise wäre jetzt, für jeden Bereich "edit_titel, edit_fachgebiet" eine SQL-Abfrage zu machen. Geht das eventuell auch anders oder effizienter? Man lernt ja nie aus.. ;)

done.php
PHP:
$sql = "UPDATE $essay SET titel = '$edit_titel' WHERE id = ".$_POST["id"]."";
$result = @mysql_query($sql); 

echo "Erfolgreich kommentiert"; 
	}
else
{
echo "geht nicht";
} ?>
 
PHP:
include '../../content/config/config.php';
mysql_connect($dbhost, $dbuser, $dbpass) or die(mysql_error());
mysql_select_db($dbtable) or die(mysql_error());

$sql = 'SELECT * FROM ' . $essay . ' WHERE id = ' . (int) $_GET['id'];
if(($result = mysql_query($sql)) && ($data = mysql_fetch_assoc($result))) {
    echo 'Titel:' . "\n";
    echo '<input type="hidden" name="id" value="' . (int) $_GET["id"] . '">' . "\n";
    echo '<textarea name="edit_titel" cols="50" rows="1">' . "\n"
    echo $data['titel'];
    echo '</textarea>' . "\n";
    echo '<br />' ."\n";
    echo 'Fachgebiet: ' . "\n";
    echo '<textarea name="edit_fachgebiet" cols="50" rows="1">' . "\n";
    echo $data['fachgebiet'];
    echo '</textarea>' . "\n";
}

Wie du siehst, habe ich dein ganzes Skript etwas aufgeräumt, denn du hast viermal ein Ergebnis von der Datenbank angefordert, wobei dies nur einmal nötig ist. Zu deinem eigentlichen Problem: du brauchst in deinem Fall nur eine Abfrage am Ende:
PHP:
$sql = 'UPDATE ' . $essay . ' SET titel = "' . $_GET['edit_titel'] . '", fachgebiet = "' . $_GET['edit_fachgebiet'] . '" WHERE id = ' . (int) $_GET['id'];
Wichtig wäre noch, dass du solche Daten vorher noch durch mysql_real_escape_string() schickst, da man Nutzereingaben nie drauen kann. Stichwort: SQL-Injection
 
Zuletzt bearbeitet:
Hi, vielen Dank! Leider werden in der Maske / Textbereichen keine Daten angezeigt. Anscheinend übernimmt er nicht die ID, nehme ich an?
 
Nur nebenbei: deine ID besteht nur aus Ziffern und nicht auch aus Buchstaben? Ansonsten lass dir mal anzeigen, was dir das hier ausgibt:
PHP:
echo $sql; # Zeile 5
 
Ja, die ID besteht nur aus Ziffern! Als Ausgabe kommt folgendes:

SELECT * FROM essaybowl WHERE id = 82
 
Hi, ja habs anders gelöst:

PHP:
 $ergebnis = mysql_query("SELECT * FROM $essay WHERE id = ".$_GET["id"].""); 
  while ($row = mysql_fetch_object($ergebnis)) 
    { 
      echo "<form name=\"formular\" method=\"post\" action=\"done.php\">";
      echo "<input type=\"hidden\" name=\"id\" value=\"".$_GET["id"]."\">";
      echo "<textarea name=\"edit_titel\" cols=\"50\" rows=\"1\">$row->titel</textarea>";
      echo "<textarea name=\"edit_dozent\" cols=\"50\" rows=\"1\">$row->dozent</textarea>";
      // usw.
      echo "<input type=\"submit\" name=\"senden\" value=\"aktualisieren\">";
    } 
  ?>

done.php
PHP:
// UPDATE BUTTON
if(isset($_POST['senden']))
	{
$sql = "UPDATE $essay SET titel = '".$_POST['edit_titel']."', fachgebiet = '".$_POST['edit_fachgebiet']."', semester = '".$_POST['edit_semester']."', doznachname = '".$_POST['edit_doznachname']."', dozvorname = '".$_POST['edit_dozvorname']."', seminarthema = '".$_POST['edit_seminarthema']."', keywords = '".$_POST['edit_keywords']."', refnachname = '".$_POST['edit_refnachname']."', refvorname = '".$_POST['edit_refvorname']."', typ = '".$_POST['edit_typ']."', note = '".$_POST['edit_note']."', proof = '".$_POST['edit_proof']."' WHERE id = '".$_POST["id"]."'";
$result = @mysql_query($sql);
echo mysql_error();

echo "Danke! Der Eintrag wurde aktualisiert!<br />";
echo "<a href=\"liste.php\">Zurück zur Liste</a> oder <a href=\"logout.php\">ausloggen</a>.";

	}
// WENN DELETE BUTTON GEDRÜCKT WURDE
elseif(isset($_POST['delete']))
{
$sql = "DELETE FROM $essay WHERE id = '".$_POST["id"]."' ";	  
$result = @mysql_query($sql);
echo mysql_error();
	
echo "Danke! Der Eintrag wurde gelöscht!<br />";
echo "<a href=\"liste.php\">Zurück zur Liste</a> oder <a href=\"logout.php\">ausloggen</a>.";
	}
else
{
echo "Es ist ein Fehler aufgetreten.";
}

Bei der Delete-Funktion wird ja nur der Eintrag aus der Datenbank gelöscht. Die Datei bleibt aber weiterhin auf dem Server? Wie kann ich auch direkt die Datei vom Server löschen?
 
Zuletzt bearbeitet:
Der Upload geht wie folgt:

PHP:
$fileName = $_FILES['userfile']['name'];
$tmpName = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];

// Datei wird mit randName auf Server gespeichert um doppelte Namen zu umgehen
$filePath = $uploadDir . $fileName;
$ext = substr(strrchr($fileName, "."), 1); 
$randName = md5(rand() * time());
$filePath = $uploadDir . $randName . '.' . $ext;

//Bei Leerzeichen im Dateinamen
if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
$filePath = addslashes($filePath);
}

// abgespeichert wird wie folgt:

$eintrag = "INSERT INTO $essay (filename,filesize,filetype,filepath,fachgebiet,semester,semesterid,doznachname,dozvorname,seminarthema,keywords,refnachname,refvorname,titel,typ,note,proof,ip,zeit) VALUES ('$fileName', '$fileSize', '$fileType', '$filePath','".$_POST['fachbereich']."','$teile[0]','$teile[1]','".$_POST['doznachname']."','".$_POST['dozvorname']."','".$_POST['seminarthema']."','".$_POST['keywords']."','".$_POST['refnachname']."','".$_POST['refvorname']."','".$_POST['titel']."','".$_POST['typ']."','".$_POST['note']."','','$ip','".time()."')";
echo mysql_error();
 
Dann musst du einfach den Dateipfad ermitteln und diese Datei dann löschen. Zum Entfernen kannst du die Funktion unlink() nutzen.
PHP:
$sql    = 'SELECT filepath FROM ' . $essay . ' WHERE id = ' . $_GET['id'];
$result = mysql_query($sql);
$data   = mysql_fetch_assoc($result);
unlink($data['filepath']);
 
Zurück