- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- problema inserimento in mysql
-
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!
-
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!!
-
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 50o forse ho capito male io...
in ogni caso ti stampa una query doppia?
(la prima con i campi vuoti?)
-
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
-
è 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!!
-
il problema potrebbe nascere dal "foreach()"
prova a spiegarmi meglio cosa hai nel campo normeuni proveniente dal form
-
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.5immagina però che sono 100 o 200 o addirittura 400 linee
con foreach ho voluto dividere le varie norme!
-
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.
-
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
-
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
-
@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
-
@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.
-
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
GRAZIE AGAIN
-
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>
<?phprequire_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());
}
?>
-
-
ti ringrazio molto!!!
questa sera sostituisco il codice e provo a ragionare sul primo explode!Poi ti faccio sapere
Molte grazie
Claudio