Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Problema con condizione "if - else if"

    Ciao a tutti. Apro questa discussione in quanto ho un problema in merito ad una struttura di controllo "if - else if".
    Per cercare di spiegarmi bene, per prima cosa inserisco il codice che ho scritto.
    Codice PHP:
    <script type="text/javascript">
        var num_tracciati = <?=$y_count_js?>; // la variabile pu� assumere il valore di 1 oppure 2
        if (num_tracciati == 1)
        {
            var tracciato0 =
            {
                x:[<?php echo $x;?>],
                y:[<?php echo $y0;?>],
                type: 'scatter',
            };               
            var data = [tracciato0];
        }
        else if (num_tracciati == 2)
        {
            var tracciato0 =
            {
                x:[<?php echo $x;?>],
                y:[<?php echo $y_0;?>],
                type: 'scatter',
            };
            var tracciato1 =
            {
                x:[<?php echo $x;?>],
                y:[<?php echo $y_1;?>],
                type: 'scatter',
            };               
            var data = [tracciato0,tracciato1];
        }           
        Plotly.newPlot('grafico', data, {}, {showSendToCloud: true});
    </script>
    Spiego il problema.
    Fin quando la variabile "num_tracciati" ha valore 2 il codice funziona perfettamente. Se la variabile "num_tracciati" ha valore 1 il codice non funziona perch� all'interno di "else if (num_tracciati == 2)" javascript tenta di sostituire $x e $y_1 con i rispettivi valori ma $y_1 ha valore nullo!
    Secondo voi dove sbaglio?
    Ciao, grazie mille.

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,861
    Ciao, dalle indicazioni fornite non si capisce se le cause del problema siano da valutare lato PHP o lato JavaScript

    Cerchiamo di chiarire.

    Lato JavaScript a livello puramente sintattico non ci sono errori che impediscano il funzionamento dello script se si assegna un valore null ad una variabile.

    Attribuire un valore nullo (inteso esattamente come valore primitivo null) ad una variabile JavaScript, normalmente non comporta errori di script. Bisogna capire però nel contesto se quel valore da fastidio al resto dell'applicazione ed eventualmente prevenire sostituendolo con un qualche altro valore.

    Plotly.newPlot() cosa fa? che valori si aspetta? il parametro data, e nello specifico data.y, deve avere un valore diverso da null?

    In questo caso è possibile prevenire il problema, via JavaScript, assegnando un valore alternativo a null per tale variabile; ad esempio, se il sistema si aspetta un valore numerico, potrebbe essere assegnato 0 anziché null.

    Quella riga potrebbe essere impostata con una cosa del genere:
    codice:
    y: [<?php echo $y_1;?>] || 0,
    .
    Se invece il valore nullo è visto lato PHP (che può anche essere un valore null definito per la variable $y_1) è possibile che lato client arrivi un valore vuoto (cioè non sia stampato niente in quel punto), in questo caso JavaScript potrebbe restituire degli errori di sintassi.

    Quindi, cosa restituisce esattamente il PHP in quel punto?

    E' normale che il PHP in quel punto restituisca un valore nullo (vuoto o quel che è)? Se non lo è allora il problema sta nel PHP.

    Se vuoi che da PHP sia restituito un valore alternativo (ad esempio 0) al posto di un valore nullo (vuoto) allora puoi impostare quella parte in questo modo:
    codice:
    y:[<?php echo $y_1 ? $y_1 : 0;?>],
    .
    Valuta i diversi punti ed eventualmente prova una delle soluzioni. Se il problema non si risolve cerca di fornire maggiori dettagli sul contesto.

    buon proseguimento.
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  3. #3
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,861
    Aggiungo:

    fai attenzione ai nomi delle variabili nel PHP, nella prima condizione hai usato $y0; mentre poi hai usato $y_0; (dove c'è un trattino basso, così come per $y_1), non vorrei che tu abbia confuso qualche nome e che il problema sia semplicemente quello.

    Inoltre in JavaScript, sebbene non generi errori di script, la definizione multipla della stessa variabile (usando var) è ridondante, inutile e può giusto creare confusione a livello di stesura del codice.
    Vedi:
    codice:
    var tracciato0
    var data
    anche se stanno dentro diversi blocchi condizionali sono comunque definite a livello globale, proprio come num_tracciati. In tal caso sarebbe più consono dichiarare tutte le variabili all'inizio dello script, quindi assegnarne il valore (senza usare var) all'interno dello script:
    codice:
        var tracciato0;
        var tracciato1;
        var data;
        var num_tracciati = ...;
    
        if (num_tracciati == 1)
        {
            tracciato0 = {...};               
            data = [...];
        }
        else if (num_tracciati == 2)
        {
            tracciato0 = {...};
            tracciato1 = {...};
            data = [...];  
        }
    Ultima modifica di KillerWorm; 30-05-2019 a 16:45
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  4. #4
    Ciao KillerWorm, grazie mille per la risposta. Ti spiego velocemente cosa devo fare.
    Un utente, dopo essersi autenticato, può visualizzare in un grafico dati contenuti in un database Mysql (il grafico può contenere uno o più tracciati).
    L'utente sceglie quale elemento visualizzare sull'asse x e quale/i elemento/i visualizzare sull'asse y e visualizzare il tutto sotto forma grafica.
    Ovviamente i dati vengono estratti dalla tabella Mysql tramite PHP e successivamente "dirottati" su Javascript.
    Per la realizzazione del grafico utilizzo la libreria Plotly (Open Source e molto facile da utilizzare).
    Per quanto riguarda il parametro data, esso deve contenere tutte le coordinare x ed y dei tracciati del grafico ed, ovviamente, i valori devono essere diversi da NULL.
    Esempio:
    codice:
    var tracciato0 =
    {
        x:[0,1,2,3,4,5], // COORDINARE X DEI PUNTI ESTRATTI DALLA TABELLA MYSQL CON PHP
        y:[0,1,2,3,4,5], // COORDINARE Y DEI PUNTI ESTRATTI DALLA TABELLA MYSQL CON PHP
        type: 'scatter',
    };
    Se l'utente deve visualizzare un solo tracciato allora ci sarà soltanto tracciato0, altrimenti ci sarà anche tracciato1.
    Se l'utente sceglie di visualizzare due tracciati non ho nessun tipo di problema mentre se sceglie di visualizzare un solo tracciato questo è quello che visualizzo tramite l'analisi pagina:
    codice:
    var tracciato1 =
    {
        x:[0,1,2,3,4,5], // COORDINARE X DEI PUNTI ESTRATTI DALLA TABELLA MYSQL CON PHP
        y:[<b>Notice</b>: Undefined variable: y_stringa_1 in <b> c:\xampp\htdocs\....</b> on line ...],
        type: 'scatter',
    };
    Ultima modifica di samurai.sette; 30-05-2019 a 17:58

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,861
    Ok, il problema è lato PHP. Ovviamente il PHP genera il codice da mandare al client (attraverso quelle variabili) a prescindere dal valore di num_tracciati, il quale determina l'esecuzione di una o dell'altra condizione.

    Dovresti riorganizzare meglio la parte PHP. Puoi ad esempio porre le condizioni direttamente nel PHP in modo che al JavaScript gli arrivi direttamente la variabile data valorizzata, o comunque porre delle condizioni (lato PHP) che impediscano la lettura/esecuzione di variabili non definite.
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  6. #6
    Ciao KillerWorm. Credo che tu abbia ragione, il problema � lato PHP ma non riesco a risolverlo.
    Ho provato a modificare il codice ma continua sempre con lo stesso problema.
    Per� adesso la situazione � leggermente cambiata ; fino a ieri un utente poteva selezionare sull'asse y massimo 2 elementi mentre ora deve poterne selezionare quanti ne vuole.
    Questo � il pezzo di codice PHP che ho scritto e che riguarda l'estrazione delle coordinate y del/i grafico/i dalla tabella.
    codice:
    $query_dati_y = mysqli_query ($con, "SELECT $asse_y FROM $monitoraggio ORDER BY data DESC, ora DESC"); // la variabile $asse_y contiene il nome degli elementi dell'asse y selezionati dall'utente
    while ($result_dati_y = mysqli_fetch_array($query_dati_y,MYSQLI_NUM))
    {
        $y_valori[] = $result_dati_y;
        for ($i = 0; $i <= count($y_valori) - 1; $i ++)
        {
            for ($j = 0; $j <= $y_count - 1; $j ++) // la variabile $y_count contiene il numero degli elementi da visualizzare sull'asse y(quindi il numero di tracciati da visualizzare)
            {
                ${'dati_y_' . $j}[] = $y_valori[$i][$j];
                ${'y_stringa_' . $j} = rtrim(implode(',', ${'dati_y_' . $j}), ',');
            }
        }
    }
    Secondo te estrarre i dati dalla tabella in questo modo è corretto?
    P.S.: la struttura del codice Javascript l'ho lasciata come prima.
    Ciao, grazie mille.

  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,861
    Secondo te estrarre i dati dalla tabella in questo modo è corretto?
    Non so... Funziona? Fa ciò che deve fare? Se sì, allora è corretto

    P.S.: la struttura del codice Javascript l'ho lasciata come prima.
    Se è come prima allora non hai risolto niente; avrai sempre il problema di variabili PHP non definite che restituiscono, lato client, dei testi di avviso.

    Ripeto, a meno che non ti serva ottenere specifiche variabili dei vari tracciati, a mio parere lato client conviene ricevere direttamente la variabile data già costruita è pronta all'uso. Tutte le varie condizioni e il resto dello script (in JavaScript) non ti serviranno più.

    Sostanzialmente dovrai ottenere una cosa del genere:
    codice:
    var data = [
       {x:[1,2,3], y:[4,5,6], type: 'scatter'}
      ,{x:[1,2,3], y:[10,11,12], type: 'scatter'}
      ,{x:[1,2,3], y:[16,17,18], type: 'scatter'}
      //, ecc. per gli altri eventuali tracciati
    ];
    Plotly.newPlot('grafico', data, {}, {showSendToCloud: true});
    .
    Quindi ciò che dovrai fare è costruire in PHP (più o meno come stai facendo) quella variabile (ovviamente come stringa testuale), così che arrivi lato client impostata in quella maniera, con tutti i dati che ti servono.

    Se ti serve aiuto per la parte PHP, dal momento che la natura dell'argomento si stia diversificando, ti invito ad aprire una nuova discussione nella relativa sezione del forum e riportare lì tutti i dettagli necessari, così da non aggrovigliare in un'unica discussione diversi argomenti di diversa natura e con tematiche comunque differenti (anche se in qualche modo correlate) ma anche per poter eventualmente ricevere consigli più appropriati su quella parte.

    Buon proseguimento
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

  8. #8
    Ciao KillerWorm.
    Vorrei ringrazierti per i consigli che mi hai dato. Finalmente ho risolto il problema che avevo e l'ho fatto esattamente come mi hai suggerito tu. Ho fatto in modo che in Javascript arrivi direttamente la variabile "data" valorizzata.
    Grazie mille, sei stato gentilissimo e spero in futuro di poter ricambiare il tuo aiuto.
    Ciao!

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,861
    Bene, mi fa piacere essere stato d'aiuto e che tu sia riuscito a risolvere.
    Buon proseguimento
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 20% tra i post del forum; il 15% sul web.
    Ti resta... humm spè

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

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 © 2021 vBulletin Solutions, Inc. All rights reserved.