• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bilder Upload (MULTI)

maria1

Mitglied
Hallo,

Ich habe schon einen Bilderupload gecodet für die Avatare, jetzt benötige ich aber noch einen Multi Upload....

Wenn ein User einen Artikel einstellt, so soll er auch bilder hochladen können.
Wie ich das machen kann verstehe ich, aber nur bei EINEM Bild....

Derzeit hab ich ja das Upload Script für meine Avatare... User Läd Bild hoch - Url wird in DB gespeichert zur dazugehöhrigen UserID.

Nun wenn nun ein User einen Artikel einstellt hab ich auch ein formular, bekomme es auch hin das der User ein bild hochladen kann zum Artikel.
Allerdings nur EINES :(

Wie kann ich das Realisieren. ?

Mein Normales Upload Script

PHP:
<?php
include("header.php");
include("mysql.php");


$username = $_SESSION['username'];


if($_POST['submit'])
{
    //get file attributes
    $name = $_FILES['myfile']['name'];
    $tmp_name = $_FILES['myfile']['tmp_name'];
    
if ($name)
{    

//start upload
$location = "avatars/$name";
move_uploaded_file($tmp_name,$location);

$query = mysql_query("UPDATE users SET avatar='$location' WHERE username='$username'");

die("Your avatar has been uploaded!<a href='view.php'>Home</a>");



}
else 
die("Please select a file");    
    
    }


if($_SESSION['username'])



echo"
Profilbild &aumlndern:<br>
<br>
<form action='upload.php' method='POST' enctype='multipart/form-data'>
File: <input type='file' name='myfile'><br />
<input type='submit' name='submit' value='Upload!'>
</form>

";

else 
echo"Please Login";
 
Werbung:
Habs nun so...


PHP:
<?php
include("header.php");
include("mysql.php");


$username = $_SESSION['username'];


if($_POST['submit'])
{
    //get file attributes
    $name = $_FILES['myfile']['name'];
    $tmp_name = $_FILES['myfile']['tmp_name'];
    
if ($name)
{    

//start upload
$location = "avatars/$name";
move_uploaded_file($tmp_name,$location);

$query = mysql_query("UPDATE artikel SET bild='$location' WHERE id='41'");

die("Your avatar has been uploaded!<a href='view.php'>Home</a>");



}
else 
die("Please select a file");    
    
    }


if($_SESSION['username'])



echo"
Profilbild &aumlndern:<br>
<br>
<form action='upload2.php' method='POST' enctype='multipart/form-data'>
File: <input type='file' name='myfile'><br />
File: <input type='file' name='myfile'><br />
<input type='submit' name='submit' value='Upload!'>
</form>

";

else 
echo"Please Login";

Funktioniert auch aber eben nicht ganz.... Ein bild wird in die DB geschreiben das andere nicht :(
 
Werbung:
in eine Schleife packen (ungetestet)....

HTML:
<form action='upload2.php' method='POST' enctype='multipart/form-data'>
File: <input type='file' name='myfile[1]'><br />
File: <input type='file' name='myfile[2]'><br />
<input type='submit' name='submit' value='Upload!'>

PHP:
    for($i=1;$i<=count($_FILES['myfile']['name']);$i++)
    {

        //get file attributes
        $name = $_FILES['myfile']['name'][$i];
        $tmp_name = $_FILES['myfile']['tmp_name'][$i];


        echo $name."<br>";
    }
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Habe editiert, schreibe auf meinem Handy, daher etwas schnell am senden Button angekommen.... :-)
Code war natürlich auch falsch, also bitte nochmal testen.

Zur Erklärung:
Der Code oben baut ein array myfile auf, das sich dann im Array $_FILES['myfile'] niederschlägt.
 
Zuletzt bearbeitet von einem Moderator:
Nun hab ich es so

PHP:
<?php
include("header.php");
include("mysql.php");


$username = $_SESSION['username'];


if($_POST['submit'])
{
for($i=1; $i <= count($_POST['myfile']);$i++)
{
    //get file attributes
    $name = $_FILES['myfile'][$i]['name'];
    $tmp_name = $_FILES['myfile'][$i]['tmp_name'];
}  
if ($name)
{    

//start upload
$location = "avatars/$name";
move_uploaded_file($tmp_name,$location);

$query = mysql_query("UPDATE artikel SET bild='$location' WHERE id='41'");

die("Your avatar has been uploaded!<a href='view.php'>Home</a>");



}
else 
die("Please select a file");    
    
    }


if($_SESSION['username'])



echo"
Profilbild &aumlndern:<br>
<br>
<form action='upload2.php' method='POST' enctype='multipart/form-data'>
File: <input type='file' name='myfile[1]'><br />
File: <input type='file' name='myfile[2]'><br />
<input type='submit' name='submit' value='Upload!'>
</form>

";

else 
echo"Please Login";

Ich hoffe doch sehr das ich den PHP Code richtig eingefügt habe ....

Ich bekomm die meldung, "Please select a file" :(
 
Mein Fehler, ich habe natürlich den Code verbockt. Bitte nochmal aus meinem Codebeispiel von oben rauskopieren (neue Handies sind so eine Sache, habe jetzt das Netbook ausgepackt, Sorry)

Richtig müsste das also ca so heissen:
PHP:
<?PHP
session_start();

include("header.php");
include("mysql.php");

$_SESSION['username'] = 'abc';


if($_POST['submit'])
{
    for($i=1;$i<=count($_FILES['myfile']['name']);$i++)
    {
        //get file attributes
        $name = $_FILES['myfile']['name'][$i];
        $tmp_name = $_FILES['myfile']['tmp_name'][$i];
        //start upload
        $location = "avatare/$name";
        move_uploaded_file($tmp_name,$location);

        if(file_exists($location))
        {
    //        $query = mysql_query("UPDATE artikel SET bild='$location' WHERE id='41'");
        }
        else
        {
            echo "Kein File ".$name." gefunden....<br>";
        }
    }
    echo "Fertig..!";
    exit;

}

if($_SESSION['username'])
{

echo"
Profilbild &aumlndern:<br>
<br>
<form action='upload2.php' method='POST' enctype='multipart/form-data'>
File: <input type='file' name='myfile[1]'><br />
File: <input type='file' name='myfile[2]'><br />
<input type='submit' name='submit' value='Upload!'>
</form>

";
}

else
{
    echo "Please Login";
}

PS
Die id in deinem query muss noch dynamisch werden, da sie sonst überschrieben wird, daher ein REM .....
Script ist nun gestestet und funktioniert
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
session_start() hab ich bereits im header also hab ich es entfernt.

Die ID wird dynamisch, hab nur ne ID genommen fürs testen das mal der upload funktioniert


Hier das Script :

PHP:
<?php


include("header.php");
include("mysql.php");

$username = $_SESSION['username'];


if($_POST['submit'])
{
    for($i=1;$i<=count($_FILES['myfile']['name']);$i++)
    {
        //get file attributes
        $name = $_FILES['myfile']['name'][$i];
        $tmp_name = $_FILES['myfile']['tmp_name'][$i];
        //start upload
        $location = "avatare/$name";
        move_uploaded_file($tmp_name,$location);

        if(file_exists($location))
        {
          $query = mysql_query("UPDATE artikel SET bild='$location' WHERE id='41'");
        }
        else
        {
            echo "Kein File ".$name." gefunden....<br>";
        }
    }
    echo "Fertig..!";
    exit;

}

if($_SESSION['username'])
{

echo"
Profilbild &aumlndern:<br>
<br>
<form action='upload2.php' method='POST' enctype='multipart/form-data'>
File: <input type='file' name='myfile[1]'><br />
File: <input type='file' name='myfile[2]'><br />
<input type='submit' name='submit' value='Upload!'>
</form>

";
}

else
{
    echo "Please Login";
}

Danke das du extra dein net/notebook ausgepackt hast :)
Klappt leider nicht :(

Ausgabe:
Kein File David-Guetta-Usher.jpg gefunden....
Kein File avatar-male.png gefunden....
Fertig..!
 
Hast du dir den Code mal angesehen, ob die Pfade passen, ich musste einiges anpassen, damit ich hier testen kann (habe z.B. keine header oder mysql.php)
Aus avatars habe ich z.B. avatare gemacht (das klingt für mich so auaaaaaa) und wenn jemand das per Copy/Paste übernmmt schreddert er vielleicht sein Verzeichnis.

Also Pfade kontrollieren.

Wie gesagt, ich mache das alles hier im Zug auf den Knieen.....
Script funktioniert bei mir problemlos, so wie es oben steht (Ordner avatare vorausgesetzt ;-) ).
 
Zuletzt bearbeitet von einem Moderator:
Ok das mit dem Verzeichniss war mein fehler :(

Jetzt kommt "..fertig" allerdins wird in der DB nur ein link eingetragen also ein bild...

bild varchar(200)

ist meine Spalte....

Hmm

EDIT: Beide bilder werden hochgeladen, aber nur eines in die DB eingetragen :/
 
Werbung:
Nö, es werden beide eingetragen. Da du allerdings beim zweiten mal den ersten Eintrag überschreibst (du nutzt UPDATE), bist du den ersten Eintrag schneller wieder los als du gucken kannst. Du könntest hier zB eine INSERT-Query nehmen.. dann haste beide drin.
 
Hmm was stimmt an meinem Query nicht ?


PHP:
      $query = mysql_query("INSERT INTO artikel ( bild )
                       VALUES
                       ( $location ); WHERE id='41'");
 
Ok nun klappts ... ABER

Ich möchte gerne das die 2 urls der bilder in einer spalte sind... :/

Jetzt werden 2 neue Spalten angelegt

PHP:
          $query = mysql_query("
          
INSERT INTO `boerse`.`artikel` (`id`, `bezeichnung`, `kategorie`, `tauschpreis`, `zustand`, `beschreibung`, `username`, `bild`) VALUES (NULL, '', '', '', '', '', '', '$location');          
          ");


Ist das möglich ?Denn ein Artikel soll auch nur eine ID haben ....
 
Werbung:
Nicht mit diesem Datenbankdesign. Fremdschlüssel und die Bilder mit zugehöriger Nutzer_ID in eine extra Tabelle auslagern.
 
Gut dann mach ich eben folgendes.

Datenbank Struktur verbessern.

Aber wenn ein User oder ich ein Bild hochladet zu seinem Artikel können das ja entweder 2 oder auch 10 sein.

Wie kann ich dann die Bilder dem Artikel zuordnen ? Auch wenn ich ID's verwende für die Bilder stell ich mir das recht kompliziert vor...

Gibts denn keine möglichkeit , die Links der Bilder in eine Spalte zu posten ?

EDIT:
Ist die lösung das ich mehrere Spalten mache schrott ?

Also Bild 1 / Bild 2 / Bild 3 / Bild 4 / Bild 5 ?
 
Hallo,
ja man kann das in eine Spalte schreiben.
die Spalte mit der BildURL in der Artikeltabelle speichern. Dann mir eine Trennzeichenkette überlegen, die in den URL nicht genutzt wird, zB: ":*#*:". Dann so speichern: "bild1.jpg:*#*:bild2.png:*#*:".
Um die einzelnen URL wieder heraus zu suchen siehe explode(). Nun eine Schleife zur Ausgabe verwenden.
Fertig!
 
Zuletzt bearbeitet:
Werbung:
OK danke soweit hab ich's verstanden.
nur $location speichert die bildurl ja.. Beide...
Die müsste ich zuerst trennen Oder?
 
Edit: Ich habe nur die letzten paar Posts gelesen.

EDIT:
Ist die lösung das ich mehrere Spalten mache schrott ?

Ja. Eine relationale Datenbank wie MySQL sollte nicht horizontal wachsen (wenn etwa irgendwann mehr als fünf Bilder benötigt werden), sondern immer vertikal.

janm schrieb:
Dann mir eine Trennzeichenkette überlegen, die in den URL nicht genutzt wird, zB: ":*#*:". Dann so speichern: "bild1.jpg:*#*:bild2.png:*#*:".

Für sowas bieten sich auch Formate wie JSON an. Mit ihnen brauchst du kein hardgecodetes Trennzeichen zu definieren.

PHP:
<?php

$images = array('bild1.jpg', 'bild2.jpg', 'bild3.jpg');

$jsonEncoded = json_encode($images);

$jsonDecoded = json_decode($jsonEncoded);

var_dump($jsonEncoded, $jsonDecoded);

Aber der Ansatz ist auch nicht toll. Was ka9de meinte, ist sowas:

Code:
article :  id | title       | content
          ----+-------------+-------------
            1 | Hello World | Welcome to…


image :  id | article_id | path
        ----+------------+-----------
          1 |          1 | bild1.jpg
          2 |          1 | bild2.jpg
          3 |          1 | bild3.jpg


SELECT `path`
FROM   `image`
WHERE  `article_id` = 1
 
Zurück
Oben