• User

    Script:leggi file,genera form,genera ordine da form

    Ciao a tutti,
    sto facendo uno script il quale legge un file con un elenco di prodotti, genera un form da questo elenco dove l'utente può scrivere le quantità dei prodotti e successivamente invia i dati ad una pagina php che si sceglie solo i prodotti maggiori di 0 e genera una pagina di riepilogo dell'ordine effettuato.

    La prima parte dello script l'ho risolta leggendo il file e tramite un ciclo e diversi controlli viene generato il form.
    Successivamente ho fatto il file php che mi legge il file con l'elenco dei prodotti e di volta in volta controlla quali sn i prodotti che l'utente ha scelto e genera il testo di riepilogo.
    Quando invio i dati alla seconda pagina php per generare l'ordine mi appare l'errore "Fatal error: Maximum execution time of 30 seconds exceeded" ho aumentato il time limiti del file php.ini ma l'errore continua a sussistere.
    Premetto che il file .txt con l'elenco dei prodotti contiente 1700 prodotti circa.

    Il primo file php è questo(form.php):

    <body>
    
    <?php
    echo "<form method=\"post\" action=\"send.php\">\n"; /*inizializza il form*/
    if (!$fp= fopen("list.txt","r")) {
    echo "Spiacente, ci sono problemi con il caricamento del file.";
    } else {
    while($linea!="-------")
    {
    $linea = fgets($fp, 255);
    echo "<fieldset><legend>$linea</legend>";     /*Apre il fieldset*/
        while($linea!="\r\n"&&$linea!="-------")
        {
        $linea = fgets ($fp, 255);
        if ($linea!="\r\n"&&$linea!="-------") {
        echo "<label for=\"$linea\">${linea}</label><input name=\"$linea\" type=\"text\" id=\"$linea\" size=\"4\" maxlength=\"3\" value=\"0\"><br>\n";}
        else echo "</fieldset>";
        }
    }
    fclose($fp);
    }
    
    ?>
    <fieldset><legend>Invia richiesta</legend><input name="submit" type="submit" value="Invia" /></fieldset>
    
    
    </body>
    </html>
    

    Il secondo file (send.php):

    <body>
    
    <?php
    $i=0;
    $vector=array();
    if (!$fp= fopen("list.txt","r")) {
    echo "Spiacente, ci sono problemi con il caricamento del file.";
    } else {
    while($linea!="-------")
    {
    $linea = fgets($fp, 255);
        while($linea!="\r\n"&&$linea!="-------")
        {
        $linea=fgets ($fp, 255);
        if ($linea!="\r\n"&&$linea=!"-------") {
        $quantita=$_POST["$linea"];
        if ($quantita > 0) {/*$vector["$i"]=array("name"=>"$linea","q"=>"$quantita");$i++;*/echo "ok";}
        }
        }
    }
    fclose ($fp);
    }
    ?>
    </body>
    

    E il file txt è strutturato nel seguente modo:

    Categoria prodotti
    Prodotto 1
    prod 2

    Categoria 2
    prod1
    prod2

    Non so proprio come fare e devo finirlo il prima possibile.


  • User

    Impossibile che stia più di 30 secondi. Nemmeno un operazione complessissima starebbe così tanto, quindi c'è un errore nel ciclo while (loop infinito). In ogni caso, evita di mettere un while dentro un while perchè comporta un aumento nei tempi di esecuzione esponenziale.

    L'errore al momento non lo vedo. Comuqnue esiste la funzione per verificare se il puntatore al file è arrivato in fondo. Non usare mai controlli sul contenuto del file che se poi, come può succedere nel tuo caso, metti un trattino in più o uno meno lo script non termina mai.


  • User

    Per fare un debug al volo, metti un $counter, lo incrementi fino a 100 stampandoti in ogni ciclo tutte le variabili (in particolare $linea) e poi esci con un die(); Così hai una visione completa di cosa succede. A istinto direi che la variabile non è mai uguale a "-------" perchè casomai sarà "-------\r\n" visto che presumo vada a capo.... 😉 C'ho azzeccato?


  • User

    nel generare il form dove legge il file .txt non trova nessun errore. ne nel _______ finale ne del ciclo while.


  • User

    In pratica genera il form tranquillamente. E' la seconda parte quando invio i dati del form che si pianta.


  • User

    Debugga un po' mettendo print_r delle varie variabili seguite da die(); così interrompe l'esecuzione. Forse scopri dove si loopa.


  • User

    Ce l'ho fatta. L'errore era una cavolata.
    nel secondo while ho fatto il simbolo diverso invertito =! al posto di !=.
    E vabbè...
    Grazie lo stesso Nasozor. Almeno te ci hai provato.