Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Trasformare un array PHP in un array compatibile con JavaScript

    Buongiorno a tutti .
    scusatemi se approfitto della Vostra gentilezza. Mi sto avvicinando alla programmazione PHP e Java, ma sono alle prime armi . In particolate ho un problema che non riesco a risolvere relativamente al passaggio di un'arrey da PHP a Javascript. l'array di partenza contiene dati del tipo new Date(2023, 10,11), new Date(2023, 11,10) , ecc che convertiti in un'array javacsript dovrebbero servire come data points per richiamare una libreria Canvas che produce dei grafici. Il problema banale è che io converto la schiera di partenza PHP in una schiera di arrivo Javascript usando l'istruzione seguente : dataPoints=(<?php echo json_encode($dataPoints, JSON_HEX_TAG);?>);
    ma la schiera che ottengo ha gli elementi di partenza tra " " ovvero new Date(2023, 10,11) diventa "new Date(2023, 10,11)" , e così via . Il chè non mi va bene per le elaborazioni che devo richiedere alla libreria Canvas . C'è modo di riavere il dato uguale a quello di partenza ?
    Grazie
    Beppe

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,373
    PHP ha un'area dedicata: sposto la discussione.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,471
    Ciao, posta il codice PHP con cui generi l'array, ho idea che stai racchiudendo le istruzioni tra apici, il che le fa diventare delle stringhe e non vengono interpretate.
    Inoltre la classe che gestisce le date in PHP è DateTime, non Date.

  4. #4
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Ciao, posta il codice PHP con cui generi l'array, ho idea che stai racchiudendo le istruzioni tra apici, il che le fa diventare delle stringhe e non vengono interpretate.
    Inoltre la classe che gestisce le date in PHP � DateTime, non Date.
    Ciao
    l'algoritmo PHP mi genera una schiera che contiene un'array di nome $dataPoints cos� visualizzato da

    Print_r

    Array( [0] => new Date(2023,11,10) [1] => new Date(2023, 11, 11) [2] => new Date(2023, 11, 29) [3] => new Date(2024, 00,02)).

    In pratica sono le istruzioni (credo Java) per generare il valore X di 4 punti (in questo esempio) di una funzione grafica lineare che otterrei passando questa schiera ad una libreria esterna (insieme a quella dei valori Y ) dopo averla trasformata nell'equivalente schiera Javascript . Il tutto con call a src="https://cdn.canvasjs.com/canvasjs.min.js". Gi� testato con valori immessi a mano e funziona bene .

    Venendo al codice ecco il punto saliente :

    <?php
    .
    .
    .

    print_r($dataPoints); // visualizza la schiera cui sopra in rosso

    <script>


    var dataPoints=[];
    dataPoints=(<?php echo json_encode($dataPoints, JSON_HEX_TAG);?>);

    console.log(dataPoints);
    .
    .
    .
    </script>

    e questo � quello che vedo nel debug del browser grazie all'istruzione console.log:

    Array(4) [ "new Date(2023,11,10) ", "new Date(2023, 11, 11)", "new Date(2023, 11, 29)", "new Date(2024, 00,02)" ]
    ​
    0: "new Date(2023,11,10) "
    ​
    1: "new Date(2023, 11, 11)"
    ​
    2: "new Date(2023, 11, 29)"
    ​
    3: "new Date(2024, 00,02)"
    ​
    length: 4

    questa schiera passata al programma esterno non funziona per via degli ""

    magari � una stupidata ma non riesco a capire come uscirne .

    Grazie





    ​

  5. #5
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,471
    Devi postare il codice PHP che ti popola l'array $dataPoints altrimenti non ci capiamo.
    Comunque, da ciò che ti stampa il print_r resto convinto che usi degli apici e quelle che tu pensi siano istruzioni vengono usate come stringhe di testo.

  6. #6
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Devi postare il codice PHP che ti popola l'array $dataPoints altrimenti non ci capiamo.
    Comunque, da ciò che ti stampa il print_r resto convinto che usi degli apici e quelle che tu pensi siano istruzioni vengono usate come stringhe di testo.
    Eccolo !

    <?php

    echo "<input type='button' class='btn btn-lg btn-success btn-block' value='Ritorno al menù principale' onclick=".'"top.location.href = '."'indexold.php'".'" />';


    $dataPoints = array();


    //Best practice is to create a separate file for handling connection to database
    try{
    // Creating a new connection.
    // Replace your-hostname, your-db, your-username, your-password according to your database
    $link = new PDO( 'mysql:host=localhost;dbname=btp_sql;charset=utf8m b4', //'mysql:host=localhost;dbname=canvasjs_db;charset=u tf8mb4',
    'root', //'root',
    '', //'',
    array(
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_PERSISTENT => false
    )
    );

    $handle = $link->prepare('select data,numero,newdate from sto_val_btptest order by data');
    $handle->execute();
    $result = $handle->fetchAll(PDO::FETCH_OBJ);

    foreach($result as $row){

    array_push($dataPoints,$row->newdate);

    }
    $link = null;
    }
    catch(PDOException $ex){
    print($ex->getMessage());
    }
    print_r ($dataPoints);




    ?>


    <script>

    var dataPoints=<?php echo json_encode($dataPoints,JSON_HEX_QUOT);?>;
    console.log(dataPoints);
    </script>


    Grazie
    Beppe

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,471
    Quindi nel campo "newdate" del database cosa c'è? Stringhe con scritto cose del tipo "new Date(11, 11, 2023)" ?
    In tal caso quelle sono stringhe, è semplice testo, non è codice PHP che genera un risultato.

  8. #8
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Quindi nel campo "newdate" del database cosa c'è? Stringhe con scritto cose del tipo "new Date(11, 11, 2023)" ?
    In tal caso quelle sono stringhe, è semplice testo, non è codice PHP che genera un risultato.
    esatto , ci sono stringhe come quella che hai scritto ma senza apici che finiscono nella array $dataPoints
    che io cerco di trasformare in una array javascript con il comando php : echo json_encode (vedi sopra) . In questo passaggio mi aggiunge le “ ad inizio e fine di ogni elemento. Esiste un altro modo per passare un array da php a javascript che non cambi i dati ?

  9. #9
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Quindi nel campo "newdate" del database cosa c'è? Stringhe con scritto cose del tipo "new Date(11, 11, 2023)" ?
    In tal caso quelle sono stringhe, è semplice testo, non è codice PHP che genera un risultato.
    esatto , ci sono stringhe come quella che hai scritto ma senza apici che finiscono nella array $dataPoints
    che io cerco di trasformare in una array javascript con il comando php : echo json_encode (vedi sopra) . In questo passaggio mi aggiunge le “ ad inizio e fine di ogni elemento. Esiste un altro modo per passare un array da php a javascript che non cambi i dati ?

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,471
    PHP non sta cambiando nulla, quello che hai nel DB è una stringa, e PHP nell'array ci mette una stringa.
    Il fatto che sia una stringa che abbia lo stesso formato di un'istruzione lo riconosci tu leggendola, per PHP non lo è, tanto più che è un'istruzione JS.
    Ci sono almeno un paio di vie per risolvere la situazione.

    1) consigliata, è quella di salvare nel DB i valori effettivi, quindi delle date, non delle istruzioni che poi dovrebbero generare una data. Se poi da JS vuoi un oggetto Date puoi usare Date.parse() sulla stringa contenuta nell'array in arrivo. N.B. la stringa contenuta nell'array in questo caso è una cosa del tipo 2023-11-11,
    non new Date(2023, 11, 11)

    2) Come stai facendo ora passi a JS un array con dentro quelle stringhe e poi da JS le interpreti come istruzioni, questo è un modo per farlo, ma è una forzatura inutile, poco pratica e che può portare a guai perché permetteresti a JS di eseguire un codice qualsiasi, non solo la generazione di un oggetto Date, ma qualsiasi istruzione sia scritta in quel campo del DB o qualsiasi istruzione che per vie traverse si potrebbe far arrivare.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.