Probleme mit Bilderupdate!

Seven Secrets

Erfahrenes Mitglied
hallo, ich habe ein Script geschrieben, in dem der Inhalt einer Datenbank geändert werden soll. Ebenso soll ein neues Bild hochgeladen werden bzw. wenn kein neues Bild angegebn wird soll das alte einfach behalten werden. leider funktioniert es nicht so recht. Das Bild wird trotz Abfrage immer gelöscht. Wo ist meine Fehler:

PHP:
Function Commit_Update ($state, $uid, $in_date, $headline, $pic, $newpic, $teaser, $conntent) {
$result = mysql_query("UPDATE news SET in_date = '$in_date', headline = '$headline', teaser = '$teaser', conntent = '$conntent' WHERE uid = '".$uid."';") OR die(mysql_error());

if ($newpic == ""){} else {
unlink("../news-pics/".$pic);
$tempname = $_FILES['newpic']['tmp_name'];
$name = $_FILES['newpic']['name'];
$pfad_info_2 = pathinfo($name);
copy("$tempname", "../news-pics/$uid.".$pfad_info_2["extension"]);
$newpic = "$uid.".$pfad_info_2["extension"];

$result = mysql_query("UPDATE news SET pic = '$newpic' WHERE uid = '".$uid."';")  OR die(mysql_error()); 
}

$state = "";
$status = "Datensatz erfolgreich geändert!";
Print_News($uid, $status);
};
 
Hallo Seven Secrets,

deine Abfrage würde ich so gestalten, dass du kein else brauchst, denn so hast du (mehr oder weniger) unnötigen Code.
Also anstatt
PHP:
if ($newpic == ""){} else { 
//...
}

solltest du

PHP:
if ($newpic != "") { 
//...
}

schreiben.

Desweiteren denke ich, dass $newpic einfach immer nen Wert enthält (ich weiß ja nicht wie du die Funktion aufrust), deshalb würde ich mal mit [phpf]var_dump[/phpf] überprüfen was diese Variable letzendlich enthält.

Und ich würde dir noch zu Herzen legen, dass du dir - Wie kann ich bösartigen Code in SQL-Abfragen unterbinden? - ansiehst.

Gruß

Devil
 
Ich habe versucht ein paar Fehler zu finfen, aber leider keine gefunden. Ich habe nur festgestellt, das das neu Bild aus folgendem Formular nicht hochgeladen wird.

PHP:
echo "<body bgcolor=\"#FFFFFF\" topmargin=\"0\">
<table width=\"300\" height=\"24\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" background=\"../grafics/head.jpg\">
  <tr> 
    <td width=\"60\">&nbsp;</td>
	<td width=\"215\" valign=\"middle\"><font size=\"-1\" face=\"Arial, Helvetica, sans-serif\"><strong>news-admin</strong></font></td>
    <td width=\"25\">&nbsp;</td>
  </tr>
</table><br><br><div align=\"center\"><b>News bearbeiten:</b></div>
<FORM METHOD = \"POST\" ACTION=\"news-admin.php\">

<table border=\"0\" align=\"center\">
  <tr>
    <td><INPUT TYPE = \"hidden\" NAME = \"uid\" VALUE = \"$uid\"></td>
    <td><INPUT TYPE = \"hidden\" NAME = \"state\" VALUE = \"$state\"></td>
  </tr>
  <tr>
    <td class=\"inhalt\">Datum: </td>
    <td align=\"left\"><INPUT TYPE = \"TEXT\" NAME=\"in_date\" VALUE = \"$in_date\" size=\"46\"></td>
  </tr>
    <tr>
    <td class=\"inhalt\">Überschrift: </td>
    <td align=\"left\"><INPUT TYPE = \"TEXT\" NAME=\"headline\" VALUE = \"$headline\" size=\"46\"></td>
  </tr>  
  <tr>
    <td class=\"inhalt\" valign=\"top\">altes Bild: </td>
    <td align=\"center\" valign=\"top\"><img src=\"../news-pics/$pic\" hspace=\"10\"></td>
  </tr>
  <tr>
    <td class=\"inhalt\">neues Bild:</td>
    <td align=\"left\"><INPUT TYPE = \"file\" NAME=\"newpic\" VALUE = \"$newpic\" size=\"25\"></td>
  </tr>
  <tr>
    <td class=\"inhalt\" valign=\"top\"><br><br>Kurztext:&nbsp;&nbsp;&nbsp;</td>
    <td><br><textarea cols=\"35\" rows=\"4\" NAME=\"teaser\" VALUE = \"$teaser\">".$teaser."</textarea></td>
  </tr>
  <tr>
    <td class=\"inhalt\" valign=\"top\"><br><br>Inhalt:&nbsp;&nbsp;&nbsp;</td>
    <td><br><textarea cols=\"35\" rows=\"8\" NAME=\"conntent\" VALUE = \"$conntent\">".$conntent."</textarea></td>
  </tr>
</table>

  <br>
  <br>
  <p align=\"center\"><INPUT TYPE=\"submit\" VALUE=\"Speichern\"></p>";
};

Habe ich ein Fehler im Formular?

In die Datenbank wird bei dem oberen Script keine Dateiendung geschrieben und auch nur die vorhandene Datei gelöscht, ohne das, wie geschrieben, die neue hochgeladen wird.
 
Einen Fehler hast du sogesehen nicht, dir fehlt nur etwas.
Du musst bei <form> noch das Attribute enctype mit den Wert multipart/form-data hinzufügen, also in deinem Beispiel

PHP:
echo '<form method= "post" action="news-admin.php" enctype="multipart/form-data">';

Mehr zu PHP und das Händling von File-Uploads findest du hier.
Hier steht auch unter anderem:
Note: Be sure your file upload form has attribute enctype="multipart/form-data" otherwise the file upload will not work.

Gruß

Devil
 
Zurück