Visualizzazione risultati 1 fino 11 di 11

Discussione: Query INSERT non funzionante in remoto su Altervista

  1. #1
    Guest

    Exclamation Query INSERT non funzionante in remoto su Altervista

    Buongiorno a tutti,
    ho recentemente caricato l'ultima versione di test di un mio applicativo PHP che in XAMPP gira perfettamente sul server remoto di Altervista.
    Riscontro un problema quando da una pagina cerco di inserire dei dati nel database in quanto non me li inserisce per niente (funziona in AJAX). Tuttavia non è un problema di connessione perché tutto il resto (comprese altre pagine di INSERT) funziona e la connessione che è sempre lo stesso file, anche.
    Inoltre anche il database che era in localhost è stato replicato integralmente su Altervista così come tutti i file dell'applicazione.
    Ho provato anche su un altro server Altervista ma il problema persiste.
    Non ricevo errori della query, che viene inserita con il comando mysql_multi_query() ma questo potrebbe essere dovuto al fatto che viene eseguita in AJAX. Consigliate di provare ad eseguire la query semplicemente in POST per vedere se restituisce errori? Considerate che l'AJAX restituisce messaggio di avvenuto inserimento e quindi non verifica errori di query o simili.

    Come posso comportarmi e cosa posso tentare?

    Grazie mille a chi mi risponderà

  2. #2
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Non ricevo errori della query
    Non li ricevi o non li mostri/non li salvi in un log? Vien da se che, se la query venisse davvero eseguita senza errori, il sistema funzionerebbe e i dati verrebbero inseriti. Dunque o la query non viene eseguita, o viene eseguita ma ci sono errori: prova a verificare.

    mysql_multi_query()
    Le funzioni mysql_* sono morte con l'arrivo di PHP 7.0, quindi dall'1 gennaio 2019. Dovresti seriamente rimpiazzare tutto con mysqli o PDO. O essere consapevole che, quando AlterVista cesserà il supporto a PHP 5.6, smetterà di funzionare.

    ma questo potrebbe essere dovuto al fatto che viene eseguita in AJAX [...]
    Consigliate di provare ad eseguire la query semplicemente in POST [...]
    Una query non viene eseguita "in AJAX" o in "POST": viene eseguita all'interno di uno script PHP. Se quello script viene eseguito a seguito di una richiesta HTTP POST o meno è irrilevante, ed è ancora più irrilevante se la richiesta POST viene effettuata "direttamente" (tramite form per intenderci) o tramite AJAX.

    Considerate che l'AJAX restituisce messaggio di avvenuto inserimento e quindi non verifica errori di query o simili
    E chi glielo vieta?
    Puoi benissimo fare in modo che, se durante l'esecuzione di uno script in risposta ad una richiesta arrivata tramite AJAX ci sono errori o simili, questo sia notificato al chiamante. Ad esempio restituendo un JSON con un codice di status che discrimina tra un inserimento corretto ed un errore, magari aggiungendo un messaggio d'errore.
    Certo, non è molto elegante mostrare ad un utente messaggi d'errore che riportano informazioni dettagliate sui database: piuttosto memorizza i dettagli dell'errore in un sistema di log e restituisci al chiamante un messaggio d'errore generico.

    I suggerimenti che do più spesso:


  3. #3
    Guest

    Arrow

    Ciao e grazie per la risposta ,
    riguardo alla funzione mysqli_multi_query() usavo già quella del PHP7 ma avevo dimenticato la i.
    Ho verificato che anche in altre pagine che vanno a modificare dati di diverse tabelle non funzionano ma una pagina che esegue una query di INSERT lavora correttamente.
    Inoltre le query eseguite direttamente dal terminale di PHP myAdmin funzionano su tutte le tabelle.

    Da una pagina che apporta modifiche a un'altra tabella ricevo questo errore
    Codice:
    Errore della query: Data too long for column 'abilitato' at row 5
    E in riga 5 non è presente alcun codice riguardo quella colonna.

    Non ci sto capendo più nulla, in localhost tutto funziona a dovere e senza errori...

    Cosa posso provare adesso?

  4. #4
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    E in riga 5 non è presente alcun codice riguardo quella colonna.
    row 5 fa riferimento alla 5 riga del record set che stai inserendo, non alla riga del codice .

    Non ci sto capendo più nulla, in localhost tutto funziona a dovere e senza errori...
    A volte bastano poche differenze nella configurazione... altre volte gli errori ci sono anche in localhost ma, per motivi più o meno fortuiti, non si notano.

    Cosa posso provare adesso?
    Al posto tuo darei la priorità ad avere un sistema di log stabile, che riporti quante più informazioni possibili, magari salvandole in un file. Fatto questo mi concentrerei su una delle operazioni alla volta e traccerei ogni gruppo di operazioni coinvolte. Ad esempio, per un inserimento che avviene in conseguenza ad una chiamata AJAX, verificherei che:
    • i dati in partenza siano corretti
    • i dati ricevuti dal server siano corretti
    • eventuali pre-elaborazioni dei dati diano i risultati attesi
    • la query di inserimento sia corretta
    • l'inserimento avvenga correttamente
    • lo script restituisca la risposta corretta al chiamante

    sono sottintese tutte le pratiche di programmazione "standard", ad esempio vanno controllati i valori restituiti da ogni chiamata di funzione.

    I suggerimenti che do più spesso:


  5. #5
    Guest

    Predefinito

    Grazie mzanella, domani verifico tutto quello che mi hai segnalato e ti farò sapere.
    Buona serata

  6. #6
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Json valido vuol dire dati utf-8.
    in mysqli si traduce in utf-8

    <?php
    $mysqli = new mysqli('localhost', '', '', 'my_nickaltervista');
    $mysqli->set_charset('utf8');
    $mysqli->query('SET NAMES utf8');
    //mysqli_set_charset($mysqli, 'utf8');
    //mysqli_query($mysqli,'SET NAMES utf8');
    Spero ti aiuti.
    Ultima modifica di darbula : 29-05-2019 alle ore 17.57.17

  7. #7
    Guest

    Predefinito

    Grazie per la risposta,
    non capisco cosa intendi... Pensi sia un errore dovuto a una query che riceve dati non secondo UTF-8?

  8. #8
    Guest

    Question

    Ciao mzanella,
    ho provato quello che mi hai detto:
    ho ottenuto risultati e quindi risolto un problema riguardante un form, rimane però l'altro con cui uso AJAX.
    Ho provato a far eseguire la query con il classico form tramite POST e mi restituisce una videata bianca.
    Ho provato inoltre, sempre sotto tuo consiglio, a creare un log (semplice file txt) contenente sia l'array di dati che la query ma non me li stampa e restituisce il file bianco.
    Codice PHP:
    touch("error_log_12.txt");
    $fp = fopen("error_log_12.txt", "w");
    fwrite($fp, var_dump($registrazione) . " LOG QUERYYYYYY: " . $sql);

  9. #9
    mzanella non è connesso AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    Predefinito

    Codice PHP:
    fwrite($fp, var_dump($registrazione) . " LOG QUERYYYYYY: " . $sql);
    Ehh... no, var_dump non funziona così . Serve a stampare a video le informazioni su una variabile, non puoi usarla direttamente per scrivere in un file. C'è una discussione su StackOverflow con delle soluzioni alternative.
    Inoltre occhio che con fopen("error_log_12.txt", "w"); cancelli di volta in volta il contenuto del file per inserire il nuovo. Magari potresti usare file_put_contents con il flag FILE_APPEND.

    I suggerimenti che do più spesso:


  10. #10
    Guest

    Predefinito

    Ringrazio tutti per le risposte,
    alla fine ho creato un nuovo form senza usare AJAX e funziona.
    Rimane l'incognita ma funziona

  11. #11
    darbula non è connesso AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,896

    Predefinito

    Hai provato inserendo (modificando la multi query che deve iniziare con SET NAMES utf8) i due codici da me proposti per la connessione al database?
    Puoi utilizzare semplicemente error_log($var,3,dirname(__FILE__).'/test.log'); se non esiste test.log verrà creato nella directory corrente, verrà creato ogni qualvolta c'è $var (giusto o sbagliato).
    Comunque dovresti controllare le query se inizialmente é false o succesivamente dopo che chiami mysqli_next_result se false mostri l'errore con mysqli_error :)
    https://www.php.net/manual/en/mysqli.multi-query.php
    Ultima modifica di darbula : 31-05-2019 alle ore 14.26.05

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •