Torna indietro   Hardware Upgrade Forum > Software > Programmazione

In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi
In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi
Abbiamo assemblato e provato la Fiido Nomads Pro, evoluzione del modello da trekking già presente nella gamma, che migliora in tutto, soprattutto grazie al motore centrale, fluido e potente. Ottima app, costruzione solida e prezzo ok completano il quadro
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto
Lo chassis in Ceraluminium è il cuore di questo notebook in edizione 2026, un modello pensato per garantire produttività con le tipiche applicazioni di produttività personale e capace di offrire un'autonomia di funzionamento lontano dalla presa di corrente da riferimento. Potenza, facilità di trasporto e costruzione robusta tutto in un notebook compatto.
MSI PRO MAX: QD-OLED ultrawide per lavorare, creare e giocare
MSI PRO MAX: QD-OLED ultrawide per lavorare, creare e giocare
MSI PRO MAX 341QPXW14G è un monitor ultrawide da 34 pollici che porta la tecnologia QD-OLED di quinta generazione in un contesto principalmente orientato alla produttività. La qualità dell'immagine è elevatissima, il formato 21:9 è ideale per il multitasking e la dotazione di porte trasforma il monitor in un vero hub per Mac, PC e dispositivi mobili. Il limite principale è invece il refresh rate di soli 144 Hz, che lo allontana dai giocatori competitivi più esigenti
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 28-09-2010, 17:57   #1
me88
Junior Member
 
Iscritto dal: Sep 2010
Messaggi: 28
[MySql]: valori INT

Ho una tabella MySql con un campo intero.
Il valore di questo campo è impostato tramite una query che gli assegna un numero determinato da una funzione random.

se ad esempio questa funione genera il numero 2045 nel campo viene inserito 706!! come è possibile?
me88 è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2010, 18:12   #2
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da me88 Guarda i messaggi
Ho una tabella MySql con un campo intero.
Il valore di questo campo è impostato tramite una query che gli assegna un numero determinato da una funzione random.

se ad esempio questa funione genera il numero 2045 nel campo viene inserito 706!! come è possibile?
Evidentemente viene ri-generato il numero prima dell'insert (se ti fai stampare la query...).

Prova a postare la query va
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2010, 18:32   #3
me88
Junior Member
 
Iscritto dal: Sep 2010
Messaggi: 28
Quote:
Originariamente inviato da dojolab Guarda i messaggi
Evidentemente viene ri-generato il numero prima dell'insert (se ti fai stampare la query...).

Prova a postare la query va
<?php
include "contr_login.php";
$pagamento=$_GET['pagamento'];
$codice = $_GET['codice'];

$db_user = "root";
$db_password = "quindici";
$db_database = "sito";
$connessione=mysql_connect($db_host,$db_user,$db_password);

$nome=$_SESSION['user'];
$numordine = rand(1, 3000); <----------------

$recset=mysql_db_query("sito","SELECT * FROM carrello WHERE username='$nome' ",$connessione);
$numrec=mysql_num_rows($recset);

for ($cont=0; $cont<$numrec; $cont++)
{
$id=mysql_result($recset,$cont,"id");
$nome=mysql_result($recset,$cont,"username");

if($pagamento == "Bonifico Bancario")
{
$recset1=mysql_db_query("sito","INSERT INTO ordini (idord, username, numordine) VALUES('$id', '$nome', '$numordine')",$connessione);
$numrec1=mysql_affected_rows($connessione);
}
else
if($pagamento == "Carta di credito")
{
-------> $recset1=mysql_db_query("sito","INSERT INTO ordini (idord, username, codcarta, numordine) VALUES('$id', '$nome', '$codice', '$numordine')",$connessione);
$numrec1=mysql_affected_rows($connessione);

}
}

con le frecce ho indicato il codice interessato
me88 è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2010, 19:02   #4
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Ok, pensavo che come rand usassi la funzione di MySQL (interna alla Query) e non una funzione PHP 'esterna'.

Allora, vediamo insieme: prima di tutto la funzione che usi, mysql_db_query() è depecrata a partire dalla versione 5.3 di PHP, quindi fai attenzione: meglio NON usare mai funzioni depecrate.

Puoi sostituire il tutto con l'abbinamento mysql_select_db(database, conn) e mysql_query(query); per eseguire in ordine, il 'select' del db e la query.

Per il tuo problema è strano: posso consigliarti di stamparti la var numordine PRIMA e DOPO i ciclo e dirmi che risultato ti torna? PS segnati anche il risultato nella query.

PS. sfruttare un rand() per creare numeri d'ordini non è il massimo, se ti capitano dentro due numeri uguali ? (difficile ma possibile). Usa piuttosto una funzione di controllo o un campo auto-incrementale. MySQL ha questo limite purtroppo, ti tornerebbe un errore e si bloccherebbe tutto.
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2010, 20:10   #5
me88
Junior Member
 
