Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Dateiupload - Pfad in MYSQL DB schreiben    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
Aragon4868
Mitglied
Gruenling


Dabei seit: 19.12.2005
Herkunft: keine Angabe
Posts: 14
     Dateiupload - Pfad in MYSQL DB schreiben Zitat | Bearbeiten

Hallo zusammen.

ich möchte mit php einen dateiupload machen und den pfad (wo die datei dann auf dem server liegt) in einer mysql datenbank speichern. die dateien sind leider recht groß und es werden recht viele. daher möchte ich sie nicht direkt in die datenbank schreiben sondern nur den pfad. aus dem datenbankeintrag möchte ich dann den link erstellen.
jemand ne idee?


02.02.2006, 09:07 Profil | PM | E-Mail  
Micha234
Mitglied
Aktiver User


Dabei seit: 19.08.2005
Herkunft: Marburg
Posts: 219
      Zitat | Bearbeiten

Hi,

Gehen wir davon aus, daß der Ordner in den die Bilder geladen werden "upload" heist.

Dann machst du dir z.B. eine Tabelle Bilder mit den Feldern "id" und "Bildpfad".

Bei jedem upload eines Bildes schreibst du jetzt in dein Feld Bildpfad den Bildnamen rein, also: hanswurst.jpg.

In der Tabelle sähe das eventuell dann so aus:
id=1, Bilpfad=hanswurst.jpg !

In dem Script, daß die Bilder anzeigen soll, machst du jetzt eine Abfrage die alles aus dieser Tabelle rausholt. Da die Ausgabe ja in einer Schleife läuft kannst du jetzt hingehen und als Pfad für das Bild:

./upload/$bildname nehmen.

So sollten die Bilder angezeigt werden.

Du kannst ja einfach mal loslegen und falls es probleme gibt, kannst du es hier ja posten.

Irgendwo in meinem Chaos hab ich glaub ich auch noch so ein ähnliches Script rumliegen, ich kucke mal ob ich es finde.

Grüße Micha


02.02.2006, 10:25 Profil | PM | E-Mail  
Aragon4868
Mitglied
Gruenling


Dabei seit: 19.12.2005
Herkunft: keine Angabe
Posts: 14
      Zitat | Bearbeiten

Danke.
Ungefähr so hatte ich mir die Lösung auch vorgestellt.


02.02.2006, 11:10 Profil | PM | E-Mail  
Aragon4868
Mitglied
Gruenling


Dabei seit: 19.12.2005
Herkunft: keine Angabe
Posts: 14
      Zitat | Bearbeiten

Hallo zusammen.

Ich habe mir jetzt ein Uploadscript gebastelt was so aus sieht:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:

<?PHP

$archive 
'test';

if(!empty(
$file_name))
  {
  if(
copy($file,"./$file_name"))
    {
    if(
move_uploaded_file($file,"$archive/$file_name"))
      {
      echo 
"<b>Upload beendet!</b><br>";
    }    
  }    
}
else
{

//<body bgcolor="#FFFFFF" text="#000000">
echo '<form name="form1" enctype="multipart/form-data" method="post" action="upload.php"><p>'
echo 
'<input type="file" name="file"><br>';
echo 
'<input type="submit" name="Abschicken" value="Upload beginnen">';
echo 
'</p></form>';

}
?>


Leider bekomme ich folgende Fehlermeldung:

Warning: copy(./explo.jpg): failed to open stream: Permission denied in /www/htdocs/XXXXX/upload.php on line 7

Kann es sein, dass der Copy Befehl nicht zugelassen wird?
Wenn nicht, wie kann ich den umgehen?

Danke für die Hilfe



02.02.2006, 20:02 Profil | PM | E-Mail  
Andavos
Administrator
Foren-Gott


Dabei seit: 30.11.2003
Herkunft:
Posts: 6266
      Zitat | Bearbeiten

Hallo,
Zitat:
Kann es sein, dass der Copy Befehl nicht zugelassen wird?


Und das zu recht...

move_uploaded_file(); reicht vollkommen aus für einen Uploadscript.
Sonst mal auf PHP-Einfach => PHP Tutorials => Dateiupload nachlesen


www.php-einfach.de, PHP lernen leicht gemacht
www.webhosterwissen.de, Webhosting-Vergleich



02.02.2006, 20:55 Profil | PM | E-Mail  
Aragon4868
Mitglied
Gruenling


Dabei seit: 19.12.2005
Herkunft: keine Angabe
Posts: 14
      Zitat | Bearbeiten

Na hauptsache ich mache das doppelt. Mit copy und move *vor kopf schlag*

Danke für die Info


