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

    [PHP]Metodo con parametri opzionali

    Ciao a tutti,
    ho un problema ad impostare paramatri opzionali per i metodi.

    Ho il metodo getAccounts appartenente alla classe DB e vorrei fare in modo che ricerchi gli utenti nel database in base a dei parametri che gli si passa, ovvero se per esempio gli si passa come parametro l'id dell'utente lui cerca l'account in base all'id, se gli si passa l'username lo cerca in base a quest'ultimo e se invece non gli si passa nulla estrae tutti gli account dal database.

    Ho provato in due modi diversi ma tutti danno degli errori, ecco quali:

    Parametro singolo, controllo il tipo di variabile passata

    Codice PHP:
    public function getAccounts($par=NULL){
                if(
    is_int($par)){
                    
    $query "SELECT * FROM ".$this->accounts_t." WHERE id_user =".$par;
                }else if(
    is_string($par)){
                    
    $query "SELECT * FROM ".$this->accounts_t." WHERE username =".$par;
                }else 
    $query "SELECT * FROM ".$this->accounts_t;
                
    $mysqli $this->openDB();
                
    $result $mysqli->query($query);
                
    $this->closeDB($mysqli);
                if(
    $result) return $result;
            } 
    In questo modo se gli passo una intero funziona correttamente, se gli passo una stringa la query non va a buon fine e ricevo questo errore "Fatal error: Call to a member function fetch_array() on a non-object in C:\Program Files (x86)\EasyPHP-12.1\www\mysite_v01\prova_classi.php on line 9"

    DUE PARAMETRI, ID E USERNAME

    Codice PHP:
    public function getAccounts($id=NULL,$uname=NULL){
                if(isset(
    $id)){
                    
    $query "SELECT * FROM ".$this->accounts_t." WHERE id_user =".$id;
                }else if(isset(
    $uname)){
                    
    $query "SELECT * FROM ".$this->accounts_t." WHERE username =".$uname;
                }else 
    $query "SELECT * FROM ".$this->accounts_t;
                
    $mysqli $this->openDB();
                
    $result $mysqli->query($query);
                
    $this->closeDB($mysqli);
                if(
    $result) return $result;
            } 
    In questo modo funziona solo se gli passo il primo parametro, nel caso lo salto scrivendo (NULL,$stringa) nei parametri mi restituisce lo stesso errore di prima, ovvero la query non viene eseguita con successo.

    So che potrei usare ancora la funzione func_get_args() ma non ho proprio capito come gestirla.

    Consigli?

  2. #2
    non penso tu possa usare il primo metodo.
    per quanto riguarda il secondo penso dipenda dalla query.
    suppongo che ID sia intero ma NOME sia stringa.
    quindi qualcosa del genere:
    Codice PHP:
    $query 'SELECT * FROM ' $this->accounts_t ' WHERE username = "' $uname '"'
    in sostanza la variabile che ricerchi deve apparire come una stringa nella query:
    codice:
    SELECT * FROM tbl_nomi WHERE nome = "andrea";
    ad esempio.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Se è una stringa nella query devi gestire la selezione del campo con gli apostrofi, se è un numero no ma se è una stringa si


    Esempio
    Codice PHP:
    $query "SELECT * FROM ".$this->accounts_t." WHERE username ='".$uname."'"
    Poi aggiungi un controllo errori di mysqli http://php.net/manual/en/mysqli.error.php


    So che potrei usare ancora la funzione func_get_args() ma non ho proprio capito come gestirla.
    In che senso non hai capito? Ritorna semplicemente un array contenente i valori di tutti i parametri

    Sempre queste anticipazioni silenziose

  4. #4
    Originariamente inviato da fermat
    non penso tu possa usare il primo metodo.
    per quanto riguarda il secondo penso dipenda dalla query.
    suppongo che ID sia intero ma NOME sia stringa.
    quindi qualcosa del genere:
    Codice PHP:
    $query 'SELECT * FROM ' $this->accounts_t ' WHERE username = "' $uname '"'
    Originariamente inviato da RoTeam
    Se è una stringa nella query devi gestire la selezione del campo con gli apostrofi, se è un numero no ma se è una stringa si



    Esempio
    Codice PHP:
    $query "SELECT * FROM ".$this->accounts_t." WHERE username ='".$uname."'"
    Mi sento ufficialmente scemo

    Originariamente inviato da RoTeam
    Poi aggiungi un controllo errori di mysqli http://php.net/manual/en/mysqli.error.php
    Vero, grazie

    Originariamente inviato da RoTeam
    In che senso non hai capito? Ritorna semplicemente un array contenente i valori di tutti i parametri
    Avevo letto di striscio un articolo inglese e mi pareva che questa funzione potesse risolvere il mio problema, ma non capivo come.

    In ogni caso ora ho risolto, uso il primo metodo con un solo parametro che sembra funzionare correttamente ora.

    Grazie dell'aiuto...

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