Iscritto dal: Sep 2010
Messaggi: 28
Quote:
Originariamente inviato da dojolab Guarda i messaggi
Ok, pensavo che come rand usassi la funzione di MySQL (interna alla Query) e non una funzione PHP 'esterna'.

Allora, vediamo insieme: prima di tutto la funzione che usi, mysql_db_query() è depecrata a partire dalla versione 5.3 di PHP, quindi fai attenzione: meglio NON usare mai funzioni depecrate.

Puoi sostituire il tutto con l'abbinamento mysql_select_db(database, conn) e mysql_query(query); per eseguire in ordine, il 'select' del db e la query.

Per il tuo problema è strano: posso consigliarti di stamparti la var numordine PRIMA e DOPO i ciclo e dirmi che risultato ti torna? PS segnati anche il risultato nella query.

PS. sfruttare un rand() per creare numeri d'ordini non è il massimo, se ti capitano dentro due numeri uguali ? (difficile ma possibile). Usa piuttosto una funzione di controllo o un campo auto-incrementale. MySQL ha questo limite purtroppo, ti tornerebbe un errore e si bloccherebbe tutto.
so che potrebbe dare l'ultimo problema che hai spiegato, però per come ho impostato il database non mi venivano altre soluzioni. pensavo di controllare ogni volta se il numero era presente in tabella.
in pratica io inserisco ogni prodotto di un ordine nella tabella(ad esempio: se un ordine ha 5 prodotti io avrò 5 record con lo stesso numero d'ordine e riferito allo stesso utente), quindi se uso un campo autoincrementale questi record di uno stesso ordine avrebbero numero differente. Spero di essermi spiegata bene! hai altre soluzioni da suggerirmi?

Ho provato a stampare come hai detto, sia prima che dopo il ciclo i numeri sono uguali, vengono cambiati all'interno del database!
ti ringrazio intanto per la risposta!

Ultima modifica di me88 : 28-09-2010 alle 20:23.
me88 è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2010, 20:38   #6
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da me88 Guarda i messaggi
so che potrebbe dare l'ultimo problema che hai spiegato, però per come ho impostato il database non mi venivano altre soluzioni. pensavo di controllare ogni volta se il numero era presente in tabella.
in pratica io inserisco ogni prodotto di un ordine nella tabella(ad esempio: se un ordine ha 5 prodotti io avrò 5 record con lo stesso numero d'ordine e riferito allo stesso utente), quindi se uso un campo autoincrementale questi record di uno stesso ordine avrebbero numero differente. Spero di essermi spiegata bene! hai altre soluzioni da suggerirmi?

Ho provato a stampare come hai detto, sia prima che dopo il ciclo i numeri sono uguali, vengono cambiati all'interno del database!
ti ringrazio intanto per la risposta!
Si una soluzione ci sarebbe: non usare l'incrementale :P.

Prima però concentriamoci sull'errore.
Ti sei mandato in stampa la query? Metti tutta la query i una variabile PHP e mandala in stampa se i valori PHP rimangono invariati nel percorso del ciclo allora sono invariati anche nella query, ergo il valore si cambia al momento dell'insert into di MYSQL; curiosità, che campo hai usato per la tabella?

Per il quesito, in questo caso fai bene.
Alternativa sarebbe fare una tabella 'relazioni' con id prodotto e codice ordine
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 28-09-2010, 23:52   #7
me88
Junior Member
 
Iscritto dal: Sep 2010
Messaggi: 28
Quote:
Originariamente inviato da dojolab Guarda i messaggi
Si una soluzione ci sarebbe: non usare l'incrementale :P.

Prima però concentriamoci sull'errore.
Ti sei mandato in stampa la query? Metti tutta la query i una variabile PHP e mandala in stampa se i valori PHP rimangono invariati nel percorso del ciclo allora sono invariati anche nella query, ergo il valore si cambia al momento dell'insert into di MYSQL; curiosità, che campo hai usato per la tabella?

Per il quesito, in questo caso fai bene.
Alternativa sarebbe fare una tabella 'relazioni' con id prodotto e codice ordine
Ho modificato il codice in questo modo (ho anche stampato la query):
<?php
include "contr_login.php";
$pagamento=$_GET['pagamento'];
$codice = $_GET['codice'];

$db_user = "root";
$db_password = "quindici";
$db_database = "sito";
$connessione=mysql_connect($db_host,$db_user,$db_password);

$nome=$_SESSION['user'];
$controlla= 0;
while ($controlla == 0)
{
$numordine = rand(1, 2000);
$recset2=mysql_db_query("sito","SELECT * FROM ordini WHERE numordine ='$numordine' ",$connessione);
$numrec2=mysql_num_rows($recset2);
if ($numrec2 == 0)
$controlla=1;
else
$controlla=0;
}


$recset=mysql_db_query("sito","SELECT * FROM carrello WHERE username='$nome' ",$connessione);
$numrec=mysql_num_rows($recset);

for ($cont=0; $cont<$numrec; $cont++)
{
$id=mysql_result($recset,$cont,"id");
$nome=mysql_result($recset,$cont,"username");

if($pagamento == "Bonifico Bancario")
{
$recset1=mysql_db_query("sito","INSERT INTO ordini (idord, username, numordine) VALUES('$id', '$nome', '$numordine')",$connessione);
$numrec1=mysql_affected_rows($connessione);
$recset3=mysql_db_query("sito","SELECT * FROM ordini WHERE username='$nome' ",$connessione);
$numrec3=mysql_num_rows($recset3);
for ($cont3=0; $cont3<$numrec3; $cont3++){
$idord=mysql_result($recset3,$cont3,"idord");
$username=mysql_result($recset3,$cont3,"username");
$numordine=mysql_result($recset3,$cont3,"numordine");
echo $idord.$username.$cogn.$numordine;}

}
else
if($pagamento == "Carta di credito")
{
$recset1=mysql_db_query("sito","INSERT INTO ordini (idord, username, codcarta, numordine) VALUES('$id', '$nome', '$codice', '$numordine')",$connessione);
$numrec1=mysql_affected_rows($connessione);

}
}

echo "<h3>Greazie ".$nome." il tuo ordine &egrave stato inoltrato correttamente!</h3>";
echo "<h2>Ricorda il tuo numero di ordine: ".$numordine."</h2>";
echo "<p1>Riceverai entro poche ore un sms di conferma al numero di cellulare da te indicato. Entro una settimana lavorativa dalla conferma riceverai i prodotti.
Affinch&egrave possa andare tutto a buon fine ti invitiamo a prendere visione del regolamento tramite la sezione 'Modalit&agrave di consegna' e 'Modalit&agrave di pagamento'</p1>";
mysql_close($connessione);
?>
</body>
</html>

Non so come mai, ma adesso i numeri sono riportati correttamente in tabella, xo ho altri due problemi:
1. se ho due ordini diversi dello stesso cliente e con uno stesso prodotto la query non viene eseguita;
2. se eseguo un nuovo ordine con un cliente differente la query viene eseguita solo se la tabella ordini risulta vuota.

non capisco il motivo dal momento in cui non ho fatto nessuna distinzione tra tabella piena o vuota!!
me88 è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2010, 00:10   #8
me88
Junior Member
 
Iscritto dal: Sep 2010
Messaggi: 28
Ho risolto!!!
Sarà l'ora tarda, ma non mi ero accorda che avevo definito come chiave primaria idord(che sarebbe l'id del prodotto, dovrei cambiare il nome effettivamente) e quindi logicamente non poteva avere più valori uguali in record differenti! grazie cmq per la pazienza!
me88 è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2010, 07:20   #9
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da me88 Guarda i messaggi
Ho risolto!!!
Sarà l'ora tarda, ma non mi ero accorda che avevo definito come chiave primaria idord(che sarebbe l'id del prodotto, dovrei cambiare il nome effettivamente) e quindi logicamente non poteva avere più valori uguali in record differenti! grazie cmq per la pazienza!
Assolutamente no, è la limitazione che ti dicevo di MySQL .
Devi fare molta attenzione a questo quando lavori con MySQL.

PS. La prossima volta che 'posti' del codice, usa i TAG specifici del Forum, eviti il mal di testa a tutti noi
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2010, 08:48   #10
me88
Junior Member
 
Iscritto dal: Sep 2010
Messaggi: 28
Quote:
Originariamente inviato da dojolab Guarda i messaggi
PS. La prossima volta che 'posti' del codice, usa i TAG specifici del Forum, eviti il mal di testa a tutti noi
ok!

ho un'altima domanda e poi non rompo più! mi sono accorta che tutto funziona perfettamente nel secondo if, mentre ho un piccolo problema nel primo. mi inserisce correttamente il record xo come prima lo copia due volte e con un codice ordine differente. ho provato a stampare il numero di record che vengono inseriti e mi da uno, ma poi effettivamente ce ne sono due in tabella!
me88 è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2010, 08:58   #11
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da me88 Guarda i messaggi
ok!

ho un'altima domanda e poi non rompo più! mi sono accorta che tutto funziona perfettamente nel secondo if, mentre ho un piccolo problema nel primo. mi inserisce correttamente il record xo come prima lo copia due volte e con un codice ordine differente. ho provato a stampare il numero di record che vengono inseriti e mi da uno, ma poi effettivamente ce ne sono due in tabella!
I casi possono essere tre:

a) esiste già il record nel DB, MySQL lo ignora e lo re-inserisce (cosa possibile ma non mi sembra il caso, controlla comunque).
b) il ciclo viene eseguito n+1 volte del previsto.
c) la seconda condizione (IF) viene ritenuta vera 2 volte.

Controlla.
Per controlla intendo, fai il DEBUG.
Ricordati, il debug è il miglior nemico di un programmatore ti fa sempre incazzare
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2010, 10:53   #12
me88
Junior Member
 
Iscritto dal: Sep 2010
Messaggi: 28
Quote:
Originariamente inviato da dojolab Guarda i messaggi
I casi possono essere tre:

a) esiste già il record nel DB, MySQL lo ignora e lo re-inserisce (cosa possibile ma non mi sembra il caso, controlla comunque).
b) il ciclo viene eseguito n+1 volte del previsto.
c) la seconda condizione (IF) viene ritenuta vera 2 volte.

Controlla.
Per controlla intendo, fai il DEBUG.
Ricordati, il debug è il miglior nemico di un programmatore ti fa sempre incazzare
ho provato a riguardare tutto in base a quello che mi hai detto e non penso sia uno dei tre casi possibili:
a) anche con la tabella vuota inserisce sempre due volte;
b) no perchè stampando la query mi dice correttamente che ha inserito una sola riga e poi se eseguisse più volte il ciclo credo che dovrebbe dare lo stesso problema anche sul secondo if;
c) avevo pensato anche io a quello ma evidentemente non è dato che ho provato a togliere il secondo if (quello corretto) e il problema non cambia.

penso a questo punto che lo lascerò così sperando che il prof non se ne accorga!
ho provato a fare la query da mysql ed è corretta..
me88 è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2010, 10:56   #13
dojolab
Senior Member
 
L'Avatar di dojolab
 
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
Quote:
Originariamente inviato da me88 Guarda i messaggi
ho provato a riguardare tutto in base a quello che mi hai detto e non penso sia uno dei tre casi possibili:
a) anche con la tabella vuota inserisce sempre due volte;
b) no perchè stampando la query mi dice correttamente che ha inserito una sola riga e poi se eseguisse più volte il ciclo credo che dovrebbe dare lo stesso problema anche sul secondo if;
c) avevo pensato anche io a quello ma evidentemente non è dato che ho provato a togliere il secondo if (quello corretto) e il problema non cambia.

penso a questo punto che lo lascerò così sperando che il prof non se ne accorga!
ho provato a fare la query da mysql ed è corretta..
La condizione del for, < o <= ?
Controlla bene questo.

PS. fai l'Insubria di Varese per caso?
__________________
Il mercatino di dojolab: VENDO UN PO' DI COSE! VAI
Vendo Libro Oracle 10g GUIDA COMPLETA della Oracle Press, ITALIANO: LINK
dojolab è offline   Rispondi citando il messaggio o parte di esso
Old 29-09-2010, 11:16   #14
me88
Junior Member
 
Iscritto dal: Sep 2010
Messaggi: 28
Quote:
Originariamente inviato da dojolab Guarda i messaggi
La condizione del for, < o <= ?
Controlla bene questo.

PS. fai l'Insubria di Varese per caso?

no studio a parma!
me88 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


In sella alla Fiido Nomads Pro: e-bike con motore centrale da 100 Nm per il divertimento a 360 gradi In sella alla Fiido Nomads Pro: e-bike con motor...
ASUS Zenbook 14 (UX3480AA): tanta autonomia con uno chassis bello e robusto ASUS Zenbook 14 (UX3480AA): tanta autonomia con ...
MSI PRO MAX: QD-OLED ultrawide per lavorare, creare e giocare MSI PRO MAX: QD-OLED ultrawide per lavorare, cre...
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Rivoluzione in arrivo per Xbox su PC: la...
Weekend di offerte Amazon: vano a ruba l...
Quanto costerà la serie Galaxy S2...
Blink ai minimi su Amazon: videocamere M...
Fire TV Stick 4K a 27,99€, Echo Dot a 29...
Samsung e Thierry Henry: svelata la nuov...
Schermo OLED e touch: il MacBook sta per...
Addio conversioni: Google Drive e Docs o...
Arriva il portale di Google che smascher...
Gli iPhone 18 Pro non convincono: Apple ...
NVIDIA torna su macOS con un driver non ...
Engwe ha un modello che è il SUV ...
Le migliori offerte del weekend Amazon: ...
Cina e UE, intesa sulle auto ibride: Pec...
2 lavatrici slim COMFEE’ a 255€ o 280€ s...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 11:33.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v