Visualizzazione risultati 1 fino 5 di 5

Discussione: Aggiornamento File nel Database

  1. #1
    Guest

    Predefinito

    Ciao a tutti stavo facendo uno script che mi prende i file da una determinata dir, e li metteva su DB (mysql) dopo di che ogni volta che un utente visitava una pagina in automatico lo script controllava che nel datbase ci fossero tutti i file che stanno dentro la dir (in caso contrario li aggiunge), poi passa a vedere se nel database ci stanno dei file che non stanno + nella dir (in questo caso li elimina dal DB).
    Fatto questo vengono impaginati i dati, e vengono messi 5 File per pagina.

    Solamente che se io visito la prima pagina questa mi mostra solo il 1° file, se ci rivado me ne mostra 5 (cioè tutti), se ci rivado per una 3à volta mi rimostra solo il 1° file... ecc.
    Guardando il DB ho notato che tutti i file ad ogni visualizzazione della pagina viene tolti da DB e reinserito (tutti escluso il 1°).


    <?php

    include("db.utenti.inc.php");
    mysql_connect("$db_host","$db_user","$db_password" ) or die(mysql_error());
    mysql_select_db("$db_name") or die(mysql_error());
    if ($dir = @opendir("c:\BNC")) {


    //prendiamo tutti i file dentro il database
    $totfile = mysql_query("SELECT nome FROM filedown") or die(mysql_error());
    if (@mysql_num_rows($totfile) == 0) {
    mysql_query("INSERT INTO filedown SET nome='provvsss.txs', num='1'") or die (mysql_error());
    $totfile = mysql_query("SELECT nome FROM filedown") or die(mysql_error());
    }
    while ($name = mysql_fetch_array($totfile, MYSQL_ASSOC)) {


    //prendiamo tutti i file dentro la dir
    $ok = 0;
    while (false !== ($file = readdir($dir))) {
    if (filesize("c:\BNC\\{$file}") > 0) {
    if (mysql_num_rows(mysql_query("SELECT nome FROM filedown WHERE nome = '$file'")) == 0) { mysql_query("INSERT INTO filedown SET nome='$file', num=0") or die (mysql_error()); }
    else { $ok++; }
    }
    }
    if ($ok == 0) { mysql_query("DELETE FROM filedown WHERE nome = '$name[nome]'") or die (mysql_error()); }
    }


    closedir($dir);
    }
    ?>

    Questo è il pezzo dell'aggiornamento del DB spero che mi sappiate aiutare

  2. #2
    Guest

    Predefinito

    Lo script che hai riportato non è adatto alla ricerca di bachi al suo interno. Quando si inizia a programmare una pagina bisogna mettere una serie di istruzioni che ci permettano di sapere se tutto sta andando come previsto o se ci sono delle cose che non vanno.
    Il php mette a disposizione una serie di funzioni dedicate per la ricerca dei problemi che possono insorgenre. Ma a volte anche una semplice echo può salvarci da ore e ore di folle ricerca dell'errore.
    Andiamo al sodo:
    1) All'inizio dello script va messa la seguente istruzione:
    [code:1:005ae07a26]error_reporting(E_ALL);[/code:1:005ae07a26]
    così il php ha il permesso di segnalarci anche la più banale imprecisione (che a volte risulta invece fatale)

    2)ogni stringa costruita dinamicamente, ovvero ottenuta concatenando tra loro stringhe e variabili va stampata a schermo con una echo. Questo è ancora più vero se si tratta della stringa di una query.

    3) eliminare tuttle le @ davanti alle istruzioni altrimenti verrà inibita la capacità del php di mostrarci gli errori che la funzione ha eventualmente generato.
    Nel codice riportato da FcW la riga "if ($dir = @opendir("c:\BNC"))" se non funziona non mostrerà alcun errore e l'esecuzione salterà le istruzioni successive senza avvisare.

    4)poiché la maggior parte delle operazioni con un database anche in caso di insuccesso non restituiscono un errore a video, è necessario controllare "personalmete" l'esito delle stesse usando le apposite funzioni relative al tipo di DBMS. Ad es.:
    per la connessione a mysql
    [code:1:005ae07a26]$this->dbcnx = mysql_connect($dbhost,$dbuser,$dbpasswd);
    if(!$dbcnx)
    {
    trigger_error("Errore nella connessione al database.\nMySQL error:". mysql_error(),E_USER_ERROR);
    return false;
    }[/code:1:005ae07a26]
    per la selezione del database:
    [code:1:005ae07a26]$esito = mysql_select_db($dbname,$dbcnx);
    if(!$esito)
    {
    trigger_error("Errore nella selezione del database\nMySQL error:" .mysql_error(),E_USER_ERROR);
    return false;
    }[/code:1:005ae07a26]
    per l'esecuzione di una query:
    [code:1:005ae07a26]$Result = mysql_query($Query,$dbcnx);
    if(!$Result)
    {
    trigger_error("Errore nella formulazione della query: $Query\nMySQL error:" . mysql_error(),E_USER_ERROR);
    return false;
    }[/code:1:005ae07a26]
    prima di fare la fetch dei risultati controllare che la query abbia restituito un identificativo di risorsa:
    [code:1:005ae07a26]if(is_resource($Result))
    {
    while($row = mysql_fetch_array($Result,MYSQL_ASSOC)&#41 ;
    {
    $result_array[] = $row;
    }
    return true;
    }
    else die ("Problemi della select");[/code:1:005ae07a26]

    Spero che queste poche indicazioni possano essere utili
    Ciao.

  3. #3
    Guest

    Predefinito

    Un po si ma cmq non sono ancora riusciuto a capire dove sta l'errore adesso riprovo..
    Vado un po a rallentatore che stanotte ho dormito 4 ore.

  4. #4
    Guest

    Predefinito

    Io qua nn vedo cambiato niente...
    L'errore non sta in qualche sbaglio che nn viene riportato da PHP ma ci sta che ci sia un errore nella struttura del codice che mi sfugge e che mi fa fare il casino che prima ho detto.

  5. #5
    Guest

    Predefinito

    qualcuno sa dirmi dove sbaglio?

    Grazie

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •