Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Query multiple e ciclo While

    Ho realizzato questa query per interrogare il db su due voci linkate:
    Programma
    Enti

    Ho messo due query di seguito e così come l'ho postata non mi da nessun risultato..pagina bianca!
    Utilizzando invece una query solamente, o Programma o Enti, il risultato dell'interrogazione viene visualizzato in maniera QUASI esatta. Infatti, viene ripetuto infinite volte. Non capisco il motivo


    Codice PHP:
    //PROGRAMMA - imposto query sotto if e la risolvo
    if ($ord==Programma){
    $query "SELECT * FROM manifestazioni, programma, file_binari ORDER BY '$ord'";
    $result mysql_query($query$db
    or die( 
    "Errore: " mysql_error() );
     
    //ENTI - imposto query sotto if e la risolvo
    if ($ord==Enti){
    $query2 "SELECT * FROM manifestazioni, enti, ORDER BY '$ord'";
    $result2 mysql_query($query2$db
    or die( 
    "Errore: " mysql_error() );
     
    //conto il numero di occorrenze trovate nel db
    $numrows mysql_num_rows($result);
    $numrows2 mysql_num_rows($result2);

    //se il database è vuoto lo stampo a video
    if ($numrows==0){
    echo
    "Database vuoto!";
    }

    //Se invece trovo delle occorrenze...
    else
    {

    echo 
    "
    "
    ;

    //Realizzo un ciclo WHILE
    while ($numrows=mysql_fetch_array($result)) {

    //Stampo il risultato in una tabella
    echo "<table width=\"100%\" border=\"0\" cellpadding=\"1\">
                                    <tr> 
                                      <td bgcolor=\"#3399CC\"> <table width=\"100%\" border=\"0\" cellpadding=\"10\" cellspacing=\"0\">
                                          <tr> 
                                            <td bgcolor=\"#FFFFFF\"align=\"center\"><span class=\"testoBold\">" 
    $numrows['giornate'] . "</span>

                                            </td>
                                          </tr>
                                        </table></td>
                                    </tr>
                                  </table>"
    ;

    }
    }


    //se il database è vuoto lo stampo a video
    if ($numrows2==0){
    echo
    "Database vuoto!";
    }

    //Se invece trovo delle occorrenze...
    else
    {

    echo 
    "
    "
    ;

    //Realizzo un ciclo WHILE
    while ($numrows2=mysql_fetch_array($result2)) {

    //Stampo il risultato in una tabella
    echo "<table width=\"100%\" border=\"0\" cellpadding=\"1\">
                                    <tr> 
                                      <td bgcolor=\"#3399CC\"> <table width=\"100%\" border=\"0\" cellpadding=\"10\" cellspacing=\"0\">
                                          <tr> 
                                            <td bgcolor=\"#FFFFFF\"align=\"center\"><span class=\"testoBold\">" 
    $numrows2['enti'] . "</span>

                                            </td>
                                          </tr>
                                        </table></td>
                                    </tr>
                                  </table>"
    ;

    }
    }

    }
    } else {
    echo 
    "";


    Preciso che i campi 'enti' e 'giornate', che utilizzo, sono dei campi text.
    Qualcuno sa darmi una mano?

    Grazie

  2. #2
    "programma" e "enti" che usi nelle if sono stringhe e vanno tra virgolette.



    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Originariamente inviato da piero.mac
    "programma" e "enti" che usi nelle if sono stringhe e vanno tra virgolette.



    ho provato, ma non cambia se utilizzo le query insieme.
    se le utilizzo singolarmente ora mi da questo messaggio d'errore
    "Errore: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY 'Enti'' at line 1"

    Mi da questo messaggio d'errore ora sia con apici(') sia con virgolette (") e strana cosa, che prima non mi faceva!!!!, anche senza ' o "...ho pulito la cache e mi continua a dare lo stesso eerrore!


  4. #4
    prendiamone uno a caso ... Enti che e' + corto.

    if($ord == 'Programma' ){
    ci voglio gli apici perche' qui rappresenta il contenuto di $ord(stringa)


    ... ORDER BY $ord ";
    qui gli apici a $ord non ci vogliono perche' non ha piu' valenza di stringa, ma di nome di campo.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Originariamente inviato da piero.mac
    prendiamone uno a caso ... Enti che e' + corto.

    if($ord == 'Programma' ){
    ci voglio gli apici perche' qui rappresenta il contenuto di $ord(stringa)


    ... ORDER BY $ord ";
    qui gli apici a $ord non ci vogliono perche' non ha piu' valenza di stringa, ma di nome di campo.

    cmq lo metta m ida errori sempre più strani! è da circa un anno e mezzo che traffico su php e mysql e non mi è mai successa una cosa del genere!!
    sembra che il pc faccia ciò che vuole lui!!!

    se provo le query insieme non mi da lacun risultato. se provo Programma mi da un record su 5! ripetuto all'infinito! se provo Enti mi da quest'errore:
    "Errore: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY Enti' at line 1"
    preciso con qualsiasi sintassi imposti e avendo cancellato la cache!! VVoVe: VVoVe:

    a parte gli apici la sintassi di ciò che ho postato è giusto? può funzionare? :master: :master:

  6. #6
    questo e' facile come errore:

    FROM manifestazioni, enti, ORDER BY '$ord'";

    hai una virgola di troppo prima di ORDER by.... ma mi chiedo quale sia il riferimento tra le tabelle. Fai una INNER JOIN senza riferimenti e condizioni, ti dovrebbe rendere un prodotto cartesiano

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Originariamente inviato da piero.mac
    questo e' facile come errore:

    FROM manifestazioni, enti, ORDER BY '$ord'";

    hai una virgola di troppo prima di ORDER by.... ma mi chiedo quale sia il riferimento tra le tabelle. Fai una INNER JOIN senza riferimenti e condizioni, ti dovrebbe rendere un prodotto cartesiano

    si in effetti la query joint è un pò scarna!
    ho aggiustato quà e là qualcosina

    Codice PHP:
    //PROGRAMMA - imposto query sotto if e la risolvo
    if ($ord=='Programma'){
    $query "SELECT * FROM manifestazioni, programma WHERE manifestazioni.id_ma=programma.id_ma ORDER BY $ord";
    $result mysql_query($query$db
    or die( 
    "Errore: " mysql_error() );
     
    //ENTI - imposto query sotto if e la risolvo
    if ($ord=='Enti'){
    $query2 "SELECT * FROM manifestazioni, enti WHERE manifestazioni.id_ma=enti.id_ma ORDER BY $ord";
    $result2 mysql_query($query2$db
    or die( 
    "Errore: " mysql_error() );
     
    //conto il numero di occorrenze trovate nel db
    $numrows mysql_num_rows($result);
    $numrows2 mysql_num_rows($result2);

    //se il database è vuoto lo stampo a video
    if ($numrows==0){
    echo
    "Database vuoto!";
    }

    //Se invece trovo delle occorrenze...
    else
    {

    echo 
    "
    "
    ;

    //Realizzo un ciclo WHILE
    while ($numrows=mysql_fetch_array($result)) {

    //Stampo il risultato in una tabella
    echo "<table width=\"100%\" border=\"0\" cellpadding=\"1\">
                                    <tr> 
                                      <td bgcolor=\"#3399CC\"> <table width=\"100%\" border=\"0\" cellpadding=\"10\" cellspacing=\"0\">
                                          <tr> 
                                            <td bgcolor=\"#FFFFFF\"align=\"center\"><span class=\"testoBold\">" 
    $numrows['giornate'] . "</span>

                                            </td>
                                          </tr>
                                        </table></td>
                                    </tr>
                                  </table>"
    ;

    }
    }


    //se il database è vuoto lo stampo a video
    if ($numrows2==0){
    echo
    "Database vuoto!";
    }

    //Se invece trovo delle occorrenze...
    else
    {

    echo 
    "
    "
    ;

    //Realizzo un ciclo WHILE
    while ($numrows2=mysql_fetch_array($result2)) {

    //Stampo il risultato in una tabella
    echo "<table width=\"100%\" border=\"0\" cellpadding=\"1\">
                                    <tr> 
                                      <td bgcolor=\"#3399CC\"> <table width=\"100%\" border=\"0\" cellpadding=\"10\" cellspacing=\"0\">
                                          <tr> 
                                            <td bgcolor=\"#FFFFFF\"align=\"center\"><span class=\"testoBold\">" 
    $numrows2['enti'] . "</span>

                                            </td>
                                          </tr>
                                        </table></td>
                                    </tr>
                                  </table>"
    ;

    }
    }

    }
    } else {
    echo 
    "";

    se le utilizzo insieme non mi da alcun risultato. se le utilizzo singolarmente funzionano regolarmente. ma per farle funzionare regolarmente da sole ho dovuto togliere la tabella delle immagini!

    ti ringrazio per la disonibilità e ti chiedo ancora se secondo te ora potrebbe andre e perchè non va!

  8. #8
    Credo che il tuo problema sia tuttavia molto semplice ... e' un problema di logica.

    Se $ord e' = Programma non potra' mai essere $ord = Enti.

    Quindi se e' vera la prima if sara' falsa la seconda. E viceversa.

    Siccome tu hai costruito un annidamento delle due cose, ne consegue che se e' falsa la prima salti all'else al fondo allo scritp. Se e' vera la prima if e' sicuramente falsa la seconda e quindi salti tutto, compreso la stampa della prima.

    Se non mi sono spiegato bene fischia che provo a cambiare le parole usate.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    Originariamente inviato da piero.mac
    Credo che il tuo problema sia tuttavia molto semplice ... e' un problema di logica.

    Se $ord e' = Programma non potra' mai essere $ord = Enti.

    Quindi se e' vera la prima if sara' falsa la seconda. E viceversa.

    Siccome tu hai costruito un annidamento delle due cose, ne consegue che se e' falsa la prima salti all'else al fondo allo scritp. Se e' vera la prima if e' sicuramente falsa la seconda e quindi salti tutto, compreso la stampa della prima.

    Se non mi sono spiegato bene fischia che provo a cambiare le parole usate.


    Grazie piero.mac! sei stato chiarissimo.
    mi sono anche andato a rivedere uno script impostato più o meno nello stesso modo che avevo scritto tempo fa...e che però funziona!, e in effetti ora stavo facendo delle ate!
    alla fine invece di modificare ho optato per dividere lo script. ora invece di 1 script per più query ho più script per tot query. un pò artigianale e laborioso e lungo, ma funge!

    continuo cmq a non capire come mai se nella query inserisco anche la tabella file_binari (quella che contiene le img) i risultati che mi rende sono infiniti! :master: :master:
    Codice PHP:
    $query2 "SELECT * FROM manifestazioni, file_binari ORDER BY $ord"

  10. #10
    Originariamente inviato da windtalk
    continuo cmq a non capire come mai se nella query inserisco anche la tabella file_binari (quella che contiene le img) i risultati che mi rende sono infiniti! :master: :master:
    Codice PHP:
    $query2 "SELECT * FROM manifestazioni, file_binari ORDER BY $ord"
    Prodotto cartesiano.

    Siccome non metti un legame, una chiave comune tra le due tabelle in modo da ottenere un equi-join dalla tua query, che e' una INNER JOIN, a mysql non resta che rendere per ogni record presente in "manifestazioni" tutti i record presenti in "file_binari". Il risultato sara' num_record tab1 per num_record tab_2

    Query errata.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.