Fehler beim Datenbankupdate nach einem Dateiupload

Cesideem

Grünschnabel
Hallo,
ich habe mir mittels des Upload-Tutorials von hier eine angepasste Version für meine Zwecke gebastelt. Nun habe ich allerdings folgendes Problem:

Ich lese aus einer Datenbank aus, welche Datei der User auf den Server laden soll bzw. ob es diese Datei schon gibt (DB-Feld 0=Datei noch nicht auf Server 1=Datei auf Server).
Insgesamt sollen maximal vier Dateien auf den Server geladen werden. Nach dem Upload soll in der Datenbank das jeweilige DB-Feld für die entsprechende Version von 0 auf 1 gesetzt werden. Soweit sogut...

Hier mal der Code vom Skript:

Code:
<?php require_once('Connections/MySQL.php'); ?>
<?php  $colname_upload = "1";
if (isset($HTTP_POST_VARS['id'])) {
    $colname_upload = (get_magic_quotes_gpc()) ? $HTTP_POST_VARS['id'] : addslashes($HTTP_POST_VARS['id']);
}
mysql_select_db($database_MySQL, $MySQL);
$query_upload = sprintf("SELECT * FROM lehrgaenge WHERE ID = %s", $colname_upload);
$upload = mysql_query($query_upload, $MySQL) or die(mysql_error());
$row_upload = mysql_fetch_assoc($upload);
$totalRows_upload = mysql_num_rows($upload);

// DATEIUPLOAD

$tempname = $_FILES['file']['tmp_name'];
$name = $_FILES['file']['name'];
$type = $_FILES['file']['type'];
$size = $_FILES['file']['size'];
$pdf = ".pdf";
$findpdf = strpos($name,$pdf,0);
$nameneu = substr($name,0,$findpdf);
$lang = $_POST['lang'];
$id = $_POST['id'];
$namesoll = "lehrgang_".$lang;
echo "nameneu: $nameneu<br>";
echo "namesoll: $namesoll<br>";
if($type != "application/pdf") {
       $err[] = "Es dürfen NUR PDF-Dateien auf den Server geladen werden.";
}
if ($nameneu != $namesoll) {
       $err[] = "Der Dateiname MUSS die folgdende Form haben: lehrgang_xx (xx=dt, xx=fr, xx=en, xx=pl)";
}
$monat=substr($row_upload['datum_beginn'],5,2);
switch ($monat) {
     case "01" : $monat="januar"; break;
     case "02" : $monat="februar"; break;
     case "03" : $monat="maerz"; break;
     case "04" : $monat="april"; break;
     case "05" : $monat="mai"; break;
     case "06" : $monat="juni"; break;
     case "07" : $monat="juli"; break;
     case "08" : $monat="august"; break;
     case "09" : $monat="september"; break;
     case "10" : $monat="oktober"; break;
     case "11" : $monat="november"; break;
     case "12" : $monat="dezember"; break;
}
$jahr=substr($row_upload['datum_beginn'],0,4);
$lz=strrpos($row_upload['lehrer']," ");
if ($lz) {
     $vorname=substr($row_upload['lehrer'],0,$lz);
     $vorname=strtolower($vorname);
} else $vorname=strtolower($row_upload['lehrer']);
$art=$row_upload['art'];
$art=strtolower($art);
$dateiname = "lehrgang_".$art."_".$vorname."_".$monat."_".$jahr."_".$lang.$pdf;
echo "dateiname: $dateiname<br>";
if(empty($err)) {
     copy("$tempname", "$dateiname");
     echo "Die Datei $dateiname wurde erfolgreich hochgeladen!<br>";
     echo "tempname: $tempname<br>";
     echo "name: $name<br>";
     echo "type: $type<br>";
     echo "size: $size<br>";
     echo "lang: $lang";
     echo "id: $id<br>";
     if ($lang = "dt") {
          $lg = 1;
          $query_update = "UPDATE lehrgaenge SET dt_upload = $lg WHERE id = $id";
          $dummy = mysql_query($query_update);
     } else if ($lang = "fr") {
          $lg = 1;
          $query_update = "UPDATE lehrgaenge SET fr_upload = $lg WHERE id = $id";
          $dummy = mysql_query($query_update);
     } else if ($lang = "en") {
          $lg = 1;
          $query_update = "UPDATE lehrgaenge SET en_upload = $lg WHERE id = $id";
          $dummy = mysql_query($query_update);
     } else if ($lang = "pl") {
          $lg = 1;
          $query_update = "UPDATE lehrgaenge SET pl_upload = $lg WHERE id = $id";
          $dummy = mysql_query($query_update);
     }
     echo "<a href=\"lehrgaenge_admin.php\">zur&uuml;ck</a> zur Lehrgangsadministration";
}   else {
     foreach($err as $error)
          echo "$error<br>";
}
mysql_free_result($upload);
?>

Die Variablen $id und $lang habe ich im Forumlarfeld, bei der Dateisuche, als versteckte Felder mit an dieses Skript übergeben.

Das Skript arbeitet soweit richtig, ABER nun der Fehler:

Wenn in der Datenbank die Variablen dt_upload, fr_upload, en_upload und pl_upload auf 0 gesetzt sind, ich die dt-Version auf den Server lade, arbeitet das Skript so wie es soll. dt_upload wird wie gewünscht auf 1 gesetzt. Wenn ich jetzt aber eine andere Version auf den Server lade, wird die entsprechende Variable in der Datenbank NICHT mehr neu gesetzt. Also fr-Version erfolgreich auf den Server geladen, aber in der DB ist fr_upload immer noch 0...

//EDIT: Wenn dt_upload = 0 und ich eine fr-Version auf den Server lade, wird dt_upload = 1 gesetzt ansellte von fr_upload...

Kann mir wer sagen, wo sich da der Fehlerteufel eingeschlichen hat? Ich such schon ewig und finde den nicht...

Danke schonmal im voraus.

Cesideem
 
Zuletzt bearbeitet:
als erstes würd ich mal die $id mit echo oder print abfragen ob überhaupt was drin iss.

dann kannst du ja mal versuchen es nicht mit:

PHP:
$lg = 1;
$query_update = "UPDATE lehrgaenge SET pl_upload = $lg WHERE id = $id";
$dummy = mysql_query($query_update);

sondern gleich mit

PHP:
$query_update = "UPDATE `lehrgaenge` SET `pl_upload` = 1 WHERE `id` = $id";
$dummy = mysql_query($query_update);

aber geht nur, wenn dein Tabellen Feld in der DB ein Integer Feld iss.

aber dann würde es gehen.

ode reinfach mal die ` zeichen bei der SQL abfrage vor und hinter einen Feld bzw Tabellennamen machen kann auchsein, dass er die SQL Befehle nicht richtig ausführ. weil den Fehler zeigt er dir ja nicht an.


MfG

Patrick
 
Danke für Deine Antwort. Ich werde es gleich mal versuchen.

In der Datenbank sind die Felder xx_upload jeweils TINYINT Felder
Und der VariablenCheck via echo $id und echo $lang gibt mir jeweils die korrekten Variablen aus. Das ist es ja, was mich bei der ganzen Sache wundert.

Gruß
Cesideem

//EDIT

Hab Deinen Vorschlag grad mal getestet... Aber leider selbe Fehler... :(
 
Zuletzt bearbeitet:
tynint istt kleine zahlenfeld (soviel ich weiß) :D

deshalb schreibt der nix rein ^^ da muss eine 1 reingeschrieben werden
 
PHP:
     if ($lang = "dt") {
          $lg = 1;
          $query_update = "UPDATE lehrgaenge SET dt_upload = $lg WHERE id = $id";
          $dummy = mysql_query($query_update);
     } else if ($lang = "fr") {
          $lg = 1;
          $query_update = "UPDATE lehrgaenge SET fr_upload = $lg WHERE id = $id";
          $dummy = mysql_query($query_update);
     } else if ($lang = "en") {
          $lg = 1;
          $query_update = "UPDATE lehrgaenge SET en_upload = $lg WHERE id = $id";
          $dummy = mysql_query($query_update);
     } else if ($lang = "pl") {
          $lg = 1;
          $query_update = "UPDATE lehrgaenge SET pl_upload = $lg WHERE id = $id";
          $dummy = mysql_query($query_update);
     }
$lang = "dt" ist eine Zuweisung, und kein Vergleich. Der Vergleichsoperator ist ==.
 
ok hab unrecht gehabt :( *schähm*

passiert :) es kann jeder mal was übersehen :) hätte es aber auch sein können
 
Oliver Gringel hat gesagt.:
$lang = "dt" ist eine Zuweisung, und kein Vergleich. Der Vergleichsoperator ist ==.

Oh man... ich wußte, daß es nen Dummer Fehler sein mußte... Danke... das war der Fehler... :S Oh man... Den Wald vor lauter Quellcode nicht gesehen...
 
Zurück