Italian Adorabile PHP

LucaMs

Expert
Licensed User
Longtime User
Semplice inserimento di due campi in una tabella.

Modifico il tipo di un campo, da INT a Char (tabella dati vuota).

Modifico la vecchia query funzionante, sostituendo:

Values($DatoNumerico, '$DatoTesto')

con

Values('$NuovoDatoTesto', '$DatoTesto')

(ovviamente i nomi delle variabili qui sono inventati)

e l'inserimento non avviene (testato url tramite browser, ed ha sempre funzionato)

Provato anche senza apici.

Possibile che non venga restituito un errore (perlomeno da brower)?
 

Star-Dust

Expert
Licensed User
Longtime User
boh. Sto usando PHP per la prima volta adesso per la mia App.
Ogni tot invia dati del gps su un DataBase usando PHP (molto più semplice di fireBase)
2 codici copiati da un tutorial. e funziona tutto bene.... per il momento.
 

LucaMs

Expert
Licensed User
Longtime User
Devo provare tramite l'app, almeno per vedere se mi restituisce un errore; ma ero (e sono) stanco; con la fortuna che ho trovo sempre piccoli o grossi problemi, ogni due righe di codice che scrivo (e non è che mi sia rincojonito improvvisamente - né che lo sia mai stato :D - sono intoppi strampalati che spuntano come i funghi e che non dipendono da me... tipo questo).

C'è ancora chi ama programmare; per me è solo stress.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
in teoria dovrsti usare
Values($NuovoDatoTesto, '$DatoTesto')
(quindi con gli apici solo nei dati ma non nel nome del campo) ma probabilmente sbaglio io a capire, per cui sarebbe meglio se mostri la query completa

Mi confermi che $NuovoDatoTesto contiene il nome del campo e $DatoTesto contiene i dati da scrivere nel campo ???
 

LucaMs

Expert
Licensed User
Longtime User
in teoria dovrsti usare
Values($NuovoDatoTesto, '$DatoTesto')
(quindi con gli apici solo nei dati ma non nel nome del campo) ma probabilmente sbaglio io a capire, per cui sarebbe meglio se mostri la query completa

Mi confermi che $NuovoDatoTesto contiene il nome del campo e $DatoTesto contiene i dati da scrivere nel campo ???
No, sono entrambi valori (infatti stanno nella parte Values della query).


Novità: adesso, nell'app, mi ritorna un "Nick già esistente" (quindi mio messaggio) per un inserimento... in una tabella completamente vuota.
E ripeto che tutto funzionava, anche questo controllo che non ho affatto toccato.

La query è semplicissima (qui cambio qualcosina per ragioni di privacy):
$Query = "INSERT INTO MiaTabella (`UserID`, `Nick`) VALUES ('$UserID', '$NickChosen')";

e, dopo aver modificato il tipo UserID da INT a Char nella tabella, l'unica altra cosa che ho cambiato è stato aggiungere gli apici intorno a $Nick, in quanto adesso è un dato testuale.
 

sirjo66

Well-Known Member
Licensed User
Longtime User
in teoria dovrebbe andar bene, però puoi provare con:
$Query = "INSERT INTO MiaTabella (UserID,Nick) VALUES ('$UserID', '$NickChosen')";
però occhio che $UserID e $NickChosen non devono contenere apici !!

eventualmente puoi trasformare il tutto in
$Query = "INSERT INTO MiaTabella (UserID,Nick) VALUES ('".str_replace("'","''",$UserID)."', '".str_replace("'","''",$NickChosen)."')";

Se ancora non funziona devi lavorare ad un livello ancora più basso fino a quando trovi che cosa non funziona, per cui trasformi la tua query in
$Query = "INSERT INTO MiaTabella (UserID,Nick) VALUES ('MioID', 'MioNick')";

in modo da togliere le variabili di PHP e vedere se così lo inserisce, è solo un test per capire se il problema è la query o le variabili

Altra cosa che mi è venuto in mente è che il campo UserID se ha un indice univoco devi cancellare l'indice e ricrearlo, perchè se hai cambiato il tipo campo da Int a Varchar può essere che l'indice non è stato ricreato con il tipo giusto
 

LucaMs

Expert
Licensed User
Longtime User
Mooolto probabilmente ho trovato l'errore.

In realtà avevo aggiunto un paio di cambi alla tabella, uno dei quali non è previsto che possa essere Null e non glielo passavo.
Ma il punto principale di questo thread è proprio questo: possibile che non venga segnalato errore???

Poi dice che uno compra 20kg di aspirine e ci fa colazione! :p.

Intanto, grazie per l'aiuto; poi vi faccio sapere se fosse esattamente quello il problema (probabile)
 

sirjo66

Well-Known Member
Licensed User
Longtime User
possibile che non venga segnalato errore???

Di solito sì, dipende se nel tuo codice PHP gestisci l'errore oppure no, ad esempio io di solito uso questo:

B4X:
$rs = mysql_query($query);
if ($rs === false) {
   echo "Errore query\n".mysql_error()."\n".$query;
   return;
}

e ovviamente la mia applicazione ricevendo una stringa che inizia con "Errore" capisce che c'è qualcosa che non va e riesce anche a mostrare l'errore che viene appunto restituito da mysql_error()
 

LucaMs

Expert
Licensed User
Longtime User
Avevo provato ma pare non funzionare; probabilmente perché uso mysqli_query anziché mysql_query (non essendo esperto, non ne conosco con certezza la differenza... credo sia una novità per pagine OOP? Mah, non mi ci addentro, essendo solo roba temporanea).
 

udg

Expert
Licensed User
Longtime User
solo roba temporanea
Lo scorso fine settimana ho acquistato il famoso VPS di Aruba a 1 euro (e finora non ho avuto il tempo nemmeno di collegarmici per la prima volta..). Comunque, posso confermare che quello è il vero costo (1.22 compresa IVA) e poi si pagano a parte servizi come backup e simili. Puoi scegliere tra diversi sistemi operativi (io ho scelto CentOS 7 64 bit). Vi aggiornerò appena avrò maturato un minimo di esperienza...
 

LucaMs

Expert
Licensed User
Longtime User
Lo scorso fine settimana ho acquistato il famoso VPS di Aruba a 1 euro (e finora non ho avuto il tempo nemmeno di collegarmici per la prima volta..). Comunque, posso confermare che quello è il vero costo (1.22 compresa IVA) e poi si pagano a parte servizi come backup e simili. Puoi scegliere tra diversi sistemi operativi (io ho scelto CentOS 7 64 bit). Vi aggiornerò appena avrò maturato un minimo di esperienza...
Eh, dovrei farlo anch'io.
Problemino è che si tratta di Linux; speriamo almeno che forniscano un'interfaccia web o perlomeno un client che faciliti le cose.
 

udg

Expert
Licensed User
Longtime User
Problemino è che si tratta di Linux;
Hanno anche opzioni Windows Server, ma presumo si paghi un extra per le licenze..non vorrai che MS vada in miseria!

ps: io di Linux ne so il giusto (anche meno) ma su Internet si trova tutto ciò che serve; per ora vorrei installare un broker Mosquitto e riadattare i miei B4J-services. Quindi alla fine dovrei avere la triade MySql, Mosquitto, B4J.
 
Top