Dateipfad in Datenbank erstellen

jojojan

Mitglied
Hallo Leute,
ich bin neu hier und blutiger Anfänger was php und mysql betrifft.Ich hab mir jetzt aus mehreren Scripts eins zusammen gebaut,was auch soweit ganz gut käuft.Ich hab mir ein Formular gebastelt was auch eine Datei uploaded,die datei wird auch gespeichert,doch wie krieg ich es hin dass der Dateiname in der Datenbank gespeichert wird?Ich hab auch schon die Sufu benutzt doch das klappt alles nicht :(
Ich wäre froh wenn ihr mir ein paar Tipps geben könnten.:)
Gruß jojojan
PHP:
<html>
<head>
<title>Upload</title>
</head>
<body><?
include "config1.php";
if(isset($_POST["send"]))

{
	// Fehlerabfrage
	if(empty($_POST["benutzername"])): die("Sie müssen Ihren Benutzernamen eingeben<br />"); endif;
	if(empty($_POST["artikel"])): die("Sie müssen schreiben um welchen Artikel es sich handelt<br />"); endif;


	if(empty($_POST["beschreibung"])): die("Sie müssen den Artikel beschreiben<br />"); endif;
	// Eintrag der Daten
	mysql_query("INSERT INTO vorschlag(id, benutzername, artikel, beschreibung) VALUES (NULL, '".$_POST["benutzername"]."', '".$_POST["artikel"]."', '".nl2br($_POST["beschreibung"])."')");
	$num = mysql_affected_rows();
	if ($num > 0)
	{
		print "Eintrag wurde erfolgreich eingetragen";
	}
	else
	{
		print "Es ist ein Fehler aufgetreten, Eintrag wurde nicht eingetragen.";
	}

$path = "upload/"; // Url zum Speicher Ordner
$filename = "";
$deindomain = "http://localhost/1/";
$time=time();
if ($HTTP_POST_FILES['fileuser']['tmp_name']<> 'none')
   {
         $file = $HTTP_POST_FILES['fileuser']['name'];
         $temp = $HTTP_POST_FILES['fileuser']['tmp_name'];
         $path_parts = pathinfo($file);
         $filename = "test_" . $time . "." . $path_parts["extension"];
           $dest = $path.$filename;

         copy($temp, $dest);

      echo "Die Datei ist auf dem Server! <br><br>";
      echo "Url der Datei: <a href=\"$deindomain$path$filename\" target=\"_blank\">".$deindomain.$path.$filename;
     echo "</a>";
   }
} else {


mysql_query("CREATE TABLE `vorschlag` (
  `id` int(10) unsigned NOT NULL auto_increment,
`benutzername` VARCHAR( 14 ) NOT NULL ,
	`artikel` VARCHAR( 25 ) NOT NULL ,
	`beschreibung` text  NOT NULL ,
`bild` VARCHAR( 25 ) NOT NULL ,
PRIMARY KEY  (`id`)
	)");

?>

<form method="post" enctype="multipart/form-data" action="<?php echo $PHP_SELF ?>">
<input type="hidden" name="MAX_FILE_SIZE" value="400000">
<br>
<strong>File Upload</strong> <br>
<br>
<input name="fileuser" type="file" size=40>
<br>
<br>
       Name<br />
      <input type="text" name="benutzername" />
      <br />
      Artikel:<br />
      <input type="text" name="artikel" />
      <br />
      <br />
      Beschreibung:<br />
      <input type="text" name="beschreibung" />
    </p>
    <p>
      <br />
      <br />
      <input name="send" type="submit" id="send" value="Abschicken" />
      <input type="reset" name="Reset" value="Reset" />
</form><? } ?>

 <table width="100%"  border="1" cellspacing="0" cellpadding="3">
  <tr>
    <th>Nummer</th>
    <th>Name</th>
    <th>Artikel</th>
    <th>Beschreibung</th>
    <th>Bild</th>
  </tr>

<?php
$res = mysql_query("SELECT * FROM vorschlag ORDER BY 'id' DESC");
while($row = mysql_fetch_array($res))
{
?>
	<tr>
    <td><?php print $row["id"]; ?></td>
    <td><?php print $row["benutzername"]; ?></td>
    <td><?php print $row["artikel"]; ?></td>
    <td><?php print $row["beschreibung"]; ?></td>
    <td><?php print $row["bild"]; ?></td>

  </tr>
<?php }?>
</table>
<?php mysql_close($link);?>

</body>
</html>
 
Zuletzt bearbeitet:
Dazu solltest du den Datenbankaufruf (Zeile 16-26) hinter die Bearbeitung des Uploads schieben. Der Dateiname ist dann ja in der Variable $filename, also brauchst du nur eine zusätzliche Spalte in die Datenbanktabelle einfügen und den INSERT-Befehl um diese Spalte erweitern.

PHP:
mysql_query("INSERT INTO vorschlag(id, benutzername, artikel, beschreibung, dateiname) VALUES (NULL, '".$_POST["benutzername"]."', '".$_POST["artikel"]."', '".nl2br($_POST["beschreibung"])."', '".$filename."')")

