Visualizzazione risultati 1 fino 5 di 5
Like Tree1Likes
  • 1 Post By mzanella

Discussione: Codice PHP che genera codice HTML sbagliato

  1. #1
    fgbect non è connesso Neofita
    Data registrazione
    15-04-2008
    Residenza
    Milano
    Messaggi
    20

    Post Codice PHP che genera codice HTML sbagliato

    Salve,

    sto cercando di realizzare una pagina che includa una tabella visibile a due categorie di utenti in maniera differenziata, si tratta di uno scadenziario per me e per la mia famiglia, desidero poter modificare i dati solo io e quindi gli altri familiari possono solo visualizzare la tabella senza il tasto "elimina"
    il codice php è il seguente:
    Codice PHP:
    <?php
    $handle 
    opendir('eventi');

    $filenames = array();
    while (
    $filename readdir($handle)) {
    $filenames[] = $filename;
    }
    sort($filenames);
    foreach(
    $filenames as $file)

       {
          if (
    $file != "." && $file != "..")
          {


               include (
    'eventi/'.$file);
              
               if (
    $oggi <= strtotime($evento[0])) {echo "<tr>";
              echo 
    "<td><span class='buono'> $evento[1] </span></td>";
              echo 
    "<td align='center'><span class='buono'> $evento[2] </span></td>";
              echo 
    "<td><span class='buono'> $evento[3] </span></td>";
              }
              if (
    $livello=="LIVELLO1") {echo "<td align='center'><form method='post' action='elimina.php'><input type='hidden' value='eventi/".$file."' name='file'><input type='submit' value='Elimina'></form></td>";}
              }
     }          
            echo 
    "</tr>";
      
    closedir($handle);

    ?>
    Ora il codice HTML che viene prodotto è il seguente:

    Codice HTML:
    <tr><td>data1</td><td align="center">ora1</td><td>evento1</td></tr><td align='center'><form method='post' action='elimina.php'><input type='hidden' value='eventi/[I]file1[/I].php' name='file'><input type='submit' value='Elimina'></form></td><tr><td>data2</td><td align="center">ora2</td><td>evento2</td></tr><td align='center'><form method='post' action='elimina.php'><input type='hidden' value='eventi/file2.php' name='file'><input type='submit' value='Elimina'></form></td><tr><td>
    ...
    e così via
    In pratica mi chiude la riga della tabella prima dell'inserimento del pulsante "Elimina"... che, a questo punto, va a capo (ed ovviamente non voglio che vada a capo).

    Non riesco a capire dove sto sbagliando

    Ovviamente i "dati sensibili" sono stati camuffati.

    Grazie a chi può darmi una mano.
    Ultima modifica di fgbect : 18-05-2017 alle ore 11.32.31

  2. #2
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    829

    Predefinito

    Dovresti curare di più l'indentazione del codice. Ci sono alcuni errori nascosti che diventerebbero evidenti con una corretta indentazione.

    Codice originale (con indentazione corretta)
    Codice PHP:
    foreach($filenames as $file)
    {
        if (
    $file != "." && $file != "..")
        {
            include (
    'eventi/'.$file);

            if (
    $oggi <= strtotime($evento[0])) {
                echo 
    "<tr>";
                echo 
    "<td><span class='buono'> $evento[1] </span></td>";
                echo 
    "<td align='center'><span class='buono'> $evento[2] </span></td>";
                echo 
    "<td><span class='buono'> $evento[3] </span></td>";
            }
            if (
    $livello=="LIVELLO1") {
                echo 
    "<td align='center'><form method='post' action='elimina.php'><input type='hidden' value='eventi/".$file."' name='file'><input type='submit' value='Elimina'></form></td>";
            }
        }
    }          
    echo 
    "</tr>"
    Al momento stai creando una nuova riga ad ogni iterazione, a condizione che $oggi <= strtotime($evento[0]), però le righe non vengono mai chiuse, c'è un solo </tr> al di fuori del foreach.
    Inoltre, se ho capito correttamente, il tasto elimina dovrebbe essere mostrato anch'esso a condizione che $oggi <= strtotime($evento[0]) (oltre a $livello=="LIVELLO1").
    Per evitare innestamenti eccessivi puoi anche usare dei continue:

    Codice PHP:
    foreach($filenames as $file) {
        if (
    $file == "." && $file == "..") {
            continue;
        }

        include (
    'eventi/' $file);
        if (
    $oggi strtotime($evento[0])) {
            continue;
        }

        echo 
    "<tr>";
        echo 
    "<td><span class='buono'> $evento[1] </span></td>";
        echo 
    "<td align='center'><span class='buono'> $evento[2] </span></td>";
        echo 
    "<td><span class='buono'> $evento[3] </span></td>";
        
        if (
    $livello=="LIVELLO1") {
            echo 
    "<td align='center'><form method='post' action='elimina.php'><input type='hidden' value='eventi/" $file "' name='file'><input type='submit' value='Elimina'></form></td>";
        }
        echo 
    "</tr>";

    Ultima modifica di mzanella : 18-05-2017 alle ore 14.40.27 Motivo: Corretti gli if
    fgbect likes this.

  3. #3
    fgbect non è connesso Neofita
    Data registrazione
    15-04-2008
    Residenza
    Milano
    Messaggi
    20

    Predefinito

    Grazie, ho provveduto a fare le opportune modifiche, premetto che non conoscevo il continue, adesso però l'output è strano:
    Codice HTML:
    <tr><td><span class='buono'>  </span></td><td align='center'><span class='buono'>  </span></td><td><span class='buono'>  </span></td><td align='center'><form method='post' action='elimina.php'><input type='hidden' value='eventi/.' name='file'><input type='submit' value='Elimina'></form></td><tr><td><span class='buono'>  </span></td><td align='center'><span class='buono'>  </span></td><td><span class='buono'>  </span></td><td align='center'><form method='post' action='elimina.php'><input type='hidden' value='eventi/..' name='file'><input type='submit' value='Elimina'></form></td></tr>
    </tbody>
    In pratica il pulsante va al suo posto, ma vengono inglobati i file /. e /.. e non i file presenti nella cartella... ora stacco un po' più tardi torno alla carica, intanto grazie ancora per il suggerimento.

    È vero, sono un po' pasticcione con l'indentizione.

  4. #4
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    829

    Predefinito

    In pratica il pulsante va al suo posto, ma vengono inglobati i file /. e /.. e non i file presenti nella cartella...
    Colpa mia nel copiare ed incollare il codice ho "invertito" accidentalmente la semantica dei controlli if. Ho aggiornato il messaggio precedente con la correzione.

  5. #5
    fgbect non è connesso Neofita
    Data registrazione
    15-04-2008
    Residenza
    Milano
    Messaggi
    20

    Predefinito

    Grazie ancora, ma la variabile $livello nel blocco del tbody scompare, uso l'elemento per settare una colonna in più nella thead ma quando passiamo al tbody qualcosa non va, formalmente non vi sono errori, ma il risultato non va bene, quando si vedeva l'elimina appariva nelle righe /. e /.. e non nelle righe richiamate dalla cartella eventi....


    Mi sa che ricomincio da zero, mi rimane strano perchè ho altre pagine con logiche simili che funzionano perfettamente.

Regole di scrittura

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