Probleme beim schreiben in Datenbank

Den Namen des Bildes musst du eigentlich gar nicht in der DB speichern da er sich eindeutig aus der ID des jeweiligen Datensatz bilden lässt.

Du musst nur die restlichen Angaben speichern und dann mit Hilfe von mysql_insert_id die ID des Datensatz ermittln.
Dann wird das Bild übertragen und bekommt als Namen die so ermittelte ID des Datensatzes.

@Tim: Du Spielverderber, jetzt gib doch einem alten Mann mal Zeit zum Schreiben.
 
Haha, ihr Profis ! Ich bin wirklich ambitioniert und so'n Kram, aber für mich ist leider doch jedes neue Skript 'ne harte Nuss. Ich hab's (das hätte ich erwähnen sollen) bis jetzt so gelöst, dass ich 2 verschiedene Formulare habe. Eins für Überschrift, Text und Dateiname und ein zweites Formular für den Dateiupload. Ich weiss nicht ob ich es hinbekomme beide zu vereinen um dann mit 'mysql_insert_id' den Namen zu ändern.
In der mysql_insert_id Referenz steht, dass automatisch die letzte ID ausgegeben wird, die angefragt wurde. Wenn ich also den Datei-Upload gleich nach dem Newstext verfassen ausführe, wird die richtige ID geliefert ?
 
Du führst die SQL-Abfrage zum Speichern aus und im direkten Anschluss daran ermittelst du die ID und speicherst sie z.B. in einer Variablen zwischen.
Dann nimmst du diese Variable und setzt sie beim Benennen des Bildes als Name ein.

Die 2 Formulare solltest du uns mal zeigen. Dann können wir dir auch beim Kombinieren helfen.
 
Wenn du das mit zwei getrennten Aufrufen machst, kann es problematisch werden. Du solltest also auf jeden Fall beide Formulare in einem vereinen (ist nicht so kompliziert!). Versuch es mal mit Hilfe der PHP-Seite (Fileupload) und wenn du Hilfe brauchst, kannst du ja wieder schreiben.

Edit: @tombe so besser? ;)
 
Meine beiden Formulare.

Für die News:
PHP:
<?php
     include ("dbconnect.php");
    
    if ($_POST["addnews"] == "Speichern") 
    {
        $sql = "INSERT INTO `news` (`Ueberschrift`,`Nachrichtentext`,`Bilddaten`,`Dateityp`) VALUES ('".$_POST["topic"]."','".$_POST["text"]."','".$_POST["img"]."','".$filetype."')";
        $res = mysql_query($sql) or die(mysql_error());
            echo "Sie haben die Nachricht mit der Überschrift <b>".$_POST["topic"]."</b> erfolgreich erstellt";
      }
?> 

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
&Uuml;berschrift:<br />
<input name="topic" type="text" value="F&uuml;gen sie hier die &Uuml;berschrift der neuen Nachricht ein." size="50" maxlength="200" /><br /><br />
Nachrichtentext:<br />
<textarea name="text" cols="50" rows="12"></textarea><br /><br />
Ein Bild zur Nachricht hinzufügen:<br />
<input name="img" type="file" value="Durchsuchen..." /><br /><br />
<input type="submit" name="addnews" value="Speichern">
<input type="reset" name="felder_loeschen" value="Eintragungen verwerfen">
</form>
Die Upload-Feld ist hier natürlich nicht funktionstüchtig !

