• User

    il problema potrebbe nascere dal "foreach()"

    prova a spiegarmi meglio cosa hai nel campo normeuni proveniente dal form


  • User

    normeuni è una variabile che arriva da un form

    nel form inserisco tutte le linee che mi servono e tramite lo script voglio che mi divida le linee in variabili per inserirle in un database

    nel form inserisco linee tipo queste:

    ? UNI 1001-1004:1939

    Ricerca del carattere tintorio della materia colorante impiegata nella tintura delle fibre tessili animali e artificiali proteiche.
    UNI 1001-1004:1939 versione elettronica; lingua italiano EUR 17.5
    UNI 1001-1004:1939 versione su carta; lingua italiano EUR 17.5

    ? UNI 1005-1006:1939

    Equivalenza delle torsioni dei filati per metro e per pollice.
    UNI 1005-1006:1939 versione elettronica; lingua italiano EUR 12.5
    UNI 1005-1006:1939 versione su carta; lingua italiano EUR 12.5

    ? UNI 1008-1009:1939

    Filati di canapa, di lino, di iuta. Tavola di ragguaglio dei pesi e delle lunghezze nei sistemi metrico e inglese.
    UNI 1008-1009:1939 versione elettronica; lingua italiano EUR 12.5
    UNI 1008-1009:1939 versione su carta; lingua italiano EUR 12.5

    ? UNI 10101:1992

    Prodotti vernicianti. Determinazione dello spessore della pellicola secca di un prodotto verniciante o di un ciclo da applicare su legno e supporti legnosi.
    UNI 10101:1992 versione elettronica; lingua italiano EUR 17.5
    UNI 10101:1992 versione su carta; lingua italiano EUR 17.5

    immagina però che sono 100 o 200 o addirittura 400 linee

    con foreach ho voluto dividere le varie norme!


  • User

    allora ho fatto un test in locale e con un veloce copia e incolla dei risultati ho provato a fingere l'inserimento di 4971 elementi (credo bastino 😄 )

    occhio che lo script ti fa anche un inserimento vuoto all'inizio.

    non mi ha dato nessun errore e non mi ha stampato doppioni (piuttosto che inserire in db facevo stampare ogni volta la query)

    è probabile che l'errore che hai dipenda da un timeout o dalle tue impostazioni php e mysql (sui quali non ti saprei dire molto)

    in questo caso ti conviene risolvere il problema alla radice ripensandone il funzionamento magari impostando dei contatori e dividendo le operazioni di inserimento a gruppi da 50 ciascuno.

    è evidente che con numeri a 3 cifre di elementi va in palla e il problema deriverà quasi sicuramente da lì.

    mi dispiace non saperti aiutare oltre.


  • User

    sei un grande!!

    io lavoro su Aruba e non so se loro hanno un timeout!

    ora proverò in locale.....
    mi dici solo due cose...

    che versione php hai?

    e secondo cosa intendi per contatori?

    Grazie mille

    Ciao


  • User

    ma hai provato con 4000 record tutti che partono dal form?

    o un certo numero (sotto i 100) fatto più volte?
    (arrivando ai 4000)

    ciao


  • User

    @solocla said:

    sei un grande!!

    io lavoro su Aruba e non so se loro hanno un timeout!

    ora proverò in locale.....
    mi dici solo due cose...

    che versione php hai?

    e secondo cosa intendi per contatori?

    Grazie mille

    Ciao

    grazie per il grande ma non ho proprio fatto niente. 😄

    in locale => PHP Version 4.3.11

    per contatori intendo controllare il numero degli elementi inseriti e poi ricominciare dal successivo.

    es. da 1 a 50 e poi da 51 a 100, etc...

    adesso stacco,
    buona fortuna


  • User

    @solocla said:

    ma hai provato con 4000 record tutti che partono dal form?

    o un certo numero (sotto i 100) fatto più volte?
    (arrivando ai 4000)

    ciao

    io il form non ce l'ho così ho inserito all'interno della variabile manualmente il contenuto di esempio che mi avevi dato ripetuto per più di 4000 volte.


  • User

    ok perfetto

    quindi mi consigli di mettere un limite di 50 sul ciclo!

    anche se poi ho il problema di come faccio a farlo riprendere dal 51 :mmm:

    GRAZIE AGAIN


  • User Attivo

    Questo è il tuo codice un po' ripulito...si potrebbe ancora fare di meglio.

    Non entrando nel merito del programma , ma analizzandolo si può vedere che senza dubbio la query viene eseguita il doppio delle volte a causa del foreach. La soluzione è quindi senza dubbio nell'explode che genera $norma.
    Non so perché usi explode e non split forse perché non conosco l'input che gli viene passato, ma devi indubbiamente controllare quella explode.

    Un consiglio.

    Cerca di dividere html dal php il più possibile e di raggruppare il php senza frazionarlo come avevi fatto. Rendi altrimenti il codice molto più difficile da leggere e da capire.

    Ciao

    <style type="text/css">
    <!--
    .Stile6 {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
    font-weight: bold;
    }
    .Stile5 {font-family: Arial, Helvetica, sans-serif; font-weight: bold; font-size: 10px; }
    -->
    </style>
    <div align="center"><a href="formuni.php" class="Stile6">Torna all'inserimento</a>

    • <a href="catalogouni.php"><span class="Stile6">VISUALIZZA CATALOGO UNI</span></a><br>
      <a href="cpanel.php"><span class="Stile6">TORNA AL PANNELLO DI CONTROLLO</span></a>
      </div>
      <?php

      require_once('../Connections/normeonline.php');
      mysql_select_db($database_normeonline, $normeonline);
      $data1=$_POST['normeuni'];
      $data=$data1;
      $norma = explode ("? ", $data);
      foreach ($norma as $norma1) {
      list($a1, $a2) = explode("\n", $norma1);
      //a2 titolo sporco
      list ($titolo) = explode ("UNI", $a2);
      list($uni, $codiceanno) = explode(" ", $norma1);
      $divcodice =$codiceanno;
      list($cod, $anno) = explode(":", $divcodice);
      mysql_query("INSERT INTO uni VALUES ('', '$uni', '$cod', '$anno', '$titolo')") or die(mysql_error());
      }
      ?>


  • User

    ti ringrazio molto!!!
    questa sera sostituisco il codice e provo a ragionare sul primo explode!

    Poi ti faccio sapere

    Molte grazie

    Claudio