02.02.2006, 22:29 Profil | PM | E-Mail  
BBastian
Mitglied
Neuling


Dabei seit: 17.12.2018
Herkunft: keine Angabe
Posts: 4
     Dateipfad wird nicht gespeichert Zitat | Bearbeiten

Hallo php-Nerds,

erstmal vielen Dank an die php Einfach + Forum Betreiber. Bin grad an meinem ersten php + sql Projekt und die Tutorials und das Forum haben mir sehr geholfen!

Nun zu meiner Frage. Ich möchte dass mit dem Datei/Bildupload gleich der Pfad in einer Datenbank gepeichert wird. Der upload funktioniert, das Pfad speichern leider nicht.

Folgendes hab ich zusammengebastelt:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:

.
.
.
//Pfad zum Upload
$new_path = $upload_folder.$filename.'.'.$extension;
 
//Alles okay, verschiebe Datei an neuen Pfad
move_uploaded_file($_FILES['datei']['tmp_name'], $new_path);

if(isset($new_path)) {
    $error = false;
    $img1 = $_POST['datei'];

    if(!$error) {
        $statement = $pdo->prepare("UPDATE images SET img1 = :img1");
        $result = $statement->execute(array('img1' => $new_path));
        
        if($result) {        
            die('<meta http-equiv="refresh" content="0; URL=admin.php">');
        } else {
            echo 'Beim Speichern ist leider ein Fehler aufgetreten. <a href="admin.php">zurück</a>';
        }
    }
    }
?>

So sieht das Formular aus:
 PHP 
1:
2:
3:
4:
<form action="upload1.php" method="post" enctype="multipart/form-data">
<input type="file" name="datei"><br><br>
<input type="submit" value="Hochladen">
</form>

Und so ist die Datenbank konfiguriert:
 PHP 
1:
2:
3:
4:
5:
6:
7:
CREATE TABLE `images` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `img1` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NULL DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Wenn ich das richtig verstanden habe wird doch der Pfad in $new_path gespeichert, oder nicht? Wie kriege ich den Datensatz in die Datenbank?

Wäre für einen Tipp sehr dankbar!


19.12.2018, 18:11 Profil | PM | E-Mail  
Andavos
Administrator
Foren-Gott


Dabei seit: 30.11.2003
Herkunft:
Posts: 6266
      Zitat | Bearbeiten

Statt einem UPDATE-SQL-Befehl solltest du eher ein INSERT nutzen, da du ja neue Daten in die Tabelle schreiben willst.


www.php-einfach.de, PHP lernen leicht gemacht
www.webhosterwissen.de, Webhosting-Vergleich



20.12.2018, 10:57 Profil | PM | E-Mail  
BBastian
Mitglied
Neuling


Dabei seit: 17.12.2018
Herkunft: keine Angabe
Posts: 4
      Zitat | Bearbeiten

[quote]Orginal von Andavos
Statt einem UPDATE-SQL-Befehl solltest du eher ein INSERT nutzen, da du ja neue Daten in die Tabelle schreiben willst.
[/quote]

Baahahaha... jetzt funktionierts. UPDATE ist Absicht, da der Datensatz wieder überschrieben werden soll, aber dafür sollte fürs erste mal natürlich schon was drin stehen..

Merci beaucoup!




Post wurde schon 1x editiert, das letzte mal am 20.12.2018 um 11:53 von BBastian
20.12.2018, 11:41 Profil | PM | E-Mail  
BBastian
Mitglied
Neuling


Dabei seit: 17.12.2018
Herkunft: keine Angabe
Posts: 4
     UPDATE per select option Zitat | Bearbeiten

So ihr Schnuppsies, ich brauch nochmal eure Hilfe.

Ich habe ein scandir script gebastelt damit mir ein Ordnerinhalt ausgegeben wird. Gleichzeitig wird die Pfadvariable in ein Dropdownmenu ausgegeben.

Wie schaffe ich es nun, dass über onchange der Variableninhalt je option-Zeile in eine entsprechende Datenbankspalte eingetragen wird?

Die Spalte entspricht dem name=""


 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
