Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2017
    Messaggi
    42

    Creare file di funzione.php

    Ciao devo creare un file di funzione per un'ecommerce(esercizio didattico).
    Ho creato il file funzioni.php e l'ho dato in pasto al dile config.php cosi: require_once("funzioni.php");
    poi incomincio a creare:

    Codice PHP:
    <?php
    //funzione per gestire chiamate al database
    function query($sql){
        global 
    $connessione
       return 
    mysqli_query($connessione$sql);}

    //Gestisce i messaggi di errore se legge o no dal database
    function conferma($risultato){ 
       global 
    $connessione
       if(!
    $risultato){ 
                   die(
    'Non leggo'.mysqli_error($connessione));
                }
    }

    //funzione fetch array
    function fetch_array($risultato){
            return 
    mysqli_fetch_array($risultato);
    }

    //funziona che deve mostrare i nomi dei prodotti
    function mostraProdotti(){ 
      
    $riceraProdotti query("SELECT * FROM prodotti"); 
       
    conferma($ricercaProdotti); 
       while(
    $row fetch_array($ricercaProdotti)){ 
           echo 
    $row['nome_prodotto']; 
       }
    }
    ?>
    poi vado nell' index.php ed in una qualsiasi parte del template includo la funzione <?php mostraProdotti(); ?>
    risultato
    Notice: Undefined variable: ricercaProdotti inC:\xampp\htdocs\ECOMM\risorse\funzioni.phpon line24
    Non leggo
    cosa sbaglio?


    p.s ovvimente nell'index c'è dichiarato il percorso del config.php
    <?php require_once('../risorse/config.php'); ?>
    Ultima modifica di phelps; 26-02-2018 a 11:07

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,982
    Non so che esercizio vuoi fare, ma questo codice serve a poco, 2 funzioni (fetch_array e query) sono semplicemente dei wrapper per funzioni native alle quali non aggiungi niente che ne giustifichi il finto override, potresti usare direttamente le funzioni native e avresti lo stesso identico risultato, ma usando meno risorse.
    Una funzione, conferma(), che potresti evitare mettendo il die direttamente dopo mysqli_query().

    Ricorda che le funzioni die() sono da usare solo per il debug, per applicazioni in produzione vanno tolti.

    Comunque, ti sta dicendo che la variabile $ricercaProdotti non è definita, in realtà dovrebbe essere definita, assicurati che nella tabella prodotti ci sia qualcosa, oppure è probabile che il tuo giro di funzioni introduca un qualche side effect sulla variabile invalidandola.
    Prova a modificare il codice in modo che il flusso sia quello che normalmente si userebbe, ovvero niente funzioni wrapper, usa direttamente le funzioni native mysqli_ e vedi se funziona, se va è colpa delle tue funzioni.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2017
    Messaggi
    42
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Non so che esercizio vuoi fare, ma questo codice serve a poco, 2 funzioni (fetch_array e query) sono semplicemente dei wrapper per funzioni native alle quali non aggiungi niente che ne giustifichi il finto override, potresti usare direttamente le funzioni native e avresti lo stesso identico risultato, ma usando meno risorse.
    Una funzione, conferma(), che potresti evitare mettendo il die direttamente dopo mysqli_query().

    Ricorda che le funzioni die() sono da usare solo per il debug, per applicazioni in produzione vanno tolti.

    Comunque, ti sta dicendo che la variabile $ricercaProdotti non è definita, in realtà dovrebbe essere definita, assicurati che nella tabella prodotti ci sia qualcosa, oppure è probabile che il tuo giro di funzioni introduca un qualche side effect sulla variabile invalidandola.
    Prova a modificare il codice in modo che il flusso sia quello che normalmente si userebbe, ovvero niente funzioni wrapper, usa direttamente le funzioni native mysqli_ e vedi se funziona, se va è colpa delle tue funzioni.
    le avevo create per riutilizzarle velocemente nelle varie altre funzioni.
    cmq ho cancellato tutto ed ho scritto cosi:
    codice:
    function mostraProdotti(){  global $connessione;
       $query = "SELECT * FROM prodotti";
       $scriviProdotti = mysqli_query($connessione, $query);
       if (!$scriviProdotti) {
         die("Non leggo" .mysqli_error($connessione));
       }
        while ($row = mysqli_fetch_array($scriviProdotti)) {
           echo $row['nome_prodotto']."<br>";
        }
        }
    Funziona benissimo cosi
    come lo modificheresti tu?

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,135
    Il primo errore era un errore di scrittura, quando definivi $ricercaProdotti ti eri perso una c.
    A parte questo, l'uso di variabili globali nelle funzioni è davvero pessimo. Perché non le metti come parametri in input?

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2017
    Messaggi
    42
    Quote Originariamente inviata da luca200 Visualizza il messaggio
    Il primo errore era un errore di scrittura, quando definivi $ricercaProdotti ti eri perso una c.
    A parte questo, l'uso di variabili globali nelle funzioni è davvero pessimo. Perché non le metti come parametri in input?
    O mamma mia siamo alla frutta! c'hai ragione. ho letto e riletto quella dannata variabile, ma quando il cervello è bucato non ci sta niente da fare

    Quale metodo voi usereste? il primo con il richiamo di funzioni nelle funzioni o la seconda soluzione con funzione unica?
    grazie

    Quote Originariamente inviata da luca200 Visualizza il messaggio
    A parte questo, l'uso di variabili globali nelle funzioni è davvero pessimo. Perché non le metti come parametri in input?
    dove??

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,982
    Quote Originariamente inviata da phelps Visualizza il messaggio
    le avevo create per riutilizzarle velocemente nelle varie altre funzioni....
    Ma esistono le funzioni native che puoi usare ovunque.

    Io userei le funzioni native mysqli_, fare quei wrapper non ti semplifica o ottimizza nulla, anzi, consumi inutilmente delle risorse.

    Cosa ti migliora usare questo
    while($row = fetch_array($ricercaProdotti))

    invece di questo?
    while($row = mysqli_fetch_array($ricercaProdotti))

    Nel primo caso fai una chiamata a funzione inutile che ti spreca tempo e risorse, attivi 2 funzioni invece di 1.

    Idem per query() e mysqli_query()

    Se il file config lo includi ovunque hai un'interazione col DB, ti basta definire la variabile $connessione lì dentro senza usare global.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2017
    Messaggi
    42
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Ma esistono le funzioni native che puoi usare ovunque.

    Io userei le funzioni native mysqli_, fare quei wrapper non ti semplifica o ottimizza nulla, anzi, consumi inutilmente delle risorse.

    Cosa ti migliora usare questo
    while($row = fetch_array($ricercaProdotti))

    invece di questo?
    while($row = mysqli_fetch_array($ricercaProdotti))

    Nel primo caso fai una chiamata a funzione inutile che ti spreca tempo e risorse, attivi 2 funzioni invece di 1.

    Idem per query() e mysqli_query()

    Se il file config lo includi ovunque hai un'interazione col DB, ti basta definire la variabile $connessione lì dentro senza usare global.
    Infatti.. farò

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2017
    Messaggi
    42
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Ma esistono le funzioni native che puoi usare ovunque.

    Io userei le funzioni native mysqli_, fare quei wrapper non ti semplifica o ottimizza nulla, anzi, consumi inutilmente delle risorse.

    Cosa ti migliora usare questo
    while($row = fetch_array($ricercaProdotti))

    invece di questo?
    while($row = mysqli_fetch_array($ricercaProdotti))

    Nel primo caso fai una chiamata a funzione inutile che ti spreca tempo e risorse, attivi 2 funzioni invece di 1.

    Idem per query() e mysqli_query()

    Se il file config lo includi ovunque hai un'interazione col DB, ti basta definire la variabile $connessione lì dentro senza usare global.
    Infatti.. farò grazie

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