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

    Classi. Problema Stampa Array

    Ciao a tutti. Ho creato la seguente classe ma ho un problema con la stampa del contenuto dei dati di un array multidimensionale creato da un fetch_assoc() su una query.

    Il problema è che la funzione stampa() ke potete vedere alla fine del codice quando la richiamo mi stampa solo o la dimensione 'nome' dell'array o quella 'cognome'. se provo a stamparle entrambe mi stampa solo la colonna nome o cognome in base a quale chiamo x prima.

    Grazie a chiunque sappia aiutarmi. Con il codice capirete meglio il probl:
    Ho imparato da poco il php e se notate che ci sono errori di tipo logico o qualsiasi buona prassi da rispettare, non rispettata, avvertitemi gentilmente:

    <?php

    class MySql{

    var $host;
    var $user;
    var $password;
    var $database; //nome del database
    var $errorC = false; //errore Connessione al Db
    var $errorQ = false; //errore richiesta query
    var $connessione; //mysqli_connect
    var $mysql; //mysqli_query
    var $query;
    var $arr_dati;

    function MySql($host,$user,$password,$database){

    $this->host=$host;
    $this->user=$user;
    $this->password=$password;
    $this->database=$database;

    }

    function connessione(){
    $this->connessione = mysqli_connect($this->host, $this->user, $this->password, $this->database);
    if(!isset($this->connessione)){

    die("Connessione al Db fallita");
    $this->errorC = true;

    }
    }
    function query($sql){

    $this->mysql = mysqli_query($this->connessione, $sql);
    if(!isset($this->mysql)){
    trigger_error (
    'Query fallita: '.mysql_error($this->connessione).
    ' SQL: '.$sql);
    $errorQ = true;
    }
    }

    function size(){
    $size = mysqli_num_rows($this->mysql);
    return $size;

    }

    function fetch(){
    if($this->size() > 0){
    $this->arr_dati = mysqli_fetch_assoc($this->mysql);} else {
    trigger_error('la query non ha avuto risposte');
    $errorQ = true;
    }
    return $this->arr_dati;
    }

    function stampa($cosa){
    while($this->arr_dati){
    echo $this->arr_dati[$cosa];
    }

    }

    }

    ?>

    questa è la classe. Che poi richiamo da qui:

    <?php
    include("MySql.php");
    $host = 'localhost';
    $user = 'root';
    $password = '';
    $database = 'test';
    $qry = "SELECT * FROM tab1";
    $db = new MySQL($host,$user,$password,$database);

    $db->connessione();
    $db->query($qry);
    $db->stampa('cognome');
    $db->stampa('nome');

    ?> cosi ad esempio stampa solo i cognomi

    <?php
    include("MySql.php");
    $host = 'localhost';
    $user = 'root';
    $password = '';
    $database = 'test';
    $qry = "SELECT * FROM tab1";
    $db = new MySQL($host,$user,$password,$database);

    $db->connessione();
    $db->query($qry);
    $db->stampa('nome');
    $db->stampa('cognome');

    ?>cosi solo i nomi

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    iterando sui dati il puntatore interno avanza e quindi quando poi stampi l'altro campo si trova già alla fine... personalmente preferisco altre soluzioni... p.es. potresti modificare la chiamata mysqli_fetch_assoc mettendo un ciclo while che scorra tutti le righe e le inserisca in $arr_dati, ossia sostituire $this->arr_dati = mysqli_fetch_assoc($this->mysql); con qualcosa come:



    Codice PHP:
    $this->arr_dati = array();
    while (
    $row mysqli_fetch_assoc($this->mysql)) {
      
    $this->arr_dati[] = $row;
    }; 
    per poi lavorare su tale vettore (puoi fare un reset per ripartire, p.es.)

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.