Zusätzlich solltest du dir noch ein paar Gedanken zur Sicherheit machen... es ist im Moment problemlos möglich mit dem Script eine php-Datei hochzuladen, diese auszuführen und damit z.B. deine komplette Datenbank zu löschen (Zugriffsdaten sind ja vorhanden, müssen nur eingebunden werden) oder auch größere Mengen an Spam zu verschicken.

Prüfe außerdem bitte, ob du in deine PHP-Konfiguration die Option magic_quotes_gpc aktiviert hast, damit du zumindestens einen grundliegenden Schutz vor SQL-Injections hast.

Du solltest $HTTP_POST_FILES überall durch $_FILES ersetzen, das andere Array ist veraltet und könnte bei manchen PHP-Konfigurationen deaktiviert sein. Du benutzt schließlich auch $_GET und $_POST statt $HTTP_GET_VARS und $HTTP_POST_VARS.

Alle nötigen Informationen dazu findest du auf der offizielle PHP-Website .
 
Also ich hab das jetzt geändert,aber jetzt sagt schmeißt er mir folgende Fehlermeldung raus.

Code:
Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\1\upload.php on line 38

Mein Code sieht es so aus.
Was hab ich falsch gemacht,tut mir leid aber ich wirklich noch ein totaler anfänger
PHP:
<html>
<head>
<title>Upload</title>
</head>
<body><?
include "config1.php";
if(isset($_POST["send"]))

{
    // Fehlerabfrage
    if(empty($_POST["benutzername"])): die("Sie müssen Ihren Benutzernamen eingeben<br />"); endif;
    if(empty($_POST["artikel"])): die("Sie müssen schreiben um welchen Artikel es sich handelt<br />"); endif;


    if(empty($_POST["beschreibung"])): die("Sie müssen den Artikel beschreiben<br />"); endif;

$path = "upload/"; // Url zum Speicher Ordner
$filename = "";
$deindomain = "http://localhost/1/";
$time=time();
if ($_FILES['fileuser']['tmp_name']<> 'none')
   {
         $file = $_FILES['fileuser']['name'];
         $temp = $_FILES['fileuser']['tmp_name'];
         $path_parts = pathinfo($file);
         $filename = "test_" . $time . "." . $path_parts["extension"];
           $dest = $path.$filename;

         copy($temp, $dest);

      echo "Die Datei ist auf dem Server! <br><br>";
      echo "Url der Datei: <a href=\"$deindomain$path$filename\" target=\"_blank\">".$deindomain.$path.$filename;
     echo "</a>";
   }
} else {
     // Eintrag der Daten
     mysql_query("INSERT INTO vorschlag(id, benutzername, artikel, beschreibung, bild) VALUES (NULL, '".$_POST["benutzername"]."', '".$_POST["artikel"]."', '".nl2br($_POST["beschreibung"])."', '".$filename."')")
    $num = mysql_affected_rows();
    if ($num > 0)
    {
        print "Eintrag wurde erfolgreich eingetragen";
    }
    else
    {
        print "Es ist ein Fehler aufgetreten, Eintrag wurde nicht eingetragen.";
    }


mysql_query("CREATE TABLE `vorschlag` (
  `id` int(10) unsigned NOT NULL auto_increment,
`benutzername` VARCHAR( 14 ) NOT NULL ,
    `artikel` VARCHAR( 25 ) NOT NULL ,
    `beschreibung` text  NOT NULL ,
`bild` VARCHAR( 25 ) NOT NULL ,
PRIMARY KEY  (`id`)
    )");

?>

<form method="post" enctype="multipart/form-data" action="<?php echo $PHP_SELF ?>">
<input type="hidden" name="MAX_FILE_SIZE" value="400000">
<br>
<strong>File Upload</strong> <br>
<br>
<input name="fileuser" type="file" size=40>
<br>
<br>
       Name<br />
      <input type="text" name="benutzername" />
      <br />
      Artikel:<br />
      <input type="text" name="artikel" />
      <br />
      <br />
      Beschreibung:<br />
      <input type="text" name="beschreibung" />
    </p>
    <p>
      <br />
      <br />
      <input name="send" type="submit" id="send" value="Abschicken" />
      <input type="reset" name="Reset" value="Reset" />
</form><? } ?>

 <table width="100%"  border="1" cellspacing="0" cellpadding="3">
  <tr>
    <th>Nummer</th>
    <th>Name</th>
    <th>Artikel</th>
    <th>Beschreibung</th>
    <th>Bild</th>
  </tr>

<?php
$res = mysql_query("SELECT * FROM vorschlag ORDER BY 'id' DESC");
while($row = mysql_fetch_array($res))
{
?>
    <tr>
    <td><?php print $row["id"]; ?></td>
    <td><?php print $row["benutzername"]; ?></td>
    <td><?php print $row["artikel"]; ?></td>
    <td><?php print $row["beschreibung"]; ?></td>
    <td><?php print $row["bild"]; ?></td>

  </tr>
<?php }?>
</table>
<?php mysql_close($link);?>

