CSV PHP Gallerie Problem!!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • CSV PHP Gallerie Problem!!

    Hallo Leute Ich Möchte eine kleine Bildergallerie machen.
    Dazu habe ich (Weil ich mich mit Mysql nicht so auskenne) Mit php und CSv-Dateien Gearbeitet.Nach einloggen kommt man sofort auf eine Seite wo die Bilder Angezeigt werden oben ist dann noch die Möglichkeit ein neues bild anzulegen. Jetzt mein Problem Hochgeladen bekomme ich die Bilder mit dem Skript aber ich bekomme sie nicht in die CSV Datei in einen Img-Tag rein dass sie dann auch angezeigt werden.

    Meine Codes:


    menue.php (das ist die Gallerie seite):
    <form action="menue.php" Method="POST">
    <center>
    <h1>Gallerie</h1>
    <input type="submit" value="Neues Bild" name="neu">
    <input type="submit" value="Löschen" name="delete">
    </center>
    </form>
    <center>
    <?php

    $filename="Daten.csv";
    $row=1;
    if(($datei = fopen($filename, "r"))!==FALSE) {
    while(($data = fgetcsv($datei, 1000, ";"))!==FALSE) {
    $num = count($data);
    $row++;
    for($i=0;$i<$num;$i++) {
    echo $data[$i].'<br>';
    }
    echo "<hr>";
    }
    fclose($datei);
    }
    ?>
    </center>
    <?php
    if(isset($_POST['neu'])) {
    header ("Location: daten.php");
    }
    ?>


    daten.php (bilder upload script):
    <form action="daten.php" method="FILES" enctype="multipart/form-data">
    Ihr Bildnamen eintragen<input type="text" name="bn"><br>
    <input type="file" name="datei"><br>
    <input type="submit" value="Hochladen" name="hochladen">
    </form>

    <?php
    if (isset($_FILES['hochladen']))
    {
    $type = GetImageSize($_FILES['datei']['tmp_name']);
    $size = $_FILES['datei']['size'];
    $check = false;
    if ($type['mime'] == 'image/jpeg' or $type['mime'] == 'image/gif')
    {
    $check = true;
    }
    if ($size < 1002400 && $check == true )
    {
    move_uploaded_file($_FILES['datei']['tmp_name'], "bilder/".$_FILES['datei']['name']);
    $name=$_FILES['bn'];
    $daten=$bild.";".$name;
    $save = "Daten.csv";
    $infos = fopen($save,"a");
    fwrite($infos , $daten);
    echo 'Bild erfolgreich hochgeladen!';

    }

    elseif ($size > 1002400)
    {
    echo 'Das Bild ist zu groß!'; }
    elseif ($check == false)
    {
    echo 'Das Bild ist kein *.jpg oder *.gif';}
    }
    ?>

    Ich hoffe Ihr könnt mir helfen Bin schon am verzweifeln

    LG Nirobe
    Angehängte Dateien

  • #2
    Du hast in der CSV nur zwei Felder mit bild und name?
    Dann musst Du die auch so ausgeben.

    PHP-Code:
    echo "<img src=\"".$bild[$i]."\" alt=\"".$name[$i]."\">\n"
    Tausche mal diesen Abschnitt

    PHP-Code:
    $row=1;
    if((
    $datei fopen($filename"r"))!==FALSE) {
    while((
    $data fgetcsv($datei1000";"))!==FALSE) {
    $num count($data);
    $row++;
    for(
    $i=0;$i<$num;$i++) {
    echo 
    $data[$i].'<br>';
    }
    echo 
    "<hr>";
    }
    fclose($datei);

    gegen diesen Code aus:

    PHP-Code:
    $row =  0;
    $bis 20;

    if((
    $datei fopen($filename"r"))!== false) {

        while((
    $data fgetcsv($datei0";"))!== false) {
        
            if (
    $row $bis){        
                echo 
    "<img src=\"".$data[0]."\" alt=\"".$data[1]."\"><hr>\n";
                
    $row++;            
            }
        }
        
    fclose($datei);

    Da würde jetzt noch eine zusätzliche Bedingung fehlen, wenn mehr als $bis Image-URIs enthalten sind, ob zum Umblättern oder wie auch immer. Das hängt dann davon ab, wie die Galerie aufgebaut werden soll.
    Zuletzt geändert von Melewo; 29.03.2013, 21:48.

    Kommentar


    • #3
      es ging mir eher um die Daten.php ob da fehler sind da die daten garnet in die csv datei geschrieben werden.

      Kommentar


      • #4
        Zitat von Nirobe Beitrag anzeigen
        es ging mir eher um die Daten.php ob da fehler sind da die daten garnet in die csv datei geschrieben werden.
        Kann ja auch nicht, dazu müsstest du ja $bild erst einmal irgendwo deklarieren und initialisieren. Einfach mal gleich nach dem öffenden PHP-Tag

        PHP-Code:
        error_reporting(E_ALL);
        ini_set("display_errors"1); 
        einfügen, dann sollten sich derartige Fehler eigentlich auch zu erkennen geben.

        Kommentar


        • #5
          Der Zeigt Garkeine Errormeldungen an

          Kommentar


          • #6
            Zitat von Nirobe Beitrag anzeigen
            PHP-Code:
            $name=$_FILES['bn'];
            $daten=$bild.";".$name;
            $save "Daten.csv";
            $infos fopen($save,"a");
            fwrite($infos $daten); 
            Jedenfalls sehe ich nicht, wo Du $bild bekannt machst und einen Wert zuweist, bevor Du $bild in die Datei zu schreiben versuchst.

            Und dann weiß ich nicht, wie viele Fehler da noch enthalten sind. Eigentlich beginnt es bereits beim Formular. Habe extra noch einmal in einer neueren Printausgabe von selfhtml nachgeschlagen, für das Hochladen von Dateien ist nur die Methode Post erlaubt. Somit wäre schon die erste Zeile fehlerhaft:

            Zitat von Nirobe Beitrag anzeigen
            PHP-Code:
            <form action="daten.php" method="FILES" enctype="multipart/form-data"
            Falls Du da nur wahllos etwas zusammen kopiert hast, ohne zu wissen, was Du eigentlich tust, kann das sicherlich kaum etwas werden. Selbst wenn Du es zum Laufen bekommen solltest, so könntest Du Dir eine größere Sicherheitslücke schaffen.
            Zuletzt geändert von Melewo; 30.03.2013, 08:41.

            Kommentar


            • #7
              Hallo Melewo
              Du hattest natürlich recht hab die falsche Version hochgeladen wo ich bild noch nicht deklariert hatte.jetzt erhalte ich folgende Error Meldungen:

              datei.php
              Notice: Undefined index: datei in C:\Program Files\xampp\htdocs\public_html\Ausbildung\daten.php on line 10

              Warning: getimagesize(): Filename cannot be empty in C:\Program Files\xampp\htdocs\public_html\Ausbildung\daten.php on line 10
              PHP-Code:
              $type GetImageSize($_POST['datei']['tmp_name']); 


              Notice: Undefined index: datei in C:\Program Files\xampp\htdocs\public_html\Ausbildung\daten.php on line 11
              PHP-Code:
              $size $_POST['datei']['size']; 

              Ich verstehen den Undefinierten index datei nicht so ganz, da ich ja nur die werte von oben aus dem Formular dadrin haben will.
              Ich hoffe ich nerv dich nicht zu doll bin Anfänger.

              Kommentar


              • #8
                PHP-Code:
                <form action="daten.php" method="post" ... <!-- method="POST und nicht FILES!" 
                                                            Bezieht sich auf HTTP-Request-Methode -->
                ...
                </form>

                <?php
                error_reporting
                (E_ALL);
                ini_set("display_errors"1);

                // Array zum Test mal ausgeben lassen, nur mal um zu schauen, was alles in "datei" enthalten ist.

                echo "<pre>\n";
                print_r($_FILES["datei"]);
                echo 
                "</pre>\n";

                // $_FILES und nicht $_POST, bezieht sich auf superglobale Variablen.

                $type GetImageSize($_FILES['datei']['tmp_name']);
                $size $_FILES['datei']['size'];  

                // Das sollte wieder Post sein:   
                                        
                echo $_POST['dn'];
                Zuletzt geändert von Melewo; 30.03.2013, 13:12.

                Kommentar


                • #9
                  Hi Nirobe,

                  ich bezieh mich mal auf zwei Probleme, die du gepostet hast:

                  1. Jetzt mein Problem Hochgeladen bekomme ich die Bilder mit dem Skript,aber ich bekomme sie nicht in die CSV Datei in einen Img-Tag rein dass sie dann auch angezeigt werden.

                  2. es ging mir eher um die Daten.php ob da fehler sind da die daten garnet in die csv datei geschrieben werden.

                  Zu 1.

                  Du brauchst eigentlich nur den Bildnamen(oder eine Bezeichnung) und den Dateinamen, also z.B: Urlaub Kreta;kreta.jpg

                  Das img-Tag gibst du ja in der HTML/PHP-Seite aus.

                  Zu 2.

                  Ich würde Bildname und Dateiname in einem Array speichern und mit fputcsv in die Datei schreiben.

                  PHP-Code:
                  <?php
                  /*
                  * Der eigentliche Upload muss noch eingesetzt werden
                  */
                  $file "pub/bilder_csv.csv";
                  if(isset(
                  $_POST['cmd'])){
                   
                  $bild['bildname']=$_POST['bildname'];
                   
                  $bild['bild']=$_FILES['myfile']['name'];
                   
                  $f fopen($file,"a");
                   
                  fputcsv($f,$bild,";");
                   
                  fclose($f);
                   
                  header('location:a_upload_csv.php');
                  }
                  ?>
                  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                  <html>
                  <head>
                  <title>Datei-Upload</title>
                  </head>
                  <body>
                  <p>Bilder-Upload</p>
                  <form enctype="multipart/form-data" method="post" action="a_upload_csv.php">
                  Bildname: <input type="text" name="bildname">
                  Bild: <input type="file" name="myfile"><input type="submit" name="cmd" value="Hochladen">
                  </form>
                  <?php
                  if(!file_exists($file) || filesize($file)==0){
                   echo 
                  'Datei '.$file.' ist nicht vorhanden, oder enthält keine Einträge.';
                  }else{
                        
                  $f=fopen($file,"r");
                        while(
                  $file_entry=fgetcsv($f)){
                         
                  $file_entry_arr[]=$file_entry;
                        }
                        
                  fclose($f);
                        foreach(
                  $file_entry_arr as $file_entry){
                         foreach(
                  $file_entry as $bild_info){
                          
                  $bild=explode(";",$bild_info);
                          echo 
                  '<img src="bilder/'.$bild[1].'" alt="'.$bild[0].'" title="'.$bild[0].'" height="200">';
                         }
                        }
                       }
                  ?>
                  </body>
                  </html>
                  Einzubauen wäre hier noch der Upload selber, aber das klappt ja bei dir.

                  Gruß
                  Günni

                  Kommentar


                  • #10
                    Musste mich da auch erst einmal etwas hineinfinden, weil ich damit noch nichts zu tun hatte. Langsam blicke ich etwas mehr durch. So wie es jetzt ausschaut, wird ja das Bild unter "bilder/".$_FILES['datei']['name'] gespeichert, wozu ein Verzeichnis "bilder" anzulegen wäre.

                    PHP-Code:
                    move_uploaded_file($_FILES['datei']['tmp_name'], "bilder/".$_FILES['datei']['name']);
                    $name=$_FILES['bn'];
                    $daten=$bild.";".$name
                    Die in die CSV zu schreibenden Daten bestünden dann aus $bild = bilder/".$_FILES['datei']['name']; und $name, bei dem es sich um keine File handelt, sondern um Input von Text. Somit sollte das wohl so aussehen:

                    PHP-Code:
                    $name $_POST['bn']; 
                    $_POST wäre aber noch zu trimmen und durch einen RegEx-Filter zu jagen, damit niemand ein-schoenes-<code>-bild als Name übermitteln kann. Die drei Zeilen im Zusammenhang könnten dann so aussehen:

                    PHP-Code:
                    move_uploaded_file($_FILES['datei']['tmp_name'], "bilder/".$_FILES['datei']['name']);
                    $bild "bilder/".$_FILES['datei']['name'];
                    $name $_POST['bn'];
                    $bild preg_replace("/[^a-zA-Z0-9\/._-]/","",$bild);
                    $name preg_replace("/[^a-zA-Z0-9_-]/","",$name);
                    $daten $bild.";".$name
                    Bin mir nun noch nicht sicher, ob beim ersten Teil noch eine weitere Prüfung erfolgen sollte, dass da niemand ein-image.jpg.exe oder so unterschieben kann oder ob die Prüfung mit GetImageSize genügt. Exe als Endung vielleicht nicht, doch ein Gif mit einer im Gif enthaltener Exe oder ein-image.jpg.js oder etwas in dieser Richtung würde ja auch schon genügen.

                    Das erste if Statement halte ich auch für fehleranfällig:

                    PHP-Code:
                    if (isset($_FILES['hochladen']))

                    Im Test erhielt ich mit "hochladen" und $_FILES nichts, nur mit $_POST, doch dafür trügt eine Abfrage von "datei" mit $_FILES, denn auch wenn keine Datei ausgewählt und hochgeladen wurde, so wird dennoch ein File-Array vom Formular übermittelt, nur enthält es dann die Anzahl der Fehler.

                    PHP-Code:
                    // Es wurde nichts ausgewählt und hochgeladen, nur der Button "Hochladen" geklickt.  

                    if (isset($_FILES['datei'])) 
                    {  
                    /*
                      Array
                      (
                          [name] => 
                          [type] => 
                          [tmp_name] => 
                          [error] => 4
                          [size] => 0
                      )
                      */

                    Somit sollte wohl eher auf Error geprüft werden oder zusätzlich noch auf Error prüfen:

                    PHP-Code:
                    if ($_FILES['datei']['error'] == 0
                    Zuletzt geändert von Melewo; 31.03.2013, 06:35.

                    Kommentar


                    • #11
                      Hallo
                      Ich hab es geschafft und alles läuft reibungslos ich wollte mich noch für deine Hilfe bedanken und die Scripte für alle hier bereitstellen


                      Liebe Grüße Nirobe
                      Angehängte Dateien

                      Kommentar


                      • #12
                        Das mit dem Erlauben von GIFs bei 'image/gif' würde ich mir noch einmal sehr gründlich überlegen. Nicht dass ich mich damit richtig auskennen würde, doch wenn ich lese, dass es durchaus möglich sein soll in GIFs Trojaner und Viren zu verpacken, dann würde ich halt aufs GIFs verzichten, bis ich es genauer wüsste:

                        Was bedeutet GIF?

                        Kommentar

                        Lädt...
                        X