<html>
<body>
<h2><center>serverinhalt</center></h2>
<ul id="servercontent">
<?php
$ordner 
"upload/files";
$allebilder scandir($ordner);
    foreach (
$allebilder as $bild) {
        
$bildinfo pathinfo($ordner."/".$bild);
        if (
$bild != "." && $bild != ".."  && $bild != "_notes" && $bildinfo['basename'] != "Thumbs.db") { 
 
?>
        <li><img src="<?php echo $bildinfo['dirname']."/".$bildinfo['basename'];?>"/>
<select onchange="location.reload()">
  <option value="void"></option>}
  <option value="<?php $bildinfo['dirname']."/".$bildinfo['basename'];?>" name="img1">Bild zu Preis 1</option>
  <option value="<?php $bildinfo['dirname']."/".$bildinfo['basename'];?>" name="img2">Bild zu Preis 2</option>
  <option value="<?php $bildinfo['dirname']."/".$bildinfo['basename'];?>" name="img3">Bild zu Preis 3</option>
  <option value="<?php $bildinfo['dirname']."/".$bildinfo['basename'];?>" name="img4">Bild zu Preis 4</option>
</select>
        </li>
<?php
 
};
 };
?>
</ul>
<!-- end content -->
</section>
</body>
</html>





Post wurde schon 1x editiert, das letzte mal am 27.12.2018 um 22:05 von BBastian
27.12.2018, 22:03 Profil | PM | E-Mail  
BBastian
Mitglied
Neuling


Dabei seit: 17.12.2018
Herkunft: keine Angabe
Posts: 4
     Bezeichner verwursten Zitat | Bearbeiten

Moin,

ich komm nicht weiter. Hab jetzt das gebaut:

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
<form action="content_upload.php">
    <select onchange="this.form.submit()" name="upload">
      <option >Auswahl</option>
      <option value="<?php echo $bildinfo['dirname']."/".$bildinfo['basename'];?>" name="img1" method="post">Bild zu Angebot 1</option>
      <option value="<?php echo $bildinfo['dirname']."/".$bildinfo['basename'];?>" name="img2" method="post">Bild zu Angebot 2</option>
      <option value="<?php echo $bildinfo['dirname']."/".$bildinfo['basename'];?>" name="img3" method="post">Bild zu Angebot 3</option>
      <option value="<?php echo $bildinfo['dirname']."/".$bildinfo['basename'];?>" name="img4" method="post">Bild zu Angebot 4</option>
    </select>
</form>


 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
<?php
if(isset($_GET['upload'])) {
    
$error false;
        
$img $_POST['img1'];
    
$dateiinfo $_GET['upload'];

    if(!
$error) {
        
$statement $pdo->prepare("UPDATE images SET img1 = :img1");
        
$result $statement->execute(array('img1' => $dateiinfo));
        
        if(
$result) { 
            die(
'<meta http-equiv="refresh" content="0; URL=admin.php">');
        }
    }
    }
?>


Das funktioniert soweit, jedoch weiß ich nicht wie ich das NAME Attribut je Optionsfeld verwende sodass ich verschiedene db Spalten ansprechen kann.

Hat mir wer einen Tipp?


09.01.2019, 11:40 Profil | PM | E-Mail  
asdf
Mitglied
Guter User


Dabei seit: 26.10.2009
Herkunft: keine Angabe
Posts: 420
      Zitat | Bearbeiten

Ich verstehe nicht ganz was du machen wills...
Wenn ich das richtig verstehe willst du die Pfade die du z.B. aus dem Ordner "upload" ausgelesen hast in einer DB speichern. Der <option> Tag ist meines Wissens nicht unbedingt dafür geeignet. Du hast ja ein Dropdown Menu damit du einem Eintrag ein spezieller Wert zuweisen kannst. Also in deinem Fall wäre das eher dafür gedacht, dass wenn du z.B. 4 verschiedene Ordner hast und dein hochgeladenes Bild an einem von diesen 4 verschiedene Order verschieben willst, kannst du per Dropdown auswählen in welchem Verzeichnis du das Bild verschieben möchtest.



PS: Du solltest jedoch umbedingt schauen das dein HTML valid ist, oder zumindest so gut wie möglich!
1. method="post" gehört nich im <option> tag, sondern im form!
2. der name attribut ist laut w3c obsolet im <option> tag, wenn dann solltest id benutzen
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
<form action="content_upload.php" method="post">
    <select onchange="this.form.submit()" name="upload">
      <option >Auswahl</option>
      <option value="<?php echo $bildinfo['dirname']."/".$bildinfo['basename'];?>" id="img1">Bild zu Angebot 1</option>
      <option value="<?php echo $bildinfo['dirname']."/".$bildinfo['basename'];?>" id="img2">Bild zu Angebot 2</option>
      <option value="<?php echo $bildinfo['dirname']."/".$bildinfo['basename'];?>" id="img3">Bild zu Angebot 3</option>
      <option value="<?php echo $bildinfo['dirname']."/".$bildinfo['basename'];?>" id="img4">Bild zu Angebot 4</option>
    </select>
</form>




26.01.2019, 11:56 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » Dateiupload - Pfad in MYSQL DB schreiben   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz