Visualizzazione risultati 1 fino 15 di 15

Discussione: Problema connessione db

  1. #1
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito Problema connessione db

    Buonasera,
    Ho un sito (che gira in PHP 4) che ha iniziato a farmi problemi da oggi pomeriggio verso le 13.

    Molte pagine che eseguono delle funzioni sul db hanno smesso di funzionare all'improvviso dopo quell'orario.
    Facendo un rapido controllo, ho notato che il settaggio PHP è passato dal 4 al PHP 5.2.

    È forse quello il problema?
    Purtroppo non mi sono aggiornato e non so se altervista ha fatto un update o qualcosa.
    In caso, come posso risolvere?

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,145

    Predefinito

    La versione minima è PHP5.2. La 4 non è disponibile.

    In generale ti sconsiglio fortemente di utilizzare versioni così vecchie, sia per quanto riguarda l'ottimizzazione ma soprattutto la sicurezza.
    Quali funzioni stai utilizzando per la gestione del database? Ti consiglio di passare a mysqli o pdo.

    Ciao!

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

    Predefinito

    Il php 4 è stato dismesso da tanto, più che altro può essere che adesso utilizzi MySQL 5.6 (auto-update).. Questo database ha regole più stringenti dove di sicuro il problema sta nel codice php.. Tipo vuoi salvare stringhe vuote ecc..
    Ultima modifica di darbula : 23-02-2018 alle ore 16.39.14

  4. #4
    personalthings non è connesso Utente giovane
    Data registrazione
    10-08-2013
    Messaggi
    73

    Predefinito

    Più che altro ho notato che tutti i problemi di INSERT hanno come punto in comune il datetime.
    Però non ne sono sicurissimo.
    Sto cercando di trovare una soluzione che adesso non mi viene :(

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Quali funzioni stai utilizzando per la gestione del database?
    In che senso? Perdonami, penso di non aver capito.

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

    Predefinito

    Si riferisce a MySQL MySQLi o PDO la prima è deprecata..
    Nel database il campo è di tipo DATETIME? Solo le date inglesi per come vedi qui https://dev.mysql.com/doc/refman/5.7/en/datetime.html
    Puoi aggiungere mysql_error ,mysqli_error in modo di stampare gli errori, non è una cattiva idea usare vari var_dump su tutte le variabili (o se le query contengo effettivamente i dati che ti aspettavi)
    Ultima modifica di darbula : 23-02-2018 alle ore 23.35.07

  6. #6
    fper non è connesso Utente giovane
    Data registrazione
    02-12-2002
    Messaggi
    56

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    Si riferisce a MySQL MySQLi o PDO la prima è deprecata..
    Nel database il campo è di tipo DATETIME? Solo le date inglesi per come vedi qui https://dev.mysql.com/doc/refman/5.7/en/datetime.html
    Puoi aggiungere mysql_error ,mysqli_error in modo di stampare gli errori, non è una cattiva idea usare vari var_dump su tutte le variabili (o se le query contengo effettivamente i dati che ti aspettavi)
    Anch'io da un paio di giorni ho lo stesso problema con query di inserimento che non vanno a buon fine.
    Lavoro con PHP 5.2
    Cosa intendi quando dici che MYSQL è deprecata? Quanto faccio la connesione è a MYSQL.
    Non tutti i campi che inserisco sono compilati....c'è un probema con campi vuoti?
    C'è anche un campo data: può essere quello il problema?
    Ci sono nuovi caratteri non più supportati?
    Fino a qualche giorno fa funzionava tutto.
    Grazie in anticipo per i consigli che vorrai darmi.
    Fabio
    Report di pesca in mare.
    http://fper.altervista.org/pescare

    Sito ospitato (poesie di un autore emergente)
    http://fper.altervista.org/ftib

  7. #7
    yakamoz non è connesso Neofita
    Data registrazione
    16-05-2013
    Messaggi
    19

    Predefinito

    intende dire che le vecchie funzioni per collegarsi al DB non sono più valide
    ma che devi usare MySQLi o PDO per la connessione
    es di Connessione DB con mysqli:
    new mysqli($db_host, $db_user, $db_password, $db_name);
    se invece usi il comando mysql_connect($db_host, $db_user, $db_password); non funzionerà

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

    Predefinito

    Citazione Originalmente inviato da yakamoz Visualizza messaggio
    intende dire che le vecchie funzioni per collegarsi al DB non sono più valide
    ma che devi usare MySQLi o PDO per la connessione
    es di Connessione DB con mysqli:
    new mysqli($db_host, $db_user, $db_password, $db_name);
    se invece usi il comando mysql_connect($db_host, $db_user, $db_password); non funzionerà
    Quasi esatto.. Su un hosting condiviso si mantiene la compatibilità finché si può..
    Il suo errore non sta sulla libreria usata ma nel codice che svolge operazioni con il database..
    Dunque serve abilitare l'errore di MySQL (mysql_error o mysqli_error a seconda della libreria usata) per tutte le operazioni (la connessione al database, SELECT , INSERT, UPDATE, DELETE ecc..) http://php.net/manual/en/mysqli.error.php in alcune circostanze serve verificare l'output prodotto (le operazioni query o tutte le variabili).. http://php.net/manual/en/function.var-dump.php così almeno si riesce a vedere se qualche variabile è vuota e non viene segnalata da mysql_error ecc..
    A tal proposito si ricorda che entro la metà di marzo si avrà php 5.3, 5.6 e 7.1 solamente.. http://forum.it.altervista.org/novit...ml#post1374167
    Ovviamente il problema è dovuto dal l'upgrade a MySQL 5.6 e non alla versione di php.
    Ultima modifica di darbula : 27-02-2018 alle ore 14.26.57

  9. #9
    fper non è connesso Utente giovane
    Data registrazione
    02-12-2002
    Messaggi
    56

    Predefinito

    Citazione Originalmente inviato da yakamoz Visualizza messaggio
    intende dire che le vecchie funzioni per collegarsi al DB non sono più valide
    ma che devi usare MySQLi o PDO per la connessione
    es di Connessione DB con mysqli:
    new mysqli($db_host, $db_user, $db_password, $db_name);
    se invece usi il comando mysql_connect($db_host, $db_user, $db_password); non funzionerà
    Ho questa pagina PHP che richiamo da altre pagine prima di lavorare su specifiche tabelle del database:

    <?PHP
    // these variables are needed to connect to the database
    $server = "localhost"; // often localhost
    $username = "mionome"; // your MySQL server username
    $password = "miapassword"; // your MySQL server password
    $database = "my_mionome"; // if you fill in nothing database 'members' will be used.
    $conn = mysql_connect($server,$username,$password) or die ("Could not connect MySQL");
    mysql_select_db($database,$conn) or die ("Could not open database");
    ?>

    L'ho cambiata così ma non va, mi da "Could not open database":

    <?PHP
    // these variables are needed to connect to the database
    $server = "localhost"; // often localhost
    $username = "mionome"; // your MySQL server username
    $password = "miapassword"; // your MySQL server password
    $database = "my_mionome"; // if you fill in nothing database 'members' will be used.
    $conn = new mysqli($server,$username,$password) or die ("Could not connect MySQL");
    mysql_select_db($database,$conn) or die ("Could not open database");
    ?>
    Report di pesca in mare.
    http://fper.altervista.org/pescare

    Sito ospitato (poesie di un autore emergente)
    http://fper.altervista.org/ftib

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

    Predefinito

    Non mischiare mysqli con mysql altrimenti vanifichi i tuoi sforzi..
    Con mysqli_connect http://php.net/manual/en/mysqli.construct.php puoi aggiungere il 4 parametro database direttamente che è my_fper oppure nel caso di più database (su altervista c'è ne soltanto uno e non modificabile) l'omonima funzione mysqli http://php.net/manual/en/mysqli.select-db.php presta attenzione agli argomenti poiché in mysqli $conn è il primo parametro e non l'ultimo come nella funzione deprecata mysql.
    Per utilizzare mysqli_error stile orientato ad oggetti si deve usare
    Codice:
    /*
     * This is the "official" OO way to do it,
     * BUT $connect_error was broken until PHP 5.2.9 and 5.3.0.
    oppure utilizzare lo stile procedurale (solo per mysqli_errno e mysqli_error).
    Cmq.. Il tuo errore sono le stringhe vuote... Prova sul vecchio codice (deprecato MySQL) e se ti va proviamo a modificarlo "insieme"
    Ultima modifica di darbula : 27-02-2018 alle ore 14.56.35

  11. #11
    fper non è connesso Utente giovane
    Data registrazione
    02-12-2002
    Messaggi
    56

    Predefinito

    Innanzitutto ti ringrazio per la disponibilità.

    Questo è il codice PHP della pagina di inserimento dati (non sempre tutti i campi vengono inseriti):

    <?php
    include("../login/config.php");
    print "
    <html>
    <head>
    <body>
    <form name="form1" method="post" action="inseriscifatturaok.php">
    USERNAME <input type="text" name="username">
    PASSWORD <input type="text" name="password">
    <br><br>
    NOTA SPESE <input type="radio" name="tipodocumento" value="notaspese">
    FATTURA <input type="radio" name="tipodocumento" value="fattura">
    NUMERO <input name="numero" type="text">
    DATA gg/mm/aa <input name="datetime" type="text"><br><br>
    RIF. NOTA SPESE N. <input name="rifnotaspese" type="text"><br><br>
    DESCRIZIONE1 <input name="descrizione1" type="text" size="40">
    QUANTITA1 <input name="quantita1" type="text" size="3">
    IVA1 <input name="iva1" type="text" size="3">
    IMPONIBILE1 <input name="imponibile1" type="text" size="8"><br>
    DESCRIZIONE2 <input name="descrizione2" type="text" size="40">
    QUANTITA2 <input name="quantita2" type="text" size="3">
    IVA2 <input name="iva2" type="text" size="3">
    IMPONIBILE2 <input name="imponibile2" type="text" size="8"><br>
    DESCRIZIONE3 <input name="descrizione3" type="text" size="40">
    QUANTITA3 <input name="quantita3" type="text" size="3">
    IVA3 <input name="iva3" type="text" size="3">
    IMPONIBILE3 <input name="imponibile3" type="text" size="8"><br>
    DESCRIZIONE4 <input name="descrizione4" type="text" size="40">
    QUANTITA4 <input name="quantita4" type="text" size="3">
    IVA4 <input name="iva4" type="text" size="3">
    IMPONIBILE4 <input name="imponibile4" type="text" size="8"><br>
    DESCRIZIONE5 <input name="descrizione5" type="text" size="40">
    QUANTITA5 <input name="quantita5" type="text" size="3">
    IVA5 <input name="iva5" type="text" size="3">
    IMPONIBILE5 <input name="imponibile5" type="text" size="8"><br>
    DESCRIZIONE6 <input name="descrizione6" type="text" size="40">
    QUANTITA6 <input name="quantita6" type="text" size="3">
    IVA6 <input name="iva6" type="text" size="3">
    IMPONIBILE6 <input name="imponibile6" type="text" size="8"><br>
    DESCRIZIONE7 <input name="descrizione7" type="text" size="40">
    QUANTITA7 <input name="quantita7" type="text" size="3">
    IVA7 <input name="iva7" type="text" size="3">
    IMPONIBILE7 <input name="imponibile7" type="text" size="8"><br>
    DESCRIZIONE8 <input name="descrizione8" type="text" size="40">
    QUANTITA8 <input name="quantita8" type="text" size="3">
    IVA8 <input name="iva8" type="text" size="3">
    IMPONIBILE8 <input name="imponibile8" type="text" size="8"><br>
    DESCRIZIONE9 <input name="descrizione9" type="text" size="40">
    QUANTITA9 <input name="quantita9" type="text" size="3">
    IVA9 <input name="iva9" type="text" size="3">
    IMPONIBILE9 <input name="imponibile9" type="text" size="8"><br>
    <br>
    TOTALE SPESE ESENTI IVA <input name="spese_esenti" type="text" size="8"><br>
    <br>
    PAGATA <input type="radio" name="pagata" value="pagata">
    INSOLUTA <input type="radio" name="pagata" value="insoluta">
    TIPO PAGAMENTO <select name="tipopagamento">
    <option value=""></option>
    <option value="bonifico">bonifico</option>
    <option value="assegno">assegno</option>
    <option value="contanti">contanti</option>
    </select>
    <br><br>
    PRIVATO SI <input type="radio" name="privato" value="si">
    PRIVATO NO <input type="radio" name="privato" value="no">

    <input type="submit" value="invia">
    </form>
    </body>
    </html>";
    ?>

    e questo è il codice della pagina che riceve i dati e che li inserisce nel database MYSQL:

    <?php
    include("../login/config.php");
    $username = $_POST["username"];
    $password = $_POST["password"];
    $tipodocumento = $_POST["tipodocumento"];
    $numero = $_POST["numero"];
    $datetime = $_POST["datetime"];
    $rifnotaspese = $_POST["rifnotaspese"];
    $descrizione1 = $_POST["descrizione1"];
    $quantita1 = $_POST["quantita1"];
    $iva1 = $_POST["iva1"];
    $imponibile1 = $_POST["imponibile1"]*100;
    $descrizione2 = $_POST["descrizione2"];
    $quantita2 = $_POST["quantita2"];
    $iva2 = $_POST["iva2"];
    $imponibile2 = $_POST["imponibile2"]*100;
    $descrizione3 = $_POST["descrizione3"];
    $quantita3 = $_POST["quantita3"];
    $iva3 = $_POST["iva3"];
    $imponibile3 = $_POST["imponibile3"]*100;
    $descrizione4 = $_POST["descrizione4"];
    $quantita4 = $_POST["quantita4"];
    $iva4 = $_POST["iva4"];
    $imponibile4 = $_POST["imponibile4"]*100;
    $descrizione5 = $_POST["descrizione5"];
    $quantita5 = $_POST["quantita5"];
    $iva5 = $_POST["iva5"];
    $imponibile5 = $_POST["imponibile5"]*100;
    $descrizione6 = $_POST["descrizione6"];
    $quantita6 = $_POST["quantita6"];
    $iva6 = $_POST["iva6"];
    $imponibile6 = $_POST["imponibile6"]*100;
    $descrizione7 = $_POST["descrizione7"];
    $quantita7 = $_POST["quantita7"];
    $iva7 = $_POST["iva7"];
    $imponibile7 = $_POST["imponibile7"]*100;
    $descrizione8= $_POST["descrizione8"];
    $quantita8= $_POST["quantita8"];
    $iva8= $_POST["iva8"];
    $imponibile8= $_POST["imponibile8"]*100;
    $descrizione9= $_POST["descrizione9"];
    $quantita9= $_POST["quantita9"];
    $iva9= $_POST["iva9"];
    $imponibile9= $_POST["imponibile9"]*100;
    $pagata = $_POST["pagata"];
    $tipopagamento = $_POST["tipopagamento"];
    $privato = $_POST["privato"];
    $imponibile = ($imponibile1+$imponibile2+$imponibile3+$imponibil e4+$imponibile5+$imponibile6+$imponibile7+$imponib ile8+$imponibile9);
    $imponibileenpacl=$imponibile;
    $aliquotaenpacl=4;
    $enpacl=$imponibileenpacl*$aliquotaenpacl/100;
    $imponibileiva=$imponibileenpacl+$enpacl;
    $aliquotaiva=22;
    $iva=$imponibileiva*$aliquotaiva/100;
    $spese_esenti= $_POST["spese_esenti"]*100;
    $totale=$imponibileenpacl+$enpacl+$iva+$spese_esen ti;
    $imponibileritenuta=$imponibileenpacl;
    if ($privato == "si"){
    $aliquotaritenuta=0;
    }
    else {
    $aliquotaritenuta=20;
    }
    $ritenuta=$imponibileritenuta*$aliquotaritenuta/100;
    $netto=$totale-$ritenuta;
    //create the account
    $query = "INSERT INTO fatture VALUES('','$username','$password','$tipodocumento' ,'$numero','$datetime','$rifnotaspese','$descrizio ne1','$quantita1','$iva1','$imponibile1','$descriz ione2','$quantita2','$iva2','$imponibile2','$descr izione3','$quantita3','$iva3','$imponibile3','$des crizione4','$quantita4','$iva4','$imponibile4','$d escrizione5','$quantita5','$iva5','$imponibile5',' $descrizione6','$quantita6','$iva6','$imponibile6' ,'$descrizione7','$quantita7','$iva7','$imponibile 7','$descrizione8','$quantita8','$iva8','$imponibi le8','$descrizione9','$quantita9','$iva9','$imponi bile9','$imponibile','$enpacl','$imponibileiva','$ iva','$spese_esenti','$totale','$ritenuta','$netto ','$pagata','$tipopagamento')";
    $result = mysql_query($query);
    $query2 = "UPDATE fatture
    SET pagata='pagata', tipopagamento='$tipopagamento'
    where username='$username' and password='$password' and tipodocumento='notaspese' and numero='$rifnotaspese'";
    $result2 = mysql_query($query2);
    //check it it was succesfull
    if ($result == 1){header("location: ..\invio_fattura.php?username1=$username&password1 =$password&numero=$numero");}
    ?>

    UPDATE funziona ma INSERT INTO no quindi non credo sia un problema di connessione al database
    Report di pesca in mare.
    http://fper.altervista.org/pescare

    Sito ospitato (poesie di un autore emergente)
    http://fper.altervista.org/ftib

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

    Predefinito

    $datetime è un valore di GG/MM/YY ma che tipo è in MySQL (da phpmyadmin clicca la tabella fattura e poi clicca su struttura e indicami il tipo che vedi lì)? (DATETIME) o nel tuo caso DATE YYYY-MM-DD solo nel formato inglese..
    Inizialmente la INSERT INTO ha un valore vuoto ... Puoi elencare la struttura (i campi) della tabella fattura?
    Poi nel form html conto 49 campi mentre nella insert sono 52 compreso il valore vuoto iniziale.
    C'è qualche errore di sintassi alcune variabili sono separata da uno spazio bianco..
    Fai il backup del file php e modifica il secondo file con i consigli appena espressi..
    Ultima modifica di darbula : 27-02-2018 alle ore 17.22.01

  13. #13
    fper non è connesso Utente giovane
    Data registrazione
    02-12-2002
    Messaggi
    56

    Predefinito

    Il primo campo è "id" automatico

    il primo campo è "id" - tipo int(11) - autoincrement
    il campo dove va a finire $datatime si chiama "data" - tipo varchar(10)
    Report di pesca in mare.
    http://fper.altervista.org/pescare

    Sito ospitato (poesie di un autore emergente)
    http://fper.altervista.org/ftib

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

    Predefinito

    Ciao, come ho detto anche prima ci sono diverse sviste .. Variabili separate da uno spazio bianco e nel form sono 49 mentre in INSERT INTO sono 52.. modifica solo $result e aggiungi mysql_error come vedi qui http://www.phpnews.it/corsi/corso-ph...ento-dei-dati/ dopo questo passaggio adesso potrai vedere gli errori... Se vedi ad sempio #1366 - Incorrect integer value: '' for column 'id' at row 1 da una colonna con auto incremento già presente o l'errore 1136 per auto increment non ancora definito significa che MySQL 5.6 non accetta valori diversi da interi dal momento che per il database è un campo int..
    Segue un esempio di query (che ti fa vedere come si inserisce un intero in php MySQL)
    $query = "INSERT INTO tabella VALUES(0)";
    vedi gli interi sono senza apici..ovviamente devi sostituire la stringa vuota in un int nella tua query.
    Se id è NOT NULL (da phpmyadmin clicca la tabella fattura vai su struttura e controlli che non ci sia il flag su NULL) allora puoi utilizzare NULL nella query oppure 0 https://dev.mysql.com/doc/refman/5.7...increment.html
    Mi contatti in privato e mi spieghi la logica del form html.. (Non ti prometto nulla ma potrei migliorare il tuo codice).
    Ultima modifica di darbula : 28-02-2018 alle ore 03.01.16

  15. #15
    fper non è connesso Utente giovane
    Data registrazione
    02-12-2002
    Messaggi
    56

    Predefinito

    Dopo averti risposto in privato ho seguito il tuo consiglio inserendo 0 nel primo campo 'id' che era vuoto ed è andato tutto per il meglio.
    Veramente grazie.
    Fabio
    Report di pesca in mare.
    http://fper.altervista.org/pescare

    Sito ospitato (poesie di un autore emergente)
    http://fper.altervista.org/ftib

Regole di scrittura

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