Mit PHP-hochladen von Bildern zu einem Ordner beim speichern Beschreibungen in eine Datenbank
Entscheidet der Nutzer, um mehrere Bilder hochladen für deren klassifiziert Liste. Was muss ich haben, geschehen ist:
- Die Bilder hochladen, mit Beschreibungen für die einzelnen Bilder - GELÖST
- Speichern Sie die Bilder in einen Ordner angegeben
- Speichern Sie das Bild auf meine MySQL-Datenbank mit Beschreibungen - GELÖST
- Der Lage sein, die Bilder und Beschreibungen in Ihrem klassifiziert Liste in Art einer Galerie-Einstellung
Mein schema für die Tabelle ist wie folgt eingerichtet (vereinfacht):
ad_id | member_id | category | subcategory | ... | photo_0_href | photo_0_desc ... | etc.
Könnte jemand gehen mir durch den Prozess? Danke.
step3.php
<form action="upload.php" method="post" enctype="multipart/form-data">
<p>
<label for="file0">Filename: </label>
<input name="file[]" type="file" id="file0" size="20" />
</p>
<p>
<label for="file0desc">Description: </label>
<textarea rows="10" cols="30" id="file0desc" class="textarea"></textarea>
</p>
<p>
<label for="file1">Filename: </label>
<input name="file[]" type="file" id="file1" size="20" />
</p>
<p>
<label for="file1desc">Description: </label>
<textarea rows="10" cols="30" id="file1desc" class="textarea"></textarea>
</p>
<p>
<input id="submit" type="submit" name="submit" value="Continue to Step 4" />
</p>
</form>
upload.php
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 1048600)) //less than 1MB
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
header("Location: step4.php");
/*
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] /1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
*/
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
Ich weiß, dass mein upload.php ist nicht konfiguriert für mehrere Bild-Dateien noch nicht, aber es ist ein Anfang.
Habe ich das speichern der Beschreibungen in der Datenbank mit $_SESSION['file_n_desc']
. Ich muss nur herausfinden, wie hoch das verflixte Bilder zu dem Ordner, und speichern Sie dann die Standorte in der Datenbank.
Brauche ich auch, um das Bild umbenannt, um eine zufällige Zeichenfolge (um zu verhindern, dass Bilder überschrieben werden). Ich weiß, ich kann dies mit den rand()
Funktion.
- Wie sind Sie mit Schwierigkeiten? Das hochladen/Speichern, mysql, etwas anderes?
- Sie haben ziemlich viel den Prozess in Ihrem 4 Schritten hochladen - speichern, fügen Sie Bild-info zu mysql, wählen Sie die Bilder, wo die Auflistung ist, bla bla bla. Welchen code hast du schon?
- Matthews: ich kann die Bilder hochladen, den Ordner, aber ich habe einige Kopfschmerzen bei der Rettung der Fotos und Beschreibungen zusammen.
- Hatting - bitte teilen Sie den code, den Sie bereits haben, damit wir wissen, wo wir anfangen zu helfen, sonst ist mein Vermutung ist, Sie laufen zu viele Prozesse und möglicherweise in der falschen Reihenfolge, das ist stoppen des image-name/ - id verknüpft wird, um die Daten in der Datenbank, aber es ist nur eine Vermutung, weil ich nicht den code sehen
- Bearbeitet meine ursprüngliche Frage mit dem code aus dem front-end und der Prozessor-Dateien.
- Eine andere Sache: brauche ich, um das Bild umbenannt, um eine zufällige Zeichenfolge (um zu verhindern, dass Bilder überschrieben werden). Ich weiß, ich kann das mit der rand () - Funktion, aber ich vergaß zu erwähnen, dass es in meinem ursprünglichen Beitrag.
- wo ist die Schleife, in der Sie behandeln jedes hochgeladene Datei ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
1) das Hochladen von Dateien
Bei der Verwendung von array-syntax für die Datei-Eingänge, die index-Datei ist der Letzte Schlüssel.
$_FILES["file"]["name"]
zum Beispiel ist ein array von file-Namen. Um die Informationen für die i-te Datei, die Sie benötigen, um Zugang$_FILES["file"]["name"][$i]
,$_FILES["file"]["size"][$i]
&c.2) Speichern von Bildern in einem Ordner
Einige der Daten in
$_FILES
(wie der name) kommt vom client, und damit ist nicht zu trauen (, dass ist, überprüfen Sie zuerst). Im Fall der Dateiname, könnten Sie beginnen, indem Sie mitrealpath
zu überprüfen Sie die Ziel-Datei Pfadname ist sicher, oder verwenden Siebasename
oderpathinfo
extrahiert die Letzte Komponente die gelieferten Namen vor der Montage der Ziel-Pfadname.3) Speichern von Bild-info der DB
Die (unvollständige) Datenbank-schema, das Sie geben, sieht aus wie Sie, geben Sie jedem Bild zwei Spalten in derselben Tabelle. Unter dem relationalen Modell, zu-viele-Beziehungen werden modelliert mit einer separaten Tabelle:
Sonst, du brichst die zero-one-infinity Regel und Platz verschwenden, wenn es weniger als die maximale Anzahl von Bildern.
Anderen
Beachten Sie, dass Sie die array-syntax für die Beschreibung der Datei-Felder zu machen die Handhabung einfacher. Nennen Sie Sie "filedesc[]".
Eher als eine lange Abfolge von vergleichen, verwenden Sie ein array-lookup oder ein Muster übereinstimmen.
Den Datei-Typ ist einer von diesen client bereitgestellten Werte. Sicherer wäre die Verwendung
fileinfo
, um das image geben.Selbst das kann täuschen, wenn die Datei eine gültige Bild-header aber der rest ist nicht gültig. Sie können eine Bild-Bibliothek (wie GD oder ImageMagick), die Datei zu validieren, indem Sie prüfen, ob Sie erfolgreich können öffnen Sie die Datei wie ein Bild.
Nicht sicher, was für Fehler Sie haben, wie Sie scheinen, haben den Prozess ziemlich klar im Kopf. Das erste mal habe ich diese verwendet habe ich dieses tutorial als Anleitung und alles hat einfach geklappt: http://php.about.com/od/phpwithmysql/ss/Upload_file_sql.htm
Könnte ich schlage vor, speichern Sie die Datei in der Datenbank statt?? Weniger Sicherheitslücken, die in der Art und Weise!
P. S: ich habe das Gefühl, Sie sind ein Anfänger und ich denke, ich habe eine schöne Liste an PHP-Neulinge: Wie Sie guten code zu schreiben
move-uploaded-file funktionieren sollte. Was mir einfällt, ist, dass Sie nicht die richtige schreib-Berechtigungen, um Dateien zu verschieben. Welche Art von server du bist mit(Linux/Windows/MacOSX)? Was bedeutet die Funktion als boolean(Ergebnis)?
rand()
ist nicht wirklich zufällig und geben konnte doppelter Dateinamen. uniqid wird einzigartig seinBei der Verwendung von session, wenn Sie noch nicht überschrieben Sitzung, die Sie nicht mit Ihrer MySQL-Datenbank, sondern das Datei-system. Sie Lesen könnte dieses tutorial für store session in einer Datenbank. Standard dieser Sitzung wird gelöscht, wenn der browser geschlossen wird(nur für diese Sitzung). Versuchen Sie einfach diesen code:
Laden, die Seite paar mal, ohne den browser schließen. Sie erhalten etwas, das aussieht wie:
0
rlu10shi6l390il130qinlt913
1
rlu10shi6l390il130qinlt913
Aber wenn Sie den browser schließen, dass die session_id hat sich verändert und Ihr Zähler ist zurückgesetzt und Sie erhalten eine Ausgabe wie.
Ich verwendet PDO(Gut zu Lesen) zu tun, (My)SQL. Habe ich unit-Tests(TDD) mit phpunit. Der Zugriff auf die Datenbank verwendete ich SQLite in-memory-Modus(sehr schön zu tun, den SQL-Test) =>
new PDO('sqlite::memory:');
. Ich habe versucht zu Folgen, Uncle Bob ' s drei Regeln(Gut zu Lesen).Normalerweise aufgeteilt in mehrere Dateien. Jede Klasse in einer separaten Datei. Jede Klasse sollte von der Klasse Isoliert getestet werden(lose Kopplung) in einer separaten Datei.
Ich verwendet foreign key zuordnen "Auflistung-Bild". Ich denke, dieses Beispiel ist ziemlich gründlich getestet, aber jetzt ist es wirklich Zeit für mich, etwas Schlaf zu bekommen, also bin ich nicht sicher ;).