Visualizzazione risultati 1 fino 22 di 22

Discussione: un while che usa variabili di un'altro while

  1. #1
    Guest

    Predefinito un while che usa variabili di un'altro while

    ho fatto uno script che mostra tutte le cartelle presenti in una cartella, chiamata database. Vorrei che in questo while facesse comparire sia il nome della cartella che il numero di file che ha al suo interno. Per questo, dentro al ciclo opendir della directory database, ho fatto un'altro ciclo che apre la directory in questione. Tuttavia il counter non funziona. Ecco lo script:

    Codice PHP:
    <?php
    } else {
    include(
    "config.php");

    // Gestione database \\
    $valore = "";
    $dir = "database/";
    if (
    $dh = opendir($dir)) {
    while ((
    $file = readdir($dh)) !== false) {
    if (
    $file == "." OR $file == "..") {
    } else {
    // File all'interno \\
    $sezione = "database/$file/";
    $variabile[$sezione] == "";
    if (
    $hd = opendir($sezione)) {
    while ((
    $news = readdir($hd)) !== false) {
    if (
    $news == "." OR $news == "..") {
    } else {
    $variabile[$sezione]++;
    }
    }
    }
    $valore .= "<tr><td width=70%>$file</td><td width=30%>$variabile[$file]</td></tr>";
    $counter++;
    }
    }
    closedir($dh);
    }
    ?>
    so che il codice è molto contorto, per questo vi chiedo supporto ;)

    ciao!!
    giaco

  2. #2
    Guest

    Predefinito

    eh... be', intanto l'operatore disuguaglianza è != e non !== ;)

  3. #3
    Guest

    Predefinito

    non è quello l'errore, cmq guarda:
    http://it2.php.net/manual/en/function.opendir.php

    ;)

    ciao!!

  4. #4
    L'avatar di mythologia
    mythologia non è connesso Moderatore
    Data registrazione
    05-01-2004
    Messaggi
    2,614

    Predefinito

    Codice PHP:
    <?php
    } else {
    include(
    "config.php");

    // Gestione database \\
    $valore = "";
    $dir = "database/";
    if (
    $dh = opendir($dir)) {
    while ((
    $file = readdir($dh)) !== false) {
    if (
    $file == "." OR $file == "..") {
    } else {
    // File all'interno \\
    $sezione = "database/" . $file . "/";
    $variabile[$sezione] = 0;
    if (
    $hd = opendir($sezione)) {
    while ((
    $news = readdir($hd)) !== false) {
    if (
    $news == "." OR $news == "..") {
    } else {
    $variabile[$sezione]++;
    }
    }
    }
    $valore .= "<tr><td width=70%>$file</td><td width=30%>$variabile[$sezione]</td></tr>";
    $counter++;
    }
    }
    closedir($dh);
    }
    ?>
    Dovrebbe andare
    Ultima modifica di mythologia : 30-08-2005 alle ore 20.53.29

  5. #5
    Guest

    Predefinito

    thank's mytho! :D

    ciao!!

  6. #6
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Citazione Originalmente inviato da nowherenet
    eh... be', intanto l'operatore disuguaglianza è != e non !== ;)
    Ahi ahi ahi...
    Bacchettata sulle manine per nowherenet OLD

    Dunque, l'operatore !== è operatore di diseguaglianza eccome, anzi diciamo che lo è ancora PIU' di !=

    Esempio pratico:
    Codice PHP:
    <?=(true != 1)? "vero" : "falso" ?>
    <br>
    <?=(true !== 1)? "vero" : "falso"?>
    risultato sulla pagina:
    falso
    vero


    Ovvero nelle uguaglianze semplici non c'è differenza tra 1 e true (1 == true dà true) mentre i numeri negativi e zero corrispondono a false (0 == false dà true).
    Se INVECE vogliamo esser sicuri di distinguere interi (0, 1, etc..) da booleani (true/false) conviene utilizzare operatori di uguaglianza === e diseguaglianza !== (invece di == e !=)
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  7. #7
    Guest

    Predefinito

    :O heracleum..

    comunque ho altri due problemi..
    sempre con una funziona molto simile a quello sopra, facico comparire tutti i file presenti in una cartella, essi si chiamano 1.php, 2.php, 3.php eccetera.. il while li fa comparire sempre in ordine crescente, cioè 1,2,3, mentre io vorrei farli comparire in oridne decrescente (3,2,1).. è possibile?

    altra cosa.. per la gestione delle pagine.. sempre nello stesso while di sopra, ho la variabile $per_pagina = "5", che sono i mess che devono comparire per pagina, e la variabile $totale = "7", per esempio, che indica i messagig totali.. come posso gestire il tutto con i link.. stavo pensando a un ciclo for, però ho le idee un po confuse..

    Grazie a tutti!
    giacomo

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da heracleum
    Ahi ahi ahi...
    Bacchettata sulle manine per nowherenet OLD

    Dunque, l'operatore !== è operatore di diseguaglianza eccome, anzi diciamo che lo è ancora PIU' di !=
    sìsìsìsìsìs... è vero, me ne ero completamente dimenticato... abituato al c...

    shcusssate

  9. #9
    Guest

    Predefinito

    comunque, c o no, sai risolvere il mio problema?

  10. #10
    Guest

    Predefinito

    Citazione Originalmente inviato da wrestlingforum
    :O heracleum..
    sempre con una funziona molto simile a quello sopra, facico comparire tutti i file presenti in una cartella, essi si chiamano 1.php, 2.php, 3.php eccetera.. il while li fa comparire sempre in ordine crescente
    *koff* http://it2.php.net/manual/it/function.rsort.php

    altra cosa.. per la gestione delle pagine.. sempre nello stesso while di sopra, ho la variabile $per_pagina = "5", che sono i mess che devono comparire per pagina, e la variabile $totale = "7", per esempio, che indica i messagig totali.. come posso gestire il tutto con i link.. stavo pensando a un ciclo for, però ho le idee un po confuse..
    ehm... non so se ho capito cosa intendi... vuoi qualcosa tipo questo?
    "miosito.altervista.org/miapagina.php?num=5"
    Nel tuo codice:
    Codice PHP:
    $per_pagina = $_GET['num'];

  11. #11
    Guest

    Predefinito

    uhm, da quanto ho capito devo usare la funzione sort.. però non so come fare...

    $directory = str_replace("_", " ", $sezione);
    $dir = "database/$directory/";
    if ($dh = opendir($dir)) {
    while (($file = readdir($dh)) !== false) {
    if ($file == "." OR $file == "..") {
    } else {
    echo $file;
    }
    }
    }

    mi da come ouput:
    1.php
    2.php
    3.php
    dove inserisco il sort?

    per le pagine, non è quello... è una cosa un po difficile da spiegare..

  12. #12
    Guest

    Predefinito

    prova così (non l'ho testato)
    Codice PHP:
    $directory = str_replace("_", " ", $sezione);
    $dir = "database/$directory/";
    $count=0;
    if (
    $dh = opendir($dir)) {
    while ((
    $file = readdir($dh)) !== false) {
    if (
    $file != "." && $file != "..") {
    $arr[$count]=$file;
    $count++;
    }
    }
    rsort($arr);
    echo
    implode ("\n", $arr);
    //se lo usi in una pagina web: "<br />\n" o "<br />" e basta
    }
    EDIT: CODICE CORRETTO
    Ultima modifica di nowherenet : 31-08-2005 alle ore 15.59.35

  13. #13
    Guest

    Predefinito

    scusa fai così... lista i file nella cartella invece di stamparla subito, mettila in una array, poi l'array la ordini come vuoi e li tiri fuori con foreach...

  14. #14
    Guest

    Predefinito

    ... che è poi quello che dicevo io, solo che ho usato implode(separatore, nomearray), che a partire da un array ti da una stringa con separatore, tipo:
    Codice:
    a|b|c|d|e ecc o a,b,c,d,e ecc
    usando come separatore il codice di escape "newline" ("\n") che indica di andare a capo

  15. #15
    Guest

    Predefinito

    ho provato, funziona, però non devo mostrare solo quello, devo anche fare un fopen del file, e con quelle funzioni non sono riuscito.. questo è il codice completo:
    Codice PHP:
    $directory = str_replace("_", " ", $sezione);
    $dir = "database/$directory/";
    if (
    $dh = opendir($dir)) {
    while ((
    $file = readdir($dh)) !== false) {
    if (
    $file == "." OR $file == "..") {
    } else {
    $totale++;
    // Dati news \\
    $sez = "database/$directory";
    $fopen = fopen("$sez/$file", 'r');
    $dimensione = filesize("$sez/$file");
    $fread = fread($fopen, $dimensione);
    $explode = explode(", ", $fread);
    $autore[$sezione] = $explode[0];
    $letture[$sezione] = $explode[1];
    $ora[$sezione] = $explode[4];
    $data[$sezione] = $explode[3];
    $titolo[$sezione] = $explode[5];
    $azz = str_replace(".php", "", $file);
    $ab = str_replace(" ", "_", $azz);
    $valore .= "<tr><td width=70%><b>&nbsp;<a href=\"leggi.php?sezione=$sezione&news=$ab\">$titolo[$sezione]</a></b><br>&nbsp;Inviata da $autore[$sezione] alle $ora[$sezione] del $data[$sezione]</td><td width=30% align=center><b>$letture[$sezione]</b></td></tr>";
    }
    }
    closedir($dh);
    }
    sapreste fare che si visualizza come adesso solamente nell'ordine invertito?
    grazie..

  16. #16
    Guest

    Predefinito

    Vediamo...
    Codice PHP:
    $totale=0;
    $directory = str_replace("_", " ", $sezione);
    $dir = "database/$directory/";
    if (
    $dh = opendir($dir)) {
    while ((
    $file = readdir($dh)) !== false) {
    if (
    $file == "." OR $file == "..") {
    } else {
    $arr[$totale]=$file;
    $totale++;
    }
    }
    rsort($arr);

    // Dati news \\
    foreach ($arr as $file) {
    $sez = "database/$directory";
    $fopen = fopen("$sez/$file", 'r');
    $dimensione = filesize("$sez/$file");
    $fread = fread($fopen, $dimensione);
    $explode = explode(", ", $fread);
    $autore[$sezione] = $explode[0];
    $letture[$sezione] = $explode[1];
    $ora[$sezione] = $explode[4];
    $data[$sezione] = $explode[3];
    $titolo[$sezione] = $explode[5];
    $azz = str_replace(".php", "", $file);
    $ab = str_replace(" ", "_", $azz);
    $valore .= "<tr><td width=70%><b>&nbsp;<a href=\"leggi.php?sezione=$sezione&news=$ab\">$titolo[$sezione]</a></b><br>&nbsp;Inviata da $autore[$sezione] alle $ora[$sezione] del $data[$sezione]</td><td width=30% align=center><b>$letture[$sezione]</b></td></tr>";

    //e poi immagino anche:
    echo $valore;

    }
    closedir($dh);
    }
    Al solito, non testato... non ditemi che sono un idiota, un pisquano o che puzzo se poi non va
    Ultima modifica di nowherenet : 31-08-2005 alle ore 17.51.07

  17. #17
    Guest

    Predefinito

    wow, grande! tutto merito del foreach! :)

    comunque, ora resta sempre il problema delle pagine che non sono riuscito a risolvere..
    sempre con questo codice, ora spiego bene..

    ho le variabili:
    $per_pagina = "5"; // Messaggi da visualizzare in ogni pagina
    $totale = "7"; // Messaggi totali

    Vorrei che aprendo tale pagine comparissero solo tanti mess quanti sono nella variabile $per_pagina, quindi in questo caso che ne comparissero 5. In piu, vorrei che se si passasse la variabile da get comparissero i mess di tale pagina.. esempio..

    digito: pagina.php
    si mostano gli ultimi 5 mess.
    digito: pagina.php?pag=2
    si mostrano i mess dal 6 al 10 compresi.
    digito: pagina.php?pag=3
    si mostrano i mess da 11 a 15

    capito? questo però se la variabile $per_pagina è uguale a 5, se fosse uguale a 7 sarebbe:

    digito: pagina.php
    si mostano gli ultimi 7 mess.
    digito: pagina.php?pag=2
    si mostrano i mess dal 8 al 14 compresi.
    digito: pagina.php?pag=3
    si mostrano i mess dal 15 al 21..

    capito cosa intendo??
    grazie a tutti..

  18. #18
    Guest

    Predefinito

    Non so quali basi hai della paginazione, ma qui http://debug.altervista.org/articoli.php?id=1 puoi leggere come gestire un'intera paginazione partendo solo dal dato "per pagina".


    Ciaooooo!!!!!!

  19. #19
    Guest

    Predefinito

    dunque, nel txtguestbook, (te lo ricordi no?) l'impaginazione l'avevo fatta, e funzionante alla perfezione.. solamente che li era tutto dentro a un for.. qui invece, essendo in un while, non so dove mettere le mani..
    proverà a vedere se il tuo link mi aiuta..

    grazie!

  20. #20
    Guest

    Predefinito

    il for e il while sono sintatticamente diversi, ma le loro funzioni sono simili.

    Puoi "emulare" un for con un while semplicemente gestendo all'interno di quest'ultimo una variabile, la stessa variabile che usi come argomento nel for.

    Per fare un esempio (forse è meglio):

    for($k=0;$k<5;$k++){
    echo $k;
    }

    $k=0;
    while($k<5){
    echo $k;
    $k++;
    }

    Basta che ci ragioni "un po'" (questa frase è molto duttile) e vedi che capisci dove mettere le mani.


    Ciaoooooo!!!!!!

  21. #21
    Guest

    Predefinito

    giusto, la notte porta consiglio, chissa che domani non mi viene un'idea buona..
    beh, buonanotte e grazie!!

  22. #22
    Guest

    Predefinito

    scusate per il doppio post ma ho scritto questo per gestire i link delle pagine:

    Codice PHP:
    if ($pag == 1 OR !$pag) {
    $pagina = 0;
    } else {
    $pagina = $pag-1;
    }
    $ultimo_mess = $pagina*$per_pagina;
    if (
    $pagina == 0) {
    $ultima_pag = $per_pagina*1;
    } else {
    $ultima_pag = $per_pagina*$pag;
    }

    // Gestione link pagina \\
    if (!$pag) {
    $precedente = "<font color=#CCCCCC>&lt;&lt; precedente</font>";
    if (
    $ultima_pag >= $totale) {
    $successiva = "<font color=#CCCCCC>successiva &gt;&gt;</font>";
    } else {
    $successiva = "<a href=$PHP_SELF?pag=2>successiva &gt;&gt;</a>";
    }
    } else {
    if (
    $pag == 2) {
    $precedente = "<a href=$PHP_SELF>&lt;&lt; precedente</a>";
    if (
    $ultima_pag >= $totale) {
    $successiva = "<font color=#CCCCCC>successiva &gt;&gt;</font>";
    } else {
    $successiva = "<a href=$PHP_SELF?pag=3>successiva &gt;&gt;</a>";
    }
    } else {
    // Se non è la pag 2 \\
    $prec = $pag-1;
    $precedente = "<a href=$PHP_SELF?pag=$prec>&lt;&lt; precedente</a>";
    if (
    $ultima_pag >= $totale) {
    $successiva = "<font color=#CCCCCC>successiva &gt;&gt;</font>";
    } else {
    $succ = $pag+1;
    $successiva = "<a href=$PHP_SELF?pag=$succ>successiva &gt;&gt;</a>";
    }
    }
    }
    adesso mi servirebbe sapere come mostrare i mess in base alla pagina.. ma non ne ho idea.. :( sob..

Regole di scrittura

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