WinFuture-Forum.de: Php Bild Upload Problem - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Php Bild Upload Problem


#1 Mitglied ist offline   Marek123 

  • Gruppe: aktive Mitglieder
  • Beiträge: 46
  • Beigetreten: 23. Dezember 05
  • Reputation: 0
  • Wohnort:Hattingen
  • Interessen:Webdesign/Coding

geschrieben 03. September 2010 - 14:49

Hallo,

bastel gerade an meinem "News" Skript, für eigene zwecke, also nix was irgendwann veröffentlicht wird und hänge beim, ich sag mal, Bilder Upload/Ändern.

Wenn ich eine News einstelle, Bild auswähle, klappt es wunderbar. Bild wird hochgeladen und in DB eingetragen.
Wenn ich die neue news nun editieren will und z.b das Bild ändern will, ist auch alles OK, sprich: altes Bild wird gesucht, gelöscht, neues wird hochgeladen und in DB eingetragen.

JEDOCH:
Wenn ich NUR den Newstext ändere, ohne das Bild irgendwie zu ändern, also einfach News ändere und auf Submit klicke, löscht er aber dennoch das alte Bild und die News ist Bildlos....

Ich kann es mir nicht erklären. Ich sitze an dem Ding schon seit Stunden und nix.

Hier anbei das Skript bzw ein Teil davon:

CODE
// SAVE MODIFIED NEWS
if($_POST['do'] == "savemodifynews" ){

$db = new mySQL();

if(!empty($_FILES['pic'])) {
include 'upload.php';
$up2 = new fileDir('/_images/news/');
//Bild suchen
$daten = $db->select("SELECT * FROM ".$db->GetTable("news")." WHERE ID='".$_POST['id']."'");
//Bild löschen
$up2->delete(''.$daten[0]->name.'');
//neuen Namen generieren
$c = md5(uniqid (rand (),true));
//neues Bild hochladen
$up2->upload($_FILES['pic'], $c);
#echo $up2->fileName();
//neues Bild in DB speichern
$db->query("
UPDATE
".$db->GetTable("news")."
SET
name='".mysql_real_escape_string($c."_".$up2->fileName())."'
WHERE
ID='".mysql_real_escape_string($_POST['id'])."'");
}

$db->query("
UPDATE
".$db->GetTable("news")."
SET
titel='".mysql_real_escape_string(addslashes(htmlspec
ialchars($_POST['titel'])))."',
artikel='".mysql_real_escape_string(addslashes(htmlspec
ialchars($_POST['input'])))."'
WHERE
ID='".mysql_real_escape_string($_POST['id'])."'");

echo '<p class="saved">successfully modified!</p>';
unset($db);
}


Ich vermute, man muss abfangen ob im input file etwas neues passiert oder ob das leer ist, ich hatte es hiermit versucht

if(!empty($_FILES['pic'])) {

aber das scheint wohl nicht zu klappen.

Danke schonmal für jegliche Hilfe! :imao:

Dieser Beitrag wurde von Marek123 bearbeitet: 03. September 2010 - 14:51

0

Anzeige



#2 Mitglied ist offline   zwutz 

  • Gruppe: aktive Mitglieder
  • Beiträge: 652
  • Beigetreten: 17. Juli 07
  • Reputation: 1
  • Geschlecht:Männlich

geschrieben 05. September 2010 - 00:22

warum, keine Ahnung, aber du bist nicht der einzige, mit dem Problem.
versuch folgendes:
if(!empty($_FILES['pic']) && $_FILES['pic']['size'] > 0) {
   ...
}



und folgendes noch:
//Bild suchen
$daten = $db->select("SELECT * FROM ".$db->GetTable("news")." WHERE ID='".$_POST['id']."'");
//Bild löschen
$up2->delete(''.$daten[0]->name.'');


dieser Teil ist richtig böse und kann dir im schlimmsten Fall irgendwann mal arge Probleme bereiten, ohne dass du den fehler auf den ersten Blick findest.

Die Reihenfolge der Attribute bei einem SELECT * FROM ... ist nicht festgelegt. Sowas hat in Produktiv-Code nichts zu suchen. Qualifiziere immer die Attribute, die du brauchst, und nur die. Wenn du nur eins brauchst, schreib auch nur eines hin. Wenn du alle brauchst, schreib alle hin. Aber niemals SELECT *.

Und vergiss nicht, alle Eingangsvariablen vor der Übergabe an die Datenbank zu escapen und den Wertebereich zu überprüfen und notfalls über Whitelists zu arbeiten (in dem Fall, ob es ein numerischer Wert ist). SQL-Injections sind sehr einfach zu vermeiden, richten aber einen massiven Schaden an, wenn man es nicht macht

Noch ein Punkt: ich weiß zwar nicht, wie deine upload-Funktion aussieht, aber ich hoffe, du prüfst is_uploaded_file() ab
Raise your glass if you are wrong
0

#3 Mitglied ist offline   Marek123 

  • Gruppe: aktive Mitglieder
  • Beiträge: 46
  • Beigetreten: 23. Dezember 05
  • Reputation: 0
  • Wohnort:Hattingen
  • Interessen:Webdesign/Coding

geschrieben 05. September 2010 - 17:37

Siehst du, so Sicherheits Sachen übersieht man. Hab ich nun geändert. Habe ich sonst überall!

Das mit dem SELECT * war mir aber "neu" bzw hab es noch nie angewendet. Werde nun mal mein Skript umstellen.

Upload() sieht so aus:

CODE
function upload($theFile, $name){
$this->fileInfo = $theFile;
$this->fileLocation = $this->direct . $name . "_" . $this->fileInfo['name'];
if(!file_exists($this->fileLocation)){
if(move_uploaded_file($this->fileInfo['tmp_name'], $this->fileLocation)){
return 'Datei erfolgreich hochgeladen!';
} else {
return 'Datei konnte nicht hochgeladen werden!';
$this->error = "Datei konnte nicht hochgeladen werden!\n";
}
} else {
return 'File by this name already exists';
}
}


is_uploaded_file() bewirkt was genau?


Und den isset check ich gleich mal. Ist wirklich so ein Krampf.


*EDIT*
Es funktioniert.
&& $_FILES['pic']['size'] > 0 hat sehr gut geholfen!

VIELEN DANK!

Dieser Beitrag wurde von Marek123 bearbeitet: 05. September 2010 - 17:37

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0