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

    Problema ripetizione ciclo foreach

    Salve a tutti, questo è il mio primo post.
    Sto facendo per imparare php e mysql un piccolo sito di gestione conti come esercizio.
    Sono un paio di ore che mi sto scervellando e non capisco perche il mio ciclo foreach mi stampa il tutto due volte:

    Auto
    Nome Ammonto Giorno
    Spese
    a 1000 13
    a 1000 13
    b 123 14
    b 123 14
    Spesa in italia 100 25
    Spesa in italia 100 25
    Entrate
    Lotteria 300 4
    Lotteria 300 4
    Soldi trovati per terra 200 13
    Soldi trovati per terra 200 13
    Limite 100
    Totale spese 2446
    Totale entrate 500
    Bilancio -1846

    Questo è il codice php:

    Codice PHP:
    <?php include "bdd_connect.php";include "navbar.php" ?>
    <?php     $query_data 
    $bdd->query('SELECT * FROM conti ORDER BY nome_conto');          
        foreach (
    $query_data as $data) {?>

    <div class="container">            <table id="table" class="table">
          <tr>          <td colspan="3"><h1><?php echo $data['nome_conto'?></h1></td>      </tr>      <tr>          <td><h4>Nome</h4></td><td><h4>Ammonto</h4></td><td><h4>Giorno</h4></td>      </tr>      <tr>          <td colspan="3"><h4>Spese</h4></td>      </tr>
        <?php
        $count 
    0;       $sommaSpesa 0;    $sommaEntrata 0;

        
    $req "SELECT spese.nome_spesa AS nomeSpesa, montante_CHF, giorno, spese.id AS id FROM spese, monete WHERE fk_conto = :id";    $req_values = array(        'id' => $data['id']    ) or die(print_r($query_data->errorInfo(), true));
        if (isset(
    $_POST['filtro'])) {
        if(
    $_POST['annoFiltro']!=""){        $req $req " AND anno = :annoFiltro";        $req_values["annoFiltro"] = $_POST['annoFiltro'];    }
        if(
    $_POST['meseFiltro']!=""){        $req $req " AND mese = :meseFiltro";        $req_values["meseFiltro"] = $_POST['meseFiltro'];    }
    }    
        
    $req $req " ORDER BY giorno+0";
        
    $query_conto $bdd->prepare($req);    $query_conto->execute($req_values) or die(print_r($query_data->errorInfo(), true));
        foreach (
    $query_conto as $data_conto) {      $sommaSpesa $sommaSpesa $data_conto['montante_CHF'];    ?>
          <tr>          <td><?php echo $data_conto['nomeSpesa'] . "<br>";  ?></td>          <td><?php echo $data_conto['montante_CHF'] . "<br>"?></td>          <td><?php echo $data_conto['giorno'] . "<br>"?></td>      </tr>
        <?php } if ($count == 0) { ?>                         <tr>                <td colspan="3"><h4>Entrate</h4></td>            </tr>
                <?php            $count 1;        } ?>
    <?php    $req 
    "SELECT entrate.nome_entrata AS nomeEntrata, montante_CHF, giorno, entrate.id AS id FROM entrate, monete WHERE fk_conto = :id";    $req_values = array(        'id' => $data['id']    ) or die(print_r($query_data->errorInfo(), true));


        if (isset(
    $_POST['filtro'])) {
            if(
    $_POST['annoFiltro']!=""){            $req $req " AND anno = :annoFiltro";            $req_values["annoFiltro"] = $_POST['annoFiltro'];        }
            if(
    $_POST['meseFiltro']!=""){            $req $req " AND mese = :meseFiltro";            $req_values["meseFiltro"] = $_POST['meseFiltro'];        }}
        
    $req $req " ORDER BY giorno+0";
        
    $query_conto $bdd->prepare($req);    $query_conto->execute($req_values) or die(print_r($query_data->errorInfo(), true));
        foreach (
    $query_conto as $data_conto) {      $sommaEntrata $sommaEntrata $data_conto['montante_CHF'] / 2;        ?>
          <tr>          <td><?php echo $data_conto['nomeEntrata'] . "<br>";   ?></td>          <td><?php echo $data_conto['montante_CHF'] . "<br>";   ?></td>          <td><?php echo $data_conto['giorno'] . "<br>";   ?></td>      </tr>    <?php 

        
    $limite $data['limite'];
        
    $totale round($limite $sommaEntrata $sommaSpesa2);
          
    ?>

          <tr>          <td><h4>Limite</h4></td>          <td colspan="2"><?php echo $data['limite'] . "<br>";   ?></td>      </tr>      <tr>          <td><h4>Totale spese</h4></td>          <td colspan="2"><?php echo round($sommaSpesa2); ?></td>      </tr>      <tr>          <td><h4>Totale entrate</h4></td>          <td colspan="2"><?php echo round($sommaEntrata2); ?></td>      </tr>      <tr>          <td><h4>Bilancio</h4></td>          <td colspan="2"><?php echo round($totale2); ?></td>      </tr>
     <?php   ?>

      </table></div>
    Qualcuno puo darmi una mano?

    Antonio

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Il codice PHP è a posto, secondo me il problema sta nelle query, se vuoi recuperare dati da 2 tabelle lo dovresti fare con una JOIN, non così.
    Prova a scrivere a mano la query su Phpmyadmin e vedi cosa recupera.

    Per avere informazioni su come scrivere correttamente le query chiedi nella sezione Database fornendo la struttura delle tabelle, evita di riscrivere tutto il codice della pagina perché non serve.

  3. #3
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Il codice PHP è a posto, secondo me il problema sta nelle query, se vuoi recuperare dati da 2 tabelle lo dovresti fare con una JOIN, non così.
    Prova a scrivere a mano la query su Phpmyadmin e vedi cosa recupera.

    Per avere informazioni su come scrivere correttamente le query chiedi nella sezione Database fornendo la struttura delle tabelle, evita di riscrivere tutto il codice della pagina perché non serve.
    Confermo che l'errore stava nelle query, c'era un conto nel FROM di troppo (monete).
    Ti ringrazio molto!

Tag per questa discussione

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.