WannaBe OOP Class & Func zum Upload definieren

Diskutiere mit über: WannaBe OOP Class & Func zum Upload definieren im Web-Programmierung Forum

  1. sevY

    sevY Thread Starter Gast

    Hi,

    ich beschäftige mich zur Zeit mit dem hochinteressanten Thema OOP und wollte einfach mal überlegen was man so machen kann. Zur eher syntaktischen Übung dachte ich mir folgendes:

    Anstatt immer ein langes Skript prozedural zu schreiben, das eine Datei aus einem Formularfeld hochlädt, dachte ich mir, definiere ich eine Klasse mit einer Funktion, die das übernimmt.

    Eine uploaded Datei sollte auch immer direkt einen Modus verpasst bekommen, da sie ansonsten zb. in Flash nicht angezeigt werden „könnte“ (ich arbeite ausschließlich mit Flash und nur mit PHP/MySQL für den dynamischen Datenaustausch bzw. solche Admintools wie hier ).


    Ich habe mal mein Vorhaben skizziert, aber es geht bestimmt eleganter.

    Das ganze ist eine Art Notizblock für zb 3 Leute, die Online für zb eine Namenssuche und ein Logo Ideen festhalten möchte. Wie gesagt geht es hierbei erstmal nur um die Klasse&Funktion.

    Das Hauptskript, das das Formular und die Funktionen enthält:

    PHP:
    <?php
    require_once('config.inc.php');
    require_once(
    'function.inc.php');
    $db_tab='sketchpad';
    $date=date('y.m.d');
    $imagepath='suggested_logos/';
    if(
    $_POST['input']=='insert')
        {
    //hier definiere ich Variablen für den Array
        
    $file_name=$_FILES['suggested_logo']['name'];
        
    $file_tmpname=$_FILES['suggested_logo']['tmp_name'];
        
    $file_destination=$imagepath.$file_name;
    //hier wird der array definiert, der in die Variable eingesetzt werden soll
        
    $parameter=array($file_name,$file_tmpname,$file_destination,$file_permission); 
    //hier sollte das parameter an die funktion übergeben werden und auf den rückgabewert reagieren
        
    if(!upload::upload_image($parameter))
            {
            echo
    "fehler";
            }
        else
            {
            
    mysql_db_query($db_dbase,"insert into $db_tab (date,text,image,user) VALUES ('$date','$_POST[suggested_name]','$parameter[0]','$_POST[user]')");
            echo
    "<meta http-equiv=refresh content=\"0; URL=".$_SERVER['PHP_SELF']."\">";
          }
       }    
    ?>

    <html>
    <head>
    <title>Sketchpad</title>
    <link rel="stylesheet" href="default.css">   
    <meta http-equiv="content-type" content="text/html"; charset="iso-8859-1"> 
    <meta name="robots" content="noindex,nofollow"> 
    </head>
    <body>
    <table width="100%" height="100%" cellspacing="0" cellpadding="0">
        <tr>
            <td align="center" valign="middle">
                <table cellspacing="0" cellpadding="0">
                    <tr>
                        <td>
                        <?php
                        
    echo"
                            <form enctype=multipart/form-data action="
    .$_SERVER['PHP_SELF']." method=\"post\">
                                <h3>Sketchpad</h3>
                                <hr width=100%><p>
                                <input type=\"hidden\" name=\"input\" value=\"insert\">
                                <input type=\"text\" name=\"suggested_name\" value=\"Namensvorschlag\"><p>
                                <hr width=100%><p>
                                <b>Logovorschlag</b><p>
                                <input type=\"file\" name=\"suggested_logo\"><p>
                                <hr width=100%><p>
                                <b>Author</b><p>
                                <input type=\"radio\" name=\"user\" value=\"Bjo&uml;rn\">Bj&ouml;rn<p>
                                <input type=\"radio\" name=\"user\" value=\"Olaf\">Olaf<p>
                                <input type=\"radio\" name=\"user\" value=\"Yves\">Yves<p>
                                <hr width=100%><p>
                                <input type=\"submit\" value=\"Rock'n'Roll\">
                            </form>
                        "
    ;
                        
    ?>
                        </td>
                    </tr>
                </table>
            </td>
        </tr>
    </table>
    </body>
    </html>
    Die function.inc.php, die die Klasse und Funktion enthält.
    Wenn ich die Geschichte mit der boolschen Logik korrekt verstanden habe, sollte die Funktion auch an sich so funktionieren.

    PHP:
    <?php
    class upload
        
    {
        function 
    upload_image($x)
            {
            if(!
    move_uploaded_file($x['0'],$x['2']))
                {
                return(
    false);
                }
            else
                {
                if(!
    chmod($x['2'],$x['3']))
                    {
                    return(
    false);
                    }
                else
                    {
                    return(
    true);
                    }
                }      
            }
        }
    ?>

    Zum Schluß noch die config.inc.php, in der auch der mode-value für den chmod(); steht. Ich denke das ist sehr sinnvoll, da das von Server zu Server aufgrund der Konfiguration varriieren kann.


    Mein Skript funktioniert so übrigens noch nicht, es ist nur eine Skizze.

    Das Problem besteht in diesem Teil.

    PHP:
    if($_POST['input']=='insert')
        {
    //hier definiere ich Variablen für den Array
        
    $file_name=$_FILES['suggested_logo']['name'];
        
    $file_tmpname=$_FILES['suggested_logo']['tmp_name'];
        
    $file_destination=$imagepath.$file_name;
    //hier wird der array definiert, der in die Variable eingesetzt werden soll
        
    $parameter=array($file_name,$file_tmpname,$file_destination,$file_permission); 
    //hier sollte das parameter an die funktion übergeben werden und auf den rückgabewert reagieren
        
    if(!upload::upload_image($parameter))
            {
            echo
    "fehler";
            }
    Ich denke das es nicht sehr elegant gelöst ist und bei der Annahme/Übergabe des Arrays Probleme gibt.


    Hat jemand Lust mitzutüffteln?


    Liebe Grüße

    Yves
     
  2. sevY

    sevY Thread Starter Gast

    V0.2

    Hier wird zumindest schon mal der Array gebastelt, den man übergeben muss. Assoziativ, so das man in nem Jahr immer noch was damit anfangen kann.
    PHP:

    <?php
    require_once('config.inc.php');
    require_once(
    'function.inc.php');
    $db_tab='sketchpad';
    $date=date('y.m.d');
    $imagepath='suggested_logos/';
    if(
    $_POST['input']=='insert')
        {
        
    $file_destination=$imagepath.$file_name;  
        
    $parameter=array(name => $_FILES['suggested_logo']['name'],tmpname => $_FILES['suggested_logo']['tmpname'],destination => $file_destination,permission => $file_permission); 
        
    $upload_new = new upload();
        if(!
    $upload_new->upload_image(&$parameter))
            {
            echo
    "fehler";
            }
        else
            {
            
    mysql_db_query($db_dbase,"insert into $db_tab (date,text,image,user) VALUES ('$date','$_POST[suggested_name]','$parameter[0]','$_POST[user]')");
            echo
    "<meta http-equiv=refresh content=\"0; URL=".$_SERVER['PHP_SELF']."\">";
            }
        unset(
    $replace_new);
        }   
    ?>
    Und die Klasse, die eigentlich nur strukturiert sieht dann so aus:
    PHP:
    class upload
        
    {
        function 
    upload_image($x)
            {
            if(!
    move_uploaded_file($x['tmpname'],$x['destination'].$x['name']))
                {
                return(
    false);
                }
            else
                {
                if(!
    chmod($x['destination'],$x['permission']))
                    {
                    return(
    false);
                    }
                else
                    {
                    return(
    true);
                    }
                }      
            }
        }
    Gerne würde ich das aber mit den anderen Klassen auch realisieren.

    Eine Klasse für das Tracking des Dateinamens.
    Eine Klasse Replace für das Umbenennen eines eventuell ungültigen Dateinamens.
    Eine Klasse für das Uploaden,verschieben,benennen der Datei.
    Eine Klasse für die Zugriffsrechte, die neuen Dateien und Zielordner entsprechende Modi verpasst.
    Das könnte man doch OOPmäßig alá „eine Kiste weiß nicht was in der anderen drin ist“ kombinieren und entsprechend der boolschen Logik dann ein true oder false aus der Gesamtsumme der Rückgabewerte erhalten und auf Wunsch auch einzelne Rückgabewerte abgreifen und spezielle Fehlermeldungen ausgeben.
    Yves
     
  3. stegoe

    stegoe MacUser Mitglied

    Beiträge:
    24
    Zustimmungen:
    0
    Registriert seit:
    25.01.2004
    Zum 'mitzutüffteln' hab ich so richtig keine Zeit, aber vielleicht ein paar Gedanken zu Deinem Vorhaben: Warum willst Du für jeden Bereich eine eigene Klasse anlegen, das widerspricht doch eigentlich dem OO-Grundprinzip? Dann könnte man das ganze doch auch gleich nur mit Funktionen lösen.

    Was Du brauchst - wenn ich das richtig verstehe was du machen willst - wäre ja eine 'class dateisystem' in der dann entsprechend 'function datei_hochladen' und 'function datei_loeschen' und 'function datei_rechte_setzen' (und so weiter) und einige weitere Hilfunktionen vielleicht wie 'function dateiname_pruefen' oder 'function suffix_ermitteln' oder was man sonst so noch braucht bereitgestellt wird.
     
  4. sevY

    sevY Thread Starter Gast

    &nbsp;

    Daher ja WannaBe ;) … Nein mal im Ernst, du hast recht. Ich weiß nur noch nicht genau, wie ich das umsetzen soll, daher oben grob der Vorschlag mit den Klassen. Eine einzige Klasse macht natürlich Sinn, gerade wegen der Übergabe der Parameter.

    In anderen Foren riet man mir, etwas vorgefertigtes zu nehmen, aber dazu habe ich keine Lust. Ich werde mich mal an die Arbeit begeben und euch hier auf dem Laufenden halten, sofern es was neues gibt. Gerade für meinen derzeitigen Auftrag macht das Sinn…

    Liebe Grüße

    Yves
     
Die Seite wird geladen...
Ähnliche Themen - WannaBe OOP Class Forum Datum
onclick: css class ändern Web-Programmierung 09.05.2011

Diese Seite empfehlen

Benutzerdefinierte Suche