tutorials.de Buch-Aktion 05/2012
Seite 2 von 2 ErsteErste 12
ERLEDIGT
JA
ANTWORTEN
25
ZUGRIFFE
750
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #16
    Avatar von Napofis
    Napofis Napofis ist offline require 'brain.php';
    Registriert seit
    Jun 2007
    Ort
    Bayern
    Beiträge
    587
    OK ich hab dir mal eine Kleinigkeit vorbereitet.
    So kannst du alles auf 2 Abfragen reduzieren.

    __DIR__ ist eine Konstante für das aktuelle Verzeichnis, das kannst du dann selber austauschen. Wenn du das mit den mit den User Accounts machen willst.

    PHP-Code:
    class ScanDownloads {
        private 
    $_files;
        private 
    $_cwd;
        private 
    $_ds DIRECTORY_SEPARATOR;
        
        public function 
    __construct($dir){
            if (!
    is_dir($dir)) return;
            
    $this->_cwd $dir;
            
    $this->_scandir();
            
    $this->_saveResoult();
        }
        private function 
    _scandir(){
            
    $files scandir($this->_cwd);
            foreach (
    $files as $file)
                if(
    is_file($this->_cwd.$this->_ds.$file))
                    
    $this->_files[]=array('file'=>$file,'md5'=>md5_file($this->_cwd.$this->_ds.$file));
        }
        private function 
    _saveResoult(){
            
    $values=(array)null;
            foreach(
    $this->_files as $file)
                
    $values[]='("'.$file['file'].'","'.$file['md5'].'")';
            
    mysql_query('
                INSERT INTO `tbl_files` 
                    (`software_filename` , `software_md5sum`) 
                VALUES 
                    '
    .implode(',',$values).'
                ON DUPLICATE KEY UPDATE `software_status`="O"'
    );
                    
        }
        public function 
    getFiles($onlyNewFiles=false){
            
    $tmp mysql_query('
                SELECT `software_filename`,`software_status`,`software_md5sum`
                FROM `tbl_files` '
    .
                ((
    $onlyNewFiles)? ' WHERE `software_status`="N" ':'').
                
    'ORDER BY `software_filename` ASC');
            echo 
    mysql_error();
            
    $return=(array)null;
            while(
    $row=mysql_fetch_object($tmp)) $return[]=$row;
            return 
    $return;
        }
    }

    // Test 
    $scanDownloads = new ScanDownloads(__DIR__);
    echo 
    '<pre>';
    /**
    * lade die  Daten aus der Datenbank
    * @param boolean Nur neu hinzugefügte Dateien ausgeben.
    */
    print_r($scanDownloads->getFiles(true));
    echo 
    '</pre>'
    Geändert von Napofis (15.09.11 um 17:11 Uhr) Grund: Bugfix
    zkmlch bedankt sich. 

  2. #17
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    So habs bald geschafft

    Jetzt habe Ich noch zwei drei keinere Optionen an denen Ich das ganze Wochenende verplämpert habe...

    Geblieben ist das Problem
    Nun habe Ich noch eine Relevante Anforderungen an mein Script bei welchen mir aber der MD5_file string einen Strich durch die Rechnung macht.

    Das script ist nun so gelöst das Allle Files in einem Ordner liegen. Jedoch wäre das Ziel gewesen das Ich eine saubere Ordnerstruktur machen kann so dass Ich im Ordner /www/ das Script haben kann, im Ordner /www/downloads/ würde die Ordnerstruktur beginnen mit Unterordnern wie /www/downloads/browser oder /www/downloads/ftpclients in diesen unterordnern wären dan die einzelnen files nach kategorien aufgeteilt geordnet. Nun hatte Ich bei meinen Versüchen das Problem das der MD5 mir auch aus den Ordnern einen String generiert und die eigentlichen Dateien gar nicht berechnet sondern nur einen Hash aus dem Pfad macht.
    Hier nochmals der Quelltext des Betreffenden Problems...

    PHP-Code:
    <?php


    $dh
    =opendir('.');        
    while((
    $datei readdir($dh)) !== false){  
        if(
    $datei != '.' && $datei != '..' && !is_dir($datei)){    
            
    $chksum md5_file($datei);                
            
    $status = ('N');                        
            
            
    $sql "SELECT * 
                    FROM `tbl_files` 
                    WHERE `software_md5sum` = '
    {$chksum}'
                        AND `software_filename` = '
    {$datei}';";
            
    $result mysql_query($sql);
            if(
    mysql_num_rows($result) > 0){
                echo 
    "<pre>Eintrag $datei bereits vorhanden";
            }else{
                
    $sql "INSERT INTO `tbl_files` (`software_filename` , `software_status` , `software_md5sum`) 
                        VALUES ('
    {$datei}' , '{$status}' , '{$chksum}')";
                
    $result mysql_query($sql) or die(mysql_error());
            echo 
    "<pre>Neuer Eintrag<b> $datei </b>gefunden";
            }

        }
    }
    closedir($fp); 

    ?>
    Nun habe Ich weiteres "Problemchen"... Ich habe ein Update Formular welches mir gestattet Datensätze zu Editieren. Nun habe ich gegooglet und half mir NULL... Ich möchte im besagten Formular ein "Oder" Feld machen.

    Das heisst: Ich lese aus der Datenbank die bestehenden Kategorien aus und gebe Sie in Form eines Dropdowns aus, nun möchte ich aber neben dem Dropdown eine Oder funktion zur erfassung einer neuen Kategorie einfügen... Leider klappt dies nicht wie es sollte...

    Hier der Quelltext des Formulares:

    PHP-Code:
    <html>
        <body>

        <font face="Century Gothic, URW Gothic L, Verdana, Arial,Helvetica">

    <?php

        $mysqlhost
    ="localhost"// MySQL-Host angeben
        
    $mysqluser="****"// MySQL-User angeben
        
    $mysqlpwd="****"// Passwort angeben
        
    $mysqldb="db_filemanager"// Gewuenschte Datenbank  

        //Mit Datenbank Verbinden
            
    $connection=mysql_connect($mysqlhost$mysqluser$mysqlpwd) or die ("Verbindungsversuch fehlgeschlagen");

         
        
    //Datenbank auswählen
            
    mysql_select_db($mysqldb$connection) or die("Konnte die Datenbank nicht waehlen."); 

        
    $change_id $_REQUEST['id'];
        
    $query_files "SELECT * FROM `tbl_files` WHERE `id` = '$change_id';";
        
    $files_query mysql_query($query_files) or die(mysql_error());
        
    $files mysql_fetch_assoc($files_query);

        
    //Variabel für das Auslesen com Systemen"
        
    $sql_system "SELECT software_system FROM tbl_files GROUP by software_system;";
        
    //Öffnet eine persistente Verbindung mit der MySQL Datenbank im zusamenhang mit Browser
        
    $system_query mysql_query($sql_system) or die("Anfrage nicht erfolgreich");

        
    //Variabel für das Auslesen von Sprachen"
        
    $sql_language "SELECT software_language FROM tbl_files GROUP by software_language;";
        
    //Öffnet eine persistente Verbindung mit der MySQL Datenbank im zusamenhang mit Browser
        
    $language_query mysql_query($sql_language) or die("Anfrage nicht erfolgreich");

        
    //Variabel für das Auslesen von Kategorien"
        
    $sql_category "SELECT software_category FROM tbl_files GROUP by software_category;";
        
    //Öffnet eine persistente Verbindung mit der MySQL Datenbank im zusamenhang mit Browser
        
    $category_query mysql_query($sql_category) or die("Anfrage nicht erfolgreich")
    ?>


    <h1>Datensatz editieren</h1>
    <br>
    <table width="450" cellpadding="5">
      <tr>
        <td bgcolor=#D3D3D3><i>Database Information</td>
        <td bgcolor=#FFCC00>Der angezeigte Datensatz Nr.<b><?=$files['id']?></b> kann mit diesem Formular ge&auml;ndert werden.</td>
      </tr>
    </table>
    <br><br>


    <form action="update_info.php" method="post">
    <input name="tbl_files[id]" type="hidden" value="<?=$files['id']?>">
    <table width="40%"  cellpadding="5">

      <tr>
            <td bgcolor=#D3D3D3>Softwarename</td>
            <td><input name="tbl_files[software_name]" type="text" value="<?=$files[software_name]?>" size="50"></td>
            <tr><td bgcolor=#D3D3D3>Version</td>
            <td><input name="tbl_files[software_version]" type="text" value="<?=$files[software_version]?>" size="20"></td>
            <tr><td bgcolor=#D3D3D3>System</td>
            <td><input name="tbl_files[software_system]" type="text" value="<?=$files[software_system]?>" size="20"></td>
        <tr><td bgcolor=#D3D3D3>Dateigroesse</td>
            <td><input name="tbl_files[software_size]" type="text" value="<?=$files[software_size]?>" size="20" readonly></td>
            <tr><td bgcolor=#D3D3D3>Sprache</td>
            <td><input name="tbl_files[software_language]" type="text" value="<?=$files[software_language]?>" size="50"></td>
            <tr><td bgcolor=#D3D3D3>Autor</td>
            <td><input name="tbl_files[autor_name]" type="text" value="<?=$files[autor_name]?>" size="50"></td>
        <tr><td bgcolor=#D3D3D3>Autor Link</td>
            <td><input name="tbl_files[autor_link]" type="text" value="<?=$files[autor_link]?>" size="50"></td>
        <tr><td bgcolor=#D3D3D3>Autor Downloadlink</td>
            <td><input name="tbl_files[autor_download]" type="text" value="<?=$files[autor_download]?>" size="50"></td>
        <tr><td bgcolor=#D3D3D3>Dateiname</td>
            <td><input name="tbl_files[software_filename]" type="text" value="<?=$files[software_filename]?>" size="50"readonly></td>
        <tr><td bgcolor=#D3D3D3>Software Notiz</td>
            <td><textarea name="tbl_files[software_notice]" type="text" value="<?=$files[software_notice]?>" size="50"></textarea></td>
        <tr><td bgcolor=#D3D3D3>Software Kategorie</td>
       <td>
        <select name="tbl_files[software_category]" type="text">
      
    <?php
    do     {
                    
            if (
    $category!=$category['software_category']){
            if (
    $category==""){            
            
    $category=$category['software_category'];                                             
            }

        
            
    ?>


            <option><?=$category=$category['software_category'];?></option>

    <?php
    }
    ?>

    <?php
        $category
    =$category['software_category'];

        }while (
    $category mysql_fetch_array($category_query))
    ?>

        </select>

    oder <input name="tbl_files[software_category]" type="text" value="" size="14">

      </td>
        <tr><td bgcolor=#D3D3D3>Status:
    <pre>N = Neuer & Nicht vollstaendiger Datensatz (wird nicht veroeffentlicht)
    <pre>A = Aktueller vollstaendiger Datensatz (wird veroeffentlicht)
    <pre>D = Zum Loeschen deklariert (wird nicht mehr angezeigt)</td>
            <td><input name="tbl_files[software_status]" type="text" value="<?=$files[software_status]?>" size="2"></td>
        <tr><td bgcolor=#D3D3D3>Checksumme</td>
            <td><input name="tbl_files[software_md5sum]" type="text" value="<?=$files[software_md5sum]?>" size="35" readonly></td>
    <tr><tr></tr>
        <td><br><input type="submit" name="Submit" value="Speichern"></td>
    <tr></tr></form>
        <td><br><form name="form" method="" action="admin.php"><button type="submit" >Abbrechen</button></form></td>
    </tr>
    </table>
    Last but not Least:

    Auf meinem Admin Panel habe Ich das altbekannte CRUD; Create Read Update Delete

    Alles gut und Recht jedoch habe Ich hier ein Button Problem; Ich sende mit echo dem File update.php die Infos zu die es mit
    PHP-Code:
    $_REQUEST[id
    empfängt.

    Hier der ausschnitt aus admin.php:

    PHP-Code:
                    <?php//Delete Anweisung?>
                    <form name="form1" method="post" action="delete.php">
                        <td bgcolor=#FFCC00><input type="submit" name="id" value="<?php echo $files['id']; ?>"> Entfernen</td></form>
                    
                    <?php// Update Anweisung?>
                    <form name="form2" method="post" action="update.php">
                    <td bgcolor=#FFCC00><input type="submit" name="id" value="<?php echo $files['id']; ?>"> Edit</td></form>
    Und hier der Empfangsteil des update.php:

    PHP-Code:
    $change_id $_REQUEST['id'];
        
    $query_files "SELECT * FROM `tbl_files` WHERE `id` = '$change_id';";
        
    $files_query mysql_query($query_files) or die(mysql_error());
        
    $files mysql_fetch_assoc($files_query); 
    Icĥ möchte statt des Buttons ein Bildchen einfügen, dies geht aber irgendwie nicht... er versucht das bildchen mitzuschicken... Mit dem aktuellen Code wird ein Button ausgegeben mit der Current ID, des Datensatzes.... Banales Problemchen?

    Im Anhang befindet sich noch die Ausgabe des Formulares & Das Button Problem



    Kann mir jemand helfen?
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Bereits vorhandene MD5 Summen nicht mehr in die DB schreiben-bildschirmfoto6.png   Bereits vorhandene MD5 Summen nicht mehr in die DB schreiben-bildschirmfoto7.png  

    Geändert von zkmlch (20.09.11 um 16:40 Uhr) Grund: New Bug
     

  3. #18
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    Niemand eine Lösung ?
     

  4. #19
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Also, das Oder ist doch kein Problem. hier mal ein kleines Beispeil
    PHP-Code:
    //TODO: Kategorien aus DB auslesen
    $cats = array("kat1""kat2");

    echo 
    '<form method="post">';
    echo 
    '  <select name="selectedCat" type="text">';
    foreach(
    $cats as $cat){
        echo 
    "      <option>{$cat}</option>";
    }
    echo 
    '  </select> oder <input name="newCat" type="text" />';
    echo 
    '  <input type="submit" name="submit" />';
    echo 
    '</form>';

    //Auswertung
    if(isset($_POST['submit'])){
        
    //prüfen ob eine neue Kategorie erfasst wird
        
    if($_POST['newCat']!=''){
            
    //TODO: Insert in die DB mit der neuen Kategorie
            
    $selectedCat $_POST['newCat'];
        
    //Ansonsten die ausgewählte übernehmen
        
    }else{
            
    $selectedCat $_POST['selectedCat'];
        }
        echo 
    '<hr />';
        echo 
    $selectedCat;

     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  5. #20
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    Hallo Yaslaw

    Ich versteh grad nur Bahnhof

    Hier erstellst/definierst du mir doch zwei neue Spalten in der DB?

    PHP-Code:
          $selectedCat $_POST['newCat'];
        
    //Ansonsten die ausgewählte übernehmen
        
    }else{
            
    $selectedCat $_POST['selectedCat']; 
    Es soll aber die gleiche Variabel zum $_Posten bleiben, den sonst komm Ich langsam gar nicht mehr draus. Wenn das eine Feld leer ist soll das Feld mit Füllung gesendet werden. Wenn beide ausgefüllt sind dann Fehler1 im Formular ausgeben, Falls keines Ausgefüllt ist Fehler2 ausgeben.

    Ich glaube Ich habe mich da ein bisschen mit diesem Projekt "überlupft". Und das so kurz vor dem Ende :'-(
     

  6. #21
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Nö. Warum 2 Spalten?

    Bei einem neuen Eintrag gibts ein neuer Eintrag in dei Kategorien-Tabelle und den entsprechenden Eintrag in den Datensatz. Ansonstzen nur ein entsprechenden Eintrag auf die bestehende Kategorie.

    Mein Beispiel ist gar nix DB, sondern nur PHP...
    zkmlch bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  7. #22
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    Langsam aber sicher habe Ich so ein rieseiges Durcheinander....

    Edit: Hat sich erledigt! Danke
    Geändert von zkmlch (24.10.11 um 10:48 Uhr)
     

  8. #23
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    Guten morgen konnte Tonnenweise Probleme beheben

    Nun habe Ich noch ein optisches Problem:

    Ich habe euch einen PrtSc in den Anhang gelegt. Da seht Ihr das der Herstellerlink und der Herstellerdownloadlink als Button angezeigt wird... Sieht kacke aus!

    Problem dabei: Der Button hat die Aufgabe eine Id der Datenbankabfrage mitzusenden... Kann Ich irgendwie auf einem anderen Weg die ID mitschicken zB im Link? Oder kann Ich einfach die beige Buttonfläche transparent machen, so das nur mein icon agezeigt wird...

    Hier der Code der unter dem Button liegt:

    PHP-Code:
    ....                
                    <?php// Linkcheck Anweisung Externer Downloadlink?>
                    <form name="form" method="post" action="linkcheck_download.php">
                    <td bgcolor=#bfdaf2><input type="hidden" name="id" value="<?php echo $files['id']; ?>"><button type="submit" title="Hersteller Downloadlink"><img src="bilder/downloadwww.png" width="20" height="20"></button></form></td>
    ....
    Hier kommt das Linkcheck Script welches die ID entgegen nimmt:

    PHP-Code:
    ....
    <?php// Linkcheck Anweisung Herstellerlink?>
                    <form name="form" method="post" action="linkcheck_general.php">
                    <td bgcolor=#bfdaf2><input type="hidden" name="id" value="<?php echo $files['id']; ?>"><button type="submit" title="Herstellerlink"><img src="bilder/globe.png" width="20" height="20"></button></form></td>
    ....
    Kann mir da wer mit Rat dienen?

    Gruss Patrick
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Bereits vorhandene MD5 Summen nicht mehr in die DB schreiben-list.png  
     

  9. #24
    SE Tutorials.de Gastzugang
    Natürlich geht das ... nur dafür würde ich dir AJAX empfehlen da du damit auf das onClick-Event eines Links reagieren kannst und dann über AJAX einen POST absetzen kannst ... was so mit einem Link nicht geht da Links grundsätzlich nur GET absetzen können ...
    Also entweder AJAX oder das Script so ändern das es auch mit GET umgehen kann.
     

  10. #25
    Avatar von zkmlch
    zkmlch zkmlch ist offline Master of Disaster
    Registriert seit
    Sep 2011
    Ort
    Uster / ZH
    Beiträge
    51
    Was ist für mich als Leien einfacher? Ich hab null erfahrung mit Ajax...

    Gruss Patrick

    Edit:Problem gelöst!

    PHP-Code:
    <a href="linkcheck_general.php?id=<?php echo $files['id']?>"><img src="bilder/globe.png" width="20" height="20" alt="Herstellerlink">
    und statt mit $_REQUEST mit $_GET abfangen

    Gruss Patrick
    Geändert von zkmlch (24.10.11 um 13:17 Uhr)
     

  11. #26
    SE Tutorials.de Gastzugang
    Soweit ich weis is $_REQUEST als Wildcard für beides , also sowohl POST als auch GET , zuständig ... und sollte daher eigentlich auch so funktionieren.

    PS : eigentlich gehört das ins PHP-Forum ...
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 21.11.10, 23:56
  2. TreeView Unterknoten an bereits vorhandene Knoten hinzufügen
    Von kiff124 im Forum .NET Windows Forms
    Antworten: 1
    Letzter Beitrag: 21.06.09, 14:46
  3. Antworten: 2
    Letzter Beitrag: 24.09.07, 18:24
  4. Prüfung auf bereits vorhandene Ordner
    Von Andrej T im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 20.11.06, 17:46
  5. CMS für bereits vorhandene htmls
    Von nahuel im Forum Content Management Systeme (CMS)
    Antworten: 8
    Letzter Beitrag: 29.11.04, 02:11

Stichworte