</body>
</html>
 
Da fehlt ein Semikolon hinter der Funktion mysql_query. Außerdem muss das else in Zeile 35 weiter nach unten in Zeile 47, damit mysql_query überhaupt aufgerufen wird. Ich empfehle dir den Quellcode entsprechend einzurücken, damit du solche Fehler einfacher erkennst.
 
Boar SUPER tausend tausend tausend Dank.Es klappt endlich.Man jetzt bin ich richtig glücklich.Ich weiß gar nicht wie ich dir Danken soll ich sitzt schon seit gestern abend dadran und jetzt funktioniert es endlich.
DANKE!
 
Da bin ich nochmal,
jetzt hab ich zwei neue probleme.Du hast ja gesagt dass ich die Dateiendung überprüfen soll,ich hab mir den artikel auch auf php.net durchgelesen.Doch weiß ich nicht wo ich was hinschreiben soll damit der upload abgebrochen werden soll.Und wenn ich kein bild einfüge schreibt er mir trotzdem einen eintrag in die datenbank.Wie kann ich das verhindern. Wenn ich dann noch ne if abfrage in den code einbaue sagt er mir immer ich hätte keine datei ausgewählt ob wohl ich es gemacht.Ich hoffe du kannst mir nochmal helfen.
mfg jojojan

PHP:
       // Fehlerabfrage
    if(empty($_POST["benutzername"])): die("Sie müssen Ihren Benutzernamen eingeben<br />"); endif;
    if(empty($_POST["artikel"])): die("Sie müssen schreiben um welchen Artikel es sich handelt<br />"); endif;
    if(empty($_POST["fileuser"])): die("Sie müssen ein Bild hinzufügen<br />"); endif;
    if(empty($_POST["beschreibung"])): die("Sie müssen den Artikel beschreiben<br />"); endif;

$path = "upload/"; // Url zum Speicher Ordner
$filename = "";
$deindomain = "http://localhost/1/";
$time=time();

if
($_FILES['fileuser']['tmp_name']<> 'none')
   {
         $file = $_FILES['fileuser']['name'];
         $temp = $_FILES['fileuser']['tmp_name'];
         $type = getimagesize($file);
         $path_parts = pathinfo($file);



         $filename = "test_" . $time . "." . $path_parts["extension"];
           $dest = $path.$filename;

         copy($temp, $dest);

   }
 
Die Abfrage mit empty($_POST["fileuser"]) brauchst du nicht, ob eine Datei hochgeladen wurde wird schon mit $_FILES['fileuser']['tmp_name']<> 'none' geprüft. Häng einfach hinter den Teil noch einen else-Zweig an in dem du dann mit die("...") die Bearbeitung abbrichst. So lange das vor dem Datenbankaufruf passiert, wird da auch nichts eingetragen.

Den Dateityp kannst du auch mit getimagesize prüfen, aber dazu solltest du die Funktion auf den tmp_name ansetzen, denn da liegt die hochgeladene Datei ja in dem Moment. Unter name findest du nur den Dateinamen, den die Datei vor dem hochladen hatte. Unter $type[2] findest du anschließend eine Zahl zwischen 1 und 3 für den Bildtyp (jpg, gif, png). Das kannst du an der Stelle wieder prüfen und nofalls mit die() beenden.

Statt copy solltest du am Ende die Funktion move_uploaded_file einsetzen, die macht genau das gleiche, hat aber etwas mehr Rechte, weil sie nur auf hochgeladene Dateien angesetzt werden kann.
 
Vielen Dank für deine hilfe.Aber ich muss dich leider noch einmal nerven:(.
irgendwie klappt das nicht.Ich hab das jetzt so eingebaut und es läuft nicht.
PHP:
if ($HTTP_POST_FILES['fileuser']['tmp_name']<> 'none')
   {
         $file = $HTTP_POST_FILES['fileuser']['name'];
         $temp = $HTTP_POST_FILES['fileuser']['tmp_name'];
         $path_parts = pathinfo($file);
         $type = getimagesize($tmp_name);
         $type[2]= ("1");
         $filename = "test_" . $time . "." . $path_parts["extension"];
         $dest = $path.$filename;

         copy($temp, $dest);
   }
   else
   {
   die ("Bitte laden Sie ein Bild hoch");
   }
Keins von den beiden Anweisungen will er machen.Wo hab ich den Fehler gemacht?
 
PHP:
if ($_FILES['fileuser']['tmp_name']<> 'none') 
   { 
         $file = $_FILES['fileuser']['name']; 
         $temp = $_FILES['fileuser']['tmp_name']; 
         $path_parts = pathinfo($file); 
         $type = getimagesize($temp); 
         if (!isset($type[2]) || $type[2] > 3)
         {
                  die("Hochgeladene Datei ist kein Bild");
         }
         $filename = "test_" . $time . "." . $path_parts["extension"]; 
         $dest = $path.$filename; 

         copy($temp, $dest); 
   } 
   else 
   { 
   die ("Bitte laden Sie ein Bild hoch"); 
   }
 
Zurück