Für den Datei-Upload:
PHP:
<?php
    if(@file_exists('config.php')==true)
        include_once('config.php');
    else {
         echo 'No Config File existing.';
         exit;
    }
    if(@file_exists('language/'.$language_file)==true)
        include_once('language/'.$language_file);
    else {
         echo 'No Language File existing.';
         exit;
    }
    if(file_exists('error_log.php')==true)
        include_once('error_log.php');
    if(function_exists("date_default_timezone_set")==true)
        @date_default_timezone_set($timezone);
    $reg_exp="/^[a-z0-9_]([a-z0-9_-]*\.?[a-z0-9_-])*\.[a-z]{3,4}$/i";
    $url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';
    $url .= $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']);
    $document_root=$_SERVER["DOCUMENT_ROOT"].dirname($_SERVER['PHP_SELF']);
    $ausgabe='';
    if (!isset($_GET["loechen"])) $_GET["loechen"] = ""; else  $_GET["loechen"]=sprintf("%d",  $_GET["loechen"]);
    if (!isset($_GET["file"]))    $_GET["file"] = "";
    if(!isset($_POST["senden"])) $_POST["senden"]=''; else  $_POST["senden"]=sprintf("%d",  $_POST["senden"]);
    if(!isset($_POST["tn"])) $_POST["tn"]='';
    if(@file_exists('header.php')==true)
        include_once('header.php');
    if(@file_exists('functions.php')==true)
        include_once('functions.php');
    if(@file_exists('file_delete.php')==true)
        include_once('file_delete.php');
    if(@file_exists('processing.php')==true)
        include_once('processing.php');
    if(uploadmoeglichkeitpruefen()==false){
        $ausgabe.='<div style="color:red;">'.$lang['fehler_upload_nicht_m'].' <a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'">'.$lang['navigationselemente_test'].'</a><br><br></div>'."\n";
        include_once('footer.php');
        exit;
    }
    if(@file_exists($document_root.$img_ordner)==false OR $document_root.$img_ordner ==''){
        $ausgabe.='<div style="color:red;">'.$lang['fehler_upload_no_directory'].' <a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'">'.$lang['navigationselemente_test'].'</a><br><br></div>'."\n";
        include_once('footer.php');
        exit;
    }
    if(@file_exists('form.php')==true)
        include_once('form.php');
    if(@file_exists('file_list.php')==true)
        include_once('file_list.php');
    if(@file_exists('footer.php')==true)
        include_once('footer.php');
?>

...und die dazugehörige 'processing.php':
PHP:
<?php
    if(strpos("processing.php",$_SERVER["PHP_SELF"])) {
          exit;
    }
    $filename = '';
    if($_POST["senden"]==1){
        $ausgabe.='<br>'."\n";
        $ausgabe.='    <strong>'.$lang['navigationselemente_ueberscrift_file_upload'].'</strong><br><br>'."\n";
        if($_FILES['userfile']['tmp_name']==''){
            $ausgabe.='<div style="color:red;">'.$lang['file_auswaehlen'].' <a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'">'.$lang['navigationselemente_nochmal'].'</a><br><br></div>'."\n";
            include_once('footer.php');
            exit;
        }
        if ($_FILES['userfile']['tmp_name']<> 'none' OR $_FILES['userfile']['tmp_name']!=''){
            $file = $_FILES['userfile']['name'];
            $temp = $_FILES['userfile']['tmp_name'];
            $path_parts = @pathinfo($file);
            if(!isset($path_parts["extension"])) $path_parts["extension"]='';
            if($_FILES['userfile']['type'] != 'image/x-png' && $_FILES['userfile']['type'] != 'image/gif' && $_FILES['userfile']['type'] != 'image/jpeg' && $_FILES['userfile']['type'] != 'image/png' && $_FILES['userfile']['type'] != 'image/jpeg' && $_FILES['userfile']['type'] != 'image/pjpeg') $ist_bild=0; else $ist_bild=1;
            if(function_exists("exif_imagetype")==true){
                if (exif_imagetype($temp) == (IMAGETYPE_GIF OR IMAGETYPE_JPEG OR IMAGETYPE_PNG)) $ist_bild=1; else $ist_bild=0;
            }
            if($upload_erlaubnis == 0) $ist_bild=1;
            if($ist_bild==0) {
                $ausgabe.='<div style="color:red;">'.$lang['file_img'].' <a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'">'.$lang['navigationselemente_nochmal'].'</a><br><br></div>'."\n";
                include_once('footer.php');
                exit;
            } else {
                if($path_parts["extension"]!=""){
                    if($dateiname_dynamisch==1){
                        $filename = "datei_" . time() . "." . $path_parts["extension"];
                    } else {
                        $filename = $file;
                        $umlaute = array(
                            'ä' => 'ae',
                            'Ä' => 'ae',
                            'ß' => 'ss',
                            'ö' => 'oe',
                            'Ö' => 'oe',
                            'Ü' => 'ue',
                            'ü' => 'ue',
                            ' ' => '-',
                            'à' => 'a',
                            'é' => 'e',
                            'è' => 'e',
                        );
                        $filename = str_replace(array_keys($umlaute), array_values($umlaute),$filename);
                        if(preg_match($reg_exp, $filename)==false){
                            $ausgabe.='<div style="color:red;">'.$lang['file_name'].' <a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'">'.$lang['navigationselemente_nochmal'].'</a><br><br></div>'."\n";
                            include_once('footer.php');
                            exit;
                        }
                    }
                    if($_FILES['userfile']['size'] <= $groessemax*1024){
                        if(decoct(fileperms($document_root.$img_ordner))==40777){
                            if(@copy($temp, $document_root.$img_ordner.$filename)){
                                chmod ($document_root.$img_ordner.$filename, 0755);
                                $ausgabe.='<div style="color:green;">'.$lang['file_true'].'<br>';
                                $ausgabe.='Url der Datei: <a href="'.htmlspecialchars($url.$img_ordner.$filename).'" target="_blank">'.htmlspecialchars($url.$img_ordner.$filename).'</a><br><br><a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'">'.$lang['navigationselemente_noch_eine_datei'].'</a><br><br></div>'."\n";
                                include_once('footer.php');
                                exit;
                            } else {
                                $ausgabe.='<div style="color:red;">'.$lang['fehler_upload'].' <a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'">'.$lang['navigationselemente_nochmal'].'</a><br><br></div>'."\n";
                                include_once('footer.php');
                                exit;
                            }
                        } else {
                            $ausgabe.='<div style="color:red;">'.$lang['fehler_upload_rechte'].' <a href="'.htmlspecialchars($_SERVER['PHP_SELF']).'">'.$lang['navigationselemente_nochmal'].'</a><br><br></div>'."\n";
                            include_once('footer.php');
                            exit;
                        }
                    } else {
                        $lang['fehler_upload_groesse']=str_replace("~groesse~",$groessemax,$lang['fehler_upload_groesse']);

                        $ausgabe.='<div style="color:red;">'.$lang['fehler_upload_groesse'].' <a href="'.$_SERVER['PHP_SELF'].'">'.$lang['navigationselemente_nochmal'].'</a><br><br></div>'."\n";
                        include_once('footer.php');
                        exit;
                    }
                }
            }
        }
    }
?>

Ich bin total dankbar für eure Hilfe. Würde mich echt freuen wenn ich das hinbekomme !

Vergessen/übersehen:

Hier noch das eigentliche Formular für den Upload:
PHP:
<?php
    if(strpos("form.php",$_SERVER["PHP_SELF"])) {
          exit;
    }
    $ausgabe.='<br>'."\n";
    $ausgabe.='    <strong>'.$lang['navigationselemente_ueberscrift_file_upload'].'</strong><br><br>'."\n";
    if($_POST["senden"]==0){
        $ausgabe.='<form method="post" enctype="multipart/form-data" action="'.htmlspecialchars($_SERVER["PHP_SELF"]).'">'."\n";
        $ausgabe.='    <input type="hidden" value="1" name="senden">'."\n";
        $lang['file_delete_groesse']=str_replace("~groesse~",(((maximaledateiuploadgroesseermitteln()/1024)>$groessemax) ? $groessemax : (maximaledateiuploadgroesseermitteln()/1024)),$lang['file_delete_groesse']);
        $ausgabe.=$lang['file_delete_groesse'].'<br><br>'."\n";
        $ausgabe.='    <input name="userfile" type="file" size="40"><br><br>'."\n";
        $ausgabe.='    <input type="submit" name="action" value="'.$lang['navigationselemente_speichern'].'">'."\n";
        $ausgabe.='</form> '."\n";
    }
?>

Danke ! Danke ! Danke ! :-)
 
Zuletzt bearbeitet:
Mit dem Code zu arbeiten ist gar nicht so einfach. Durch die vielen include-Anweisungen ist es eigentlich nicht möglich ihn zum Laufen zu kriegen.

Du hast ja bei den News bereits ein Dateifeld enthalten. Ändere zuerst mal das Form-Tag so das der Upload generell möglich ist in dem du noch
HTML:
enctype="multipart/form-data"
angibst.

Dann änderst du den Teil zum Speichern noch
PHP:
$sql = "INSERT INTO `news` (`Ueberschrift`,`Nachrichtentext`,`Bilddaten`,`Dateityp`) VALUES ('".$_POST["topic"]."','".$_POST["text"]."','".$_POST["img"]."','".$filetype."')"; 
$res = mysql_query($sql) or die(mysql_error());
// letzte ID ermitteln
$bild = mysql_insert_id();
so ab.

Zum erfolgreichen Abschluss musst du nun "nur noch" deinen restlichen Code ("upload.php" und "processing.php") in der Seite unterbringen.
An der Stelle wo das Bild seinen Namen bekommt verwendest du dann die Variable $bild. Versuche es mal ob du so klar kommst.
 
Zurück