Visualizzazione risultati 1 fino 15 di 15
Like Tree1Likes
  • 1 Post By GraphOGLRisorse

Discussione: Aiuto creazione codice php raccoglitore dati da db

  1. #1
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    37

    Predefinito Aiuto creazione codice php raccoglitore dati da db

    Buongiorno,
    Ho la necessità di estrapolare n array per quanti sono i campi del mio DB, questo perchè vorrei passarli dopo alla funzione json_encode($array); per poi farli leggere ad una pagina java script e creare 3 o più grafici sovrapposti.
    Potete darmi una mano intanto a far funzionare la pagina Raccoglitore_dati.php per favore?
    ps:Avevamo affrontato l'argomento ma per un inserimento alla volta dei dati nel db, questa pagina invece fa il contrario , legge dal db più righe e le mette in array tanti quanti sono i campi(indicati nela query) del DB.
    Scusate i miei errori che scopro strada facendo ed aggiornamenti continui della pagina.
    Grazie mille in anticipo.

    Codice PHP:
    <?php
    // Array che conterrà i dati del vostro database
    $Dati_raccolti = array();
    // Codice che raccoglie i vari dati dal vostro database. I dati vengono inseriti nell'apposito array creato prima
    // Trasformo l'array in una stringa
    error_reporting(E_ALL);

    $USERNAME = "leonardomoretti";
    $PASSWORD = null;
    $DBSERVER= "localhost";
    $DBNAME = "my_leonardomoretti";

    if(!(
    $db_connection = new mysqli($DBTIME, DEVICE, DATA1, DATA2)SERVER, $USERNAME, $PASSWORD, $DBNAME)))
    die(
    'Connect Error (' . $db_connection->connect_errno . ') '. $db_connection->connect_error);

    if(!(
    $db_selection = $db_connection->select_db($DBNAME)))
    die (
    "Errore nella selezione del DB.");

    $query = "SELECT `TIME`, `DEVICE`, `DATA1`, `DATA2` FROM `MEASUREMENTS` WHERE `DATA`= "2020-08-04" ";
    //echo $query;
    if($stmt = $db_connection->prepare($query)){
    $result = $stmt->execute();
    while(
    $row = $stmt->fetch(PDO::FETCH_ASSOC)){
    echo
    '
    '
    . $row['TIME'].' '. $row['DEVICE'].' ' . $row['DATA1'] . ' ' . $row['DATA2'] . '
    '
    ;
    }
    }
    else {
    echo
    "ERROR: Could not able to execute $query. " . mysqli_error($db_connection);
    }


    $db_connection->close();

    //$Stringa_dati_raccolti = json_encode($array);
    // Quando questo file verrà chiamato dovrà restituire la stringa
    //echo $Stringa_dati_raccolti;

    ?>
    ORA LA QUERY E' CORRETTA E MOSTRA IL RISULTATO GIUSTO SU PHPADMIN
    Però c'è questo errore.
    Parse error: syntax error, unexpected '2020' (T_LNUMBER) in /membri/leonardomoretti/Raccoglitore_dati.php on line 19
    Ultima modifica di leonardomoretti : 21-08-2020 alle ore 13.07.15

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

    Predefinito

    Niente PDO se inizializzi mysqli. Cerca esempi con mysqli.
    Se esiste la colonna di nome DATA nella tabella di nome MEASUREMENTS è di tipo DATE (yyyy-mm-dd entra in phpmyadmin dopo aver selezionato il tuo database cerca la tabella e poi clicca su struttura per conoscere di che tipo sarà DATA) allora va racchiuso in apici singoli nel where es. WHERE DATA='2020-08-04' nel gergo di mysql si chiama stringa letterale https://dev.mysql.com/doc/refman/8.0...-literals.html
    Comunque in base al tuo codice in altra discussione a priori non è il modo corretto di gestire numeri in virgola mobile poiché potrebbero differire da php a mysql e json.
    Ho detto apici singoli ' non apici doppi ".
    Lezione n2 tipo stringa php.
    Codice PHP:
    <?php
    $string1
    = "stringa"; //output stringa
    $string2 = 'stringa'; //output stringa
    $string3 = "'stringa'"; //output 'stringa'
    $string4 = "\"stringa\""; //output "stringa"
    $string5 = "'$string1'"; //output 'stringa'
    $string6 = '\'stringa\''; //output 'stringa'

    ?>
    A te occorre una stringa delimitata con apici doppi e nel where in apici singoli , cioè il terzo o il quinto esempio mentre se si utilizza il carattere apice doppio in una stringa php delimitata da apice doppio deve essere preceduta dal backslash è un carattere di escape che distingue la presenza di un apice doppio come output altrimenti è un delimitatore php.
    Abbiamo appena visto che il delimitatore è quel carattere alle due estremità di una stringa o comunque che inizia e finisce con quel carattere ma può avere anche l'operatore di concatenazione stringa e cioè $string = 'stringa'.' come stai?'; //output stringa come stai?
    Ultima modifica di darbula : 21-08-2020 alle ore 14.02.41

  3. #3
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    37

    Predefinito

    Allora procedo per gradi:
    ho apportato le seguenti modifiche agli apici delle stringhe, per il momento ho commentato tutto quello che viene dopo la query, ho usato quindi soltanto apici singoli sulle stringhe mentre sul where ho tolto tutto. al risultato che mi da echo $query; sembrerebbe che abbiamo fatto bene:
    Codice PHP:
    $USERNAME = 'leonardomoretti';
    $PASSWORD = null;
    $DBSERVER= 'localhost';
    $DBNAME = 'my_leonardomoretti';
    e la query:
    Codice PHP:
    $query = 'SELECT (TIME, DEVICE, DATA1, DATA2) FROM MEASUREMENTS WHERE DATA=2020-08-04';
    SELECT (TIME, DEVICE, DATA1, DATA2) FROM MEASUREMENTS WHERE DATA=2020-08-04
    ho controllato il formato della data sul db ed è corretto (yyy-mm-dd) come è scritto nella query, il messaggio di errore che avevo era dovuto alla confusione degli apici doppi e singoli dove non andavano messi !
    Ora devo andarmi a cercare come usare il metodo mysqli.
    Ti tengo informato se ho altri problemi grazie mille.

  4. #4
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,003

    Predefinito

    Salve,
    si la query è giusta in parte, ha dimenticato gli apici per la data, non è esattamente come ha esposto darbula, comnuqe usando statment, l'impostazione più appropiata è questa:
    Codice PHP:
    <?php
    // Trasformo l'array in una stringa
    error_reporting(E_ALL);

    $USERNAME = "leonardomoretti";
    $PASSWORD = null;
    $DBSERVER= "localhost";
    $DBNAME = "my_leonardomoretti";

    $data = "2020-08-04"; //date("Y-m-d);

    if(!($db_connection = new mysqli(DBSERVER, USERNAME, PASSWORD, DBNAME);
    die(
    'Connect Error (' . $db_connection->connect_errno . ') '. $db_connection->connect_error);

    if(!(
    $db_selection = $db_connection->select_db($DBNAME)))
    die(
    "Errore nella selezione del DB.");

    $query = "SELECT * FROM MEASUREMENTS WHERE DATA=?";
    //echo $query;
    if($stmt = $db_connection->prepare($query)){
    $stmt->bind_param("s", $data);
    $result = $stmt->execute();
    $stmt->close();
    while(
    $row = $result->fetch_assoc()){
    echo
    ' '. $row['TIME'].' '. $row['DEVICE'].' '. $row['DATA1'] .' '. $row['DATA2'] .'<br>';
    }
    }
    else {
    echo
    "ERROR: Could not able to execute" . $query ." ". mysqli_error($db_connection);
    }


    $db_connection->close();
    ?>
    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 21-08-2020 alle ore 16.05.38
    mzanella likes this.

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

    Predefinito

    Devi semplicemente usare questa funzione https://www.php.net/manual/en/mysqli...etch-assoc.php nello stile OOP la connessione viene valorizzata da $mysqli quindi adeguati al tuo contesto.
    Va scritta in questo modo con apice singolo esplicito cioè l'output della stringa da passare a mysql... se è una stringa letterale mysql avrà almeno il carattere apice singolo.
    Codice PHP:
    $my_var = '2020-08-04';
    $query = "SELECT (TIME, DEVICE, DATA1, DATA2) FROM MEASUREMENTS WHERE DATA='2020-08-04'"; //output SELECT (TIME, DEVICE, DATA1, DATA2) FROM MEASUREMENTS WHERE DATA='2020-08-04'
    //con valore variabile
    $query = "SELECT (TIME, DEVICE, DATA1, DATA2) FROM MEASUREMENTS WHERE DATA='$my_var'"; //output SELECT (TIME, DEVICE, DATA1, DATA2) FROM MEASUREMENTS WHERE DATA='2020-08-04'
    Per favore tienimi aggiornato.
    @Alemoppo ho aggiunto un nuovo messaggio per forzare la lettura del messaggio verso chi aveva bisogno di aiuto (ne sono consapevole che comunque non è consentito come da regolamento ma sia tu che altervista condividiamo lo stesso obiettivo.. essere di aiuto).
    Le faccio le mie scuse non volevo creare disagio.
    @GraphOGLRisorse ho letto Adesso il tuo messaggio, scusami che nesso c'è tra l'interpretazione di stringa php senza usare bind_param o comunque con bind_param ma se la stringa in php si può solo scrivere in quel modo? La mia risposta è pienamente corretta.
    Figurati @GraphOGLRisorse ti vedo mettere ovunque il tuo impegno scusami tu non volevo le tue scuse ma più che altro si deve sempre iniziare dalle basi php è i tipi primitivi tra cui 4 scalari rientrano in essa.
    Ultima modifica di darbula : 21-08-2020 alle ore 15.37.43

  6. #6
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,003

    Predefinito

    Scusami darbula, forse mi sono espresso male prima.

    Io non volevo dare a intendere che ciò che lei ha scritto è sbagliato, ma che ciò che ha scritto leonardomoretti, non era corretto e non corrispodeva a quanto lei ha espresso.

    Cordiali saluti.

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

    Predefinito

    Mi sembra ci sia qualcosa che non va in questo codice
    Codice PHP:
    $stmt->bind_param("s", $data);
    $result = $stmt->execute() ? $stmt->get_result() : false;
    $stmt->close();
    while(
    $row = $stmt->fetch_assoc()){
    echo
    ' '. $row['TIME'].' '. $row['DEVICE'].' '. $row['DATA1'] .' '. $row['DATA2'] .'<br>';
    }
    Immagino che intendessi invocare il metodo fetch_assoc sull'oggetto $result. In questo caso attenzione al type juggling, c'è il rischio di cercare di invocare un metodo su un valore booleano. Sempre a tale proposito un controllo sull'esito della query non guasta.

    I suggerimenti che do più spesso:


  8. #8
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    37

    Predefinito

    Buonasera,
    Ricapitolando, ho cercato di non tralasciare nulla dei vostri codici (per Barbula devo ancora provare il link al codice che mi hai postato per ora ho messo la query come volevi tu !!), ho provato entrambi nel caso di Barbula, il codice e l'errore sono i seguenti:

    Ps:per la parte di stampa ho usato un codice funzionante già usato per stampate il db su una tabella.

    Codice PHP:
    <?php
    // Array che conterrà i dati del vostro database
    $Dati_raccolti = array();
    // Codice che raccoglie i vari dati dal vostro database. I dati vengono inseriti nell'apposito array creato prima
    // Trasformo l'array in una stringa
    error_reporting(E_ALL);

    $USERNAME = 'leonardomoretti';
    $PASSWORD = null;
    $DBSERVER= 'localhost';
    $DBNAME = 'my_leonardomoretti';

    if(!(
    $db_connection = new mysqli($DBSERVER, $USERNAME, $PASSWORD, $DBNAME)))
    die(
    'Connect Error (' . $db_connection->connect_errno . ') '. $db_connection->connect_error);

    if(!(
    $db_selection = $db_connection->select_db($DBNAME)))
    die (
    "Errore nella selezione del DB.");
    $my_var = '2020-08-04';
    $query = "SELECT (TIME, DEVICE, DATA1, DATA2) FROM MEASUREMENTS WHERE DATA='$my_var'";


    while(
    $cicle=$query->fetch_array(MYSQLI_ASSOC)){
    echo
    "<tr>
    <td>"
    .$cicle['TIME']."</td>
    <td>"
    .$cicle['DEVICE']."</td>
    <td>"
    .$cicle['DATA1']."</td>
    <td>"
    .$cicle['DATA2']."</td>
    </tr>"
    ;
    }

    $query->close();
    $db_connection->close();

    ?>
    Fatal error: Call to a member function fetch_array() on string in /membri/leonardomoretti/Raccoglitore_dati1.php on line 22
    A RIGA 22 C'E QUESTO:while($cicle=$query->fetch_array(MYSQLI_ASSOC)){
    STRANO PERCHE' IN UN ALTRO CONTESTO IL CODICE FUNZIONAVA !!!
    Invece per ciò che concerne l'altro codice di GraphOGLRisorse con lo stantment, c'erano degli errori dovuti alla fretta nella scrittura:
    Codice PHP:
    if(!($db_connection = new mysqli(DBSERVER, USERNAME, PASSWORD, DBNAME);
    die(
    'Connect Error (' . $db_connection->connect_errno . ') '. $db_connection->connect_error);
    Codice PHP:
    <?php
    // Trasformo l'array in una stringa
    error_reporting(E_ALL);

    $USERNAME = "leonardomoretti";
    $PASSWORD = null;
    $DBSERVER= "localhost";
    $DBNAME = "my_leonardomoretti";

    $data = "2020-08-04"; //date("Y-m-d);

    if(!($db_connection = new mysqli($DBSERVER, $USERNAME, $PASSWORD, $DBNAME)))
    die(
    'Connect Error (' . $db_connection->connect_errno . ') '. $db_connection->connect_error);

    if(!(
    $db_selection = $db_connection->select_db($DBNAME)))
    die(
    "Errore nella selezione del DB.");

    $query = "SELECT * FROM MEASUREMENTS WHERE DATA=?";
    //echo $query;
    if($stmt = $db_connection->prepare($query)){
    $stmt->bind_param("s", $data);
    $result = $stmt->execute() ? $stmt->get_result() : false;
    $stmt->close();
    while(
    $row = $stmt->fetch_assoc()){
    echo
    ' '. $row['TIME'].' '. $row['DEVICE'].' '. $row['DATA1'] .' '. $row['DATA2'] .'<br>';
    }
    }
    else {
    echo
    "ERROR: Could not able to execute" . $query ." ". mysqli_error($db_connection);
    }


    $db_connection->close();
    ?>

    Fatal error: Call to undefined method mysqli_stmt::fetch_assoc() in /membri/leonardomoretti/Raccoglitore_dati2.php on line 24

    ossia:
    while($row = $stmt->fetch_assoc()){
    [/PHP]

    Ditemi voi quale delle soluzioni seguire, portare avanti tutti e due i codici è un po più impegnativo !!!
    Ultima modifica di leonardomoretti : 21-08-2020 alle ore 16.41.56

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

    Predefinito

    Se conosci i tipi primitivi puoi almeno creare codice e ovviamente usi Prepared Statements mentre se non li conosci non creare mai alcun codice (ti stai preparando a correre ma solamente che non hai mai corso in vita tua quindi lascia stare).
    Ritengo se ti forniamo noi il codice non potrai mai essere consapevole di cosa stai creando per lo più possiamo consigliarti libro o un percorso di formazione.
    $db_connection è la connessione poi ci sarà mysqli_query ammettiamo sia racchiusa in una variabile di nome $fantastico poi $rows_var = $fantastico->fetch_assoc(); sta scritto tutto nel link fornito in precedenza.
    Hai dimenticato $fantastico = myqli_query($db_connection, $query);
    Ultima modifica di darbula : 21-08-2020 alle ore 17.21.54

  10. #10
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,003

    Predefinito

    Nel primo manca la gestione della quey. $query è la varaibile con la stringa della query e non ha senso usarla per $query->fetch_array(MYSQLI_ASSOC)
    Codice PHP:
    if($result=$db_selction->query($query)) {
    while(
    $cicle=$result->fetch_array(MYSQLI_ASSOC)){
    echo
    "<tr>
    <td>"
    .$cicle['TIME']."</td>
    <td>"
    .$cicle['DEVICE']."</td>
    <td>"
    .$cicle['DATA1']."</td>
    <td>"
    .$cicle['DATA2']."</td>
    </tr>"
    ;
    }
    $result->free();
    }
    Per il secondo:
    Codice PHP:
    while($row = $result->fetch_assoc())
    Scusi darbula, non avevo visualizzato il suo messaggio.

    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 21-08-2020 alle ore 17.15.38

  11. #11
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    37

    Predefinito

    Darbula,
    Si nei prossimi giorni proverò a far funzionare anche il tuo codice.
    Per adesso ho tolto gli errori di battitura di GraphOGLRisorse.
    L'aquilotto non spiccherà mai il volo totalmente da solo !!!!!! :)
    Hai ragione che sarebbe meglio prendere un libro e studiarselo tutto ma credo che se farei così ricorderei poco di quello che ho letto, meglio cercare di far andare la teoria con la pratica insieme, almeno questo è per il mio modo di essere fatto.

    Codice PHP:
    while($row = $result->fetch_assoc()){

    AL POSTO DI:
    while(
    $row = $stmt->fetch(PDO::FETCH_ASSOC)){
    adesso il codice va:
    19:24:55 device01 31.6 55
    19:25:53 device01 30 50
    19:28:37 device01 29 50
    19:32:06 device01 28 7
    19:32:59 device01 28.7 60
    19:45:43 device01 30 55
    Ultima modifica di leonardomoretti : 21-08-2020 alle ore 17.22.59

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

    Predefinito

    Un'altra chicca che chi non avrà tempo di leggere non conosce, forzare la lettura da sinistra verso destra
    Codice PHP:
    //Da php 5.4 o superiore
    while($row = ($result->fetch_assoc())) {
    //code
    }
    https://www.php.net/manual/en/migrat...compatible.php solo visivamente per i tuoi occhi poiché l'inizio è solo la base.

  13. #13
    leonardomoretti non è connesso Utente giovane
    Data registrazione
    22-07-2020
    Messaggi
    37

    Predefinito

    Salve darbula,
    prima di tutto io non ho mai detto di non avere tempo per leggere il libro di php,ogniuno di noi e diverso anche come apprendimento.
    Secondo non capisco tutto questo suo sarcasmo represso , non so per quale motivo !!
    Mi sono presentato in punta dei piedi su questo forum e lo faccio in qualsiasi occasione anche in altri contesti.
    Chiedo sempre le cose in un modo umile, non mi sono mai vantato di niente convinto che in fondo c'è sempre qualcuno più bravo di noi, quindi inutile vantarsi di qualche cosa nella vita !!!
    Ma la cosa che fa male alle persone sensibili sa che cosa è sig. darbula? sono i calci che ci date e tanta è la sua arroganza che neanche se ne accorge più.
    Io in fondo sto facendo questo per Hobby e non sto chiedendo un lavoro di questo tipo, anche se rimango un informatico di professione, e se ho voglia di imparare qualche cosa che nella vita le persone egocentriche e classiste come lei mi hanno negato senza pietà e perché sono incuriosito ed ho bisogno di riacquistare un po di fiducia nelle mie capacità;vorrei riprendermi, nel mi piccolo, di un qualcosa che quelli come lei mi hanno negato.
    Quindi in futuro, non solo con me, cerchi di essere un po più delicato.

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

    Predefinito

    Signor @leonardomoretti lei forse a mal interpretato il mio ultimo messaggio ove detto con altre parole è difficile che un programmatore da esperto (nemmeno nei CMS più diffusi si vede la forzatura di lettura da sinistra a destra) a meno esperto sappia la preferenza del parser php per metodo o proprietà (questa indica che non ci sono mai limiti per imparare anche se legge o segue un percorso di formazione).
    Io in prima persona sono in prima linea per dare aiuto e non altro. Solo perché le faccio notare i suoi errori non sono il malvagio di turno anzi io spero che lei si applichi.
    Detto molto chiaramente non era sarcasmo ma propriamente ciò che ho scritto, di nuovo legga la mia spiegazione precedente.
    Ultima modifica di darbula : 21-08-2020 alle ore 23.46.48

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

    Predefinito

    Suvvia, non bisticciate.
    Peace 'n' love.

    Tanto per sdrammatizzare un paio di curiosità :
    L'aquilotto non spiccherà mai il volo totalmente da solo !!!!!! :)
    Mamma aquila non è molto materna, quando decide che è ora prende il pulcino e lo lancia giù dal nido. Se impara a volare entro qualche secondo bene, altrimenti splat. Fortunatamente con PHP possiamo prendercela un po' più comoda!

    Quanto a un eventuale testo da studiare, a mio parere, PHP ha delle peculiarità tali da non renderlo molto adatto a questo tipo di approccio. Non solo per la frequenza di rilascio delle versioni, ciascuna delle quali rende a volte deprecato o non più funzionante codice che prima andava benissimo, e obsoleti i testi scritti appena un paio d'anni prima, ma anche per l'inconsistenza delle definizioni delle proprie funzioni di libreria e per il fatto che nella pratica viene spesso eseguito all'Interno di un web server, dove il contesto può influenzare significativamente l'esecuzione di un codice (e un testo su PHP non può certo divagare sui dettagli di un web server...).
    Insomma, quasi quasi meglio un approccio più alla garibaldina, meglio ancora se prima di approcciare PHP uno conosce già linguaggi più strutturati.

Regole di scrittura

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