• User

    problema inserimento in mysql

    Ciao a tutti,

    ho un problema strano!!

    ho generato uno script che da delle righe con explode genera variabili da inserire nel database mysql...e fino a qui tutto bene!

    Il problema è quando le linee da inserire sono molte (con area ripetuta)

    infatti fino a 50 tutto ok
    se sono 100 me li duplica 2 volte

    oltre i 400 ne tralascia qualcuna ad esempio ne trovo 380

    Qualcuno sa aiutarmi?

    Grazie mille

    Claudio


  • User Attivo

    provo ad ipotizzare...

    1. lo script va in timeout?
    2. hai provato a fare un "echo" della tua query e provarla direttamente?
    3. magari non hai sforato il limite massimo di delay che consente il tuo hosting?

  • User Attivo

    Perché non invii il codice della funzione? Magari vediamo un bug che a te sfugge..


  • User
    1. non so se va in timeout come lo capisco?
    2. l'ho fatto ne vedo una 50 e poi gli altri no... sembra che fa un refresh di pagina...... ma in realtà non sono mai quelli reali (esempio 400 diventano 380 ma anche 100 che raddoppiano)
    3. da dove lo capisco? uso Aruba con Linux

    ecco il codice

    <?php
    mysql_select_db($database_normeonline, $normeonline);
    $query_uni = "SELECT * FROM uni";
    $uni = mysql_query($query_uni, $normeonline) or die(mysql_error());
    $row_uni = mysql_fetch_assoc($uni);
    $totalRows_uni = mysql_num_rows($uni);
    ?>
    <style type="text/css">
    <!--
    .Stile6 {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
    font-weight: bold;
    }
    -->
    </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>
      <?php
      $data1=$_POST['normeuni'];
      $data=$data1;
      ?>
      <?php
      $norma = explode ("? ", $data);
      foreach ($norma as $norma1) {
      ?>
      <?php
      list($a1, $a2) = explode("

    ", $norma1);
    //a2 titolo sporco
    list ($titolo) = explode ("UNI", $a2);
    list($uni, $codiceanno) = explode(" ", $norma1);
    ?>
    <style type="text/css">
    <!--
    .Stile5 {font-family: Arial, Helvetica, sans-serif; font-weight: bold; font-size: 10px; }
    -->
    </style>

    </div>
    <p></p>
    <?php
    $divcodice =$codiceanno;
    list($cod, $anno) = explode(":", $divcodice);
    ?>
    <p></p>

    <p> </p>

    <?php
    mysql_query("INSERT INTO uni VALUES ('', '$cod', '$anno', '$titolo')");
    if (mysql_error()){ echo mysql_error();}
    }

    ?>

    GRAZIE MILLE!!!!!


  • Super User

    E' un pò incasinato sto codice... Molte parti inutili, variabili riallocate e non utilizzate... vedi ( $norma = $norma1 -> spreco di memoria ) e la query iniziale, che non sfrutti...


  • User

    ora lo alleggerisco 😞

    ma cosa mi consigli per il mio problema?

    grazie


  • User

    ho tolto la query iniziale

    ho provato con 100 linee alla volta e sembra funzionare

    con 200 linee me ne ritrovo circa 360 (quindi 160 in più) ma perchè????

    quando carica lo script è come se fa il refresh di pagina un paio di volte!!!

    aiuto!!!

    THANKS


  • Super User

    @solocla said:

    ora lo alleggerisco 😞

    ma cosa mi consigli per il mio problema?

    grazie
    mysql_query("INSERT INTO uni VALUES ('', '$cod', '$anno', '$titolo')");
    if (mysql_error()){ echo mysql_error();}
    }

    sostituiscilo con

    mysql_query("INSERT INTO uni VALUES ('', '$cod', '$anno', '$titolo')") or die(mysql_error());


    Per quanto riguarda il tuo problema... Ti consiglio di evitare tutti questi explode se non sono strettamente importanti, idem per i list.. E di dare una ripulita generale al codice... Non conosco il progettoquindi non posso dirti altro


  • User

    l'ho sostituito!
    ora quello che fa
    è raddoppiare perfettamente le linee inserite!!!

    prima era casuale ora sembra che inserisca due volte le stesse linee!!

    per quanto riguarda i list ed explode purtroppo mi sono necessari per separare le variabili....

    help me 😞


  • User Attivo

    Perché non usi

    mysql_fetch_array() ?

    Ti da un array dal quale puoi togliere molto più comodamente i valori...


  • User

    Grazie
    ci proverò

    ma il mio problema non è tanto l'estrarre i dati

    ma il fatto che mi si duplicano nel database!!

    Non capisco!!

    AIUTOOOO!!


  • User

    nessuno mi sa aiutare?

    help me!


  • User

    se non ho capito male hai modificato il codice originario.

    prova a postare il codice aggiornato 😉


  • User

    eccolo.....

    <?php require_once('../Connections/normeonline.php'); ?>
    <?php
    mysql_select_db($database_normeonline, $normeonline);
    ?>
    <style type="text/css">
    <!--
    .Stile6 {
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
    font-weight: bold;
    }
    -->
    </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>
      <?php
      $data1=$_POST['normeuni'];
      $data=$data1;
      ?>
      <?php
      $norma = explode ("? ", $data);
      foreach ($norma as $norma1) {
      ?>
      <?php
      list($a1, $a2) = explode("

    ", $norma1);
    //a2 titolo sporco
    list ($titolo) = explode ("UNI", $a2);
    list($uni, $codiceanno) = explode(" ", $norma1);
    ?>
    <style type="text/css">
    <!--
    .Stile5 {font-family: Arial, Helvetica, sans-serif; font-weight: bold; font-size: 10px; }
    -->
    </style>

    </div>
    <p></p>
    <?php
    $divcodice =$codiceanno;
    list($cod, $anno) = explode(":", $divcodice);
    ?>
    <p></p>
    <p> </p>
    <?php
    mysql_query("INSERT INTO uni VALUES ('', '$uni', '$cod', '$anno', '$titolo')") or die(mysql_error());
    }
    ?>

    grazie


  • User

    fai una cosa:

    modifica

    [php]
    mysql_query("INSERT INTO uni VALUES ('', '$uni', '$cod', '$anno', '$titolo')") or die(mysql_error());
    [/php]

    con:

    [php]
    $prova = "INSERT INTO uni VALUES ('', '$uni', '$cod', '$anno', '$titolo')";
    echo $prova;
    mysql_query($prova) or die(mysql_error());
    [/php]

    e posta qui la stampa della variabile $prova (ovvero la query)

    così cerchiamo di capire da dove proviene l'errore.


  • User

    eccolo

    INSERT INTO uni VALUES ('', '', '', '', '')

    INSERT INTO uni VALUES ('', 'UNI', '11170-1', '2005', 'Veicoli ferrotranviari - Linee guida per la protezione al fuoco dei veicoli ferrotranviari ed a via guidata - Principi generali ')

    ma il problema non è con poche righe!
    ma quando ne metto tante in ciclo!
    ad esempio se ne metto 200 o 400 impazzisce ridando il doppio delle righe o qualche volta meno righe!


  • User

    quella che ho messo è a 1 riga...

    ora ho provato con 400
    e succede che carica più volte la stessa pagina... come se senza refresh della pagina non riesca a inserire tutte le righe!!


  • User

    quindi è come se lo script ripartisse da solo?
    quindi se in ciclo riuscisse a inserirne, che so, 50
    in teoria, ripartendo, dovrebbe riscriverti le stesse 50

    o forse ho capito male io...

    in ogni caso ti stampa una query doppia?

    (la prima con i campi vuoti?)


  • User

    ti faccio un esempio:

    se ne inserisco solo 50 me ne da 50 giuste (e la pagina si carica una sola volta)

    se ne inserisco 100, 200 , 400 sembra fare un refresh di pagina e continuare a caricare la pagina.... il risultato è che spesso rimangono tutte doppie altre volte qualcuno di meno del doppio!

    HELP MEEEE


  • User

    è talmente rapido che non riesco a fermarlo sul secondo o terzo refresh!

    ma sembra che faccia i primi ammettiamo 100 e poi riparte ancora!!

    poi la terza pagina rimane vuota!!