Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592

    ciclo foreach poco funzionante..

    ho un array multidimensionale che fa le bizze...
    ce lo avevo su un sito ed era una bomba, ho cercato di "duplicarlo", ma niente... non riesco a capire come farlo funzionare, ed è da stamattina che faccio prove ma niente..
    In realtà non mi da errore, solo che il secondo ciclo foreach mi restituisce SOLO il primo record..
    posto il codice...
    ah.. siccome lo uso come motore di ricerca (ovvio data la query.. ) ho omesso le parti in cui divido la variabile $cerca se l'utente cerca più di una parola... quella parte comunque funziona..
    Codice PHP:
    <?php function safe_query($s_query,$s_db,$s_db_name){
      
    mysql_select_db($s_db_name$s_db) or die ("Errore nella selezione del db: ".mysql_error($s_db));
      
    $s_result mysql_query($s_query,$s_db)
        or die(
    "E' stato riscontrato un errore in una query al database.
    ErrorNo: \""
    .mysql_errno($s_db)."\"
    Errore: [b]\""
    .mysql_error($s_db)."\"[/b]");
      return 
    $s_result;
    }
    // NON PROVARE A CAPIRE IL DETTAGLIO DI QUESTA FUNZIONE
    // ACCONTENTATI DI CAPIRE CHE:
    // restituisce un array associativo multidimensionale con due chiavi: $key_entry_1, $key_entry_2
    // OVVERO... guarda l'esempio qui sotto ;)
    function set_array_from_query_with_two_keys($query,$key_entry_1,$key_entry_2,$s_db,$s_db_name)
    {
        
    mysql_select_db($s_db_name$s_db) or die ("Errore nella selezione del db: ".mysql_error($s_db));
        
    $returned_array = array();
        
    $result_query mysql_query($query$s_db);
        if (!
    $result_query)
            die(
    'Invalid query: ' mysql_error($s_db));
            
    $tot_records mysql_num_rows($result_query);
            
    $totale $tot_records;
            
            if(
    $totale == )
            {
            echo 
    "<table align='center' >";
    echo 
    "<tr><td align='center' >Hai cercato <span class='grande'>[b]".$_GET['cerca']."[/b]</span> </td><td> </td></tr>";
    echo 
    "<tr><td align='center' class='grande' >Non Hai trovato nessuna rispondenza
    [url='index.php']Torna alla ricerca[/url]</td><td> </td></tr>"
    ;
    echo 
    "</table>";
            
            } else {
            echo 
    "<table align='center' >";
    echo 
    "<tr><td align='center' >Hai cercato [b]".$_GET['cerca']."[/b] </td><td> </td></tr>";
    echo 
    "<tr><td align='center' >Hai trovato ".$totale." risultati</td><td> </td></tr>";
    echo 
    "<tr><td align='center' >Clicca sulle categorie per omettere o visualizzare i risultati</td><td> </td></tr>";
    echo 
    "</table>";
    }
            
            
        if (
    mysql_num_rows($result_query) > 0)
        {
            
    // iterate through resultset,
            // foreach knows key_entry beforehand!!!

            
    while($row mysql_fetch_row($result_query))
            {
                foreach(
    $row as $field => $value)
                {
                    
    $column mysql_field_name($result_query,$field);
                    
    $data["$column"] = $value;

                    if(
    mysql_field_name($result_query,$field)==$key_entry_1$x=$value;
                    if(
    mysql_field_name($result_query,$field)==$key_entry_2$y=$value;
                }
                
    $returned_array[$x][$y] = $data;
            }
        }
        return 
    $returned_array;
    }


    $query "SELECT * FROM tabella WHERE MATCH(campouno, campodue) AGAINST ('$cerca' IN BOOLEAN MODE) ORDER BY id ASC";


    $array_provaimport set_array_from_query_with_two_keys($query,'campouno','campodue',$db_conn,$db);
    ?>
    <?
    $i 
    1;
    foreach ( 
    $array_provaimport as $campouno => $value )
    {
      
    $i++;
      foreach(
    $value as $campodue => $inutilizzato)
      {
       echo 
    "<tr><td width='50' valign='top'>$inutilizzato[codice]</td><td align='left' valign='top' width='425'>$campodue</td>";

        } 

    ?>
    grazie in anticipo...

  2. #2
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    mi UPpo, anche se mi rendo conto che non è una cosa facile..
    e a questo punto spiego meglio
    ho due campi nel DB
    campouno | campodue
    tituno testo1
    tituno testo2
    tituno testo3
    titdue testo4
    titdue testo5
    titdue testo6

    l'output dovrebbe essere:
    tituno
    testo1
    testo2
    testo3
    titdue
    testo4
    testo5
    testo6

    se c'è un modo più facile di farlo sono pronto a rivedere tutto..

    aggrazzzzie di nuovo..

  3. #3
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    plizzzzzzzzzzzzzzz...

  4. #4
    Magari mi sbaglio, ma nel foreach prova a scrivere così:

    Codice PHP:
    $data[$column] = $value
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    Originariamente inviato da alcio74
    Magari mi sbaglio, ma nel foreach prova a scrivere così:

    Codice PHP:
    $data[$column] = $value
    niente... non va...
    ma non c'è un modo "semplice e veloce" di ottenere quello che voglio??
    grazie comunque, e non è la prima volta..

  6. #6
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Ci sono alcune cose che mi sfuggono nel tuo script

    1) Se non ho capito male la logica, in base al tuo codice e all'esempio che hai postato l'array risultante dovrebbe essere qualcosa del genere

    $array_provaimport['tituno']['titdue'] = array(qui dentro ci sono tutti i valori della riga di tabella, ciascuno col suo nome di colonna come chiave)

    2) A questo punto, la tua stampa, che entra in gioco solo al secondo livello dell'array, dovrebbe stampare un primo td con il contenuto della colonna 'codice' (???) e un secondo con il contenuto 'titdue' (o quello che c'era in campodue)
    Non mi pare affatto che questa struttura corrisponda a quella che dici di volere

    3) In ogni caso, non capisco perché quel massacro di mysql_field_name() richiamato n volte invece di usare mysql_fetch_assoc() al posto di mysql_fetch_row()

  7. #7
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    Originariamente inviato da luca200
    Ci sono alcune cose che mi sfuggono nel tuo script

    1) Se non ho capito male la logica, in base al tuo codice e all'esempio che hai postato l'array risultante dovrebbe essere qualcosa del genere

    $array_provaimport['tituno']['titdue'] = array(qui dentro ci sono tutti i valori della riga di tabella, ciascuno col suo nome di colonna come chiave)

    2) A questo punto, la tua stampa, che entra in gioco solo al secondo livello dell'array, dovrebbe stampare un primo td con il contenuto della colonna 'codice' (???) e un secondo con il contenuto 'titdue' (o quello che c'era in campodue)
    Non mi pare affatto che questa struttura corrisponda a quella che dici di volere

    3) In ogni caso, non capisco perché quel massacro di mysql_field_name() richiamato n volte invece di usare mysql_fetch_assoc() al posto di mysql_fetch_row()
    intanto grazie del tuo intervento...
    rispondo ai quesiti..
    1) esatto.. questo script me lo ha passato un amico che, come puoi notare dalla parte commentata che ho lasciato non me lo ha spiegato e anche se lo avesse fatto non lo avrei capito...
    comunque certo, crea l'array come lo hai messo tu...

    2) mi sa che con copia e incolla ho toppato qualcosa... quel codice è in realtà il nome di un campo, codice appunto, che è un altro campo da stampare a video e che stavo provando a vedere se lo "vedeva", visualizzava..
    La stampa dovrebbe visualizzare

    tituno
    testo1
    testo2
    testo3
    etc...

    3) Infatti non sapendo mi sono fidato ad occhi chiusi di quello che mi è stato passato e cambierei STRAVOLENTIERI con una cosa più leggera e magari comprensibile...
    Ti saluto e ti ringrazio...

  8. #8
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    lucaaaaaaaaaaaaaaaaaaa..... alciooooooooooo VVoVe: VVoVe:

    devo fare un mea culpa clamoroso, perchè non mi era capitata mai una débâcle così..

    non avendo dati reali, avevo duplicato i record che avevo e avevo come esempio tuuuutti i record del famoso secondo campo UGUALI...
    Mi sono insospettito del non-funzionamento pechè mi sembrava assurdo che lo stesso script funzionava... alchè ho duplicato i record facendo delle modifiche et voilà... funziona...
    In pratica quando faccio questa
    Codice PHP:
    $array_provaimport set_array_from_query_with_two_keys($query,'campouno','campodue',$db_conn,$db); 
    (ho fatto prove successive..) se metto come campodue una colonna con record IDENTICI mi visualizza SOLO il primo... ho allora aggiunto un terzo campo con valori a caso e modificato così
    Codice PHP:
    $array_provaimport set_array_from_query_with_two_keys($query,'campouno','campotre',$db_conn,$db); 
    e a quel punto anche campodue funziona correttamente... lo so sono scarso, ma imparo lentamente...

    Grazie a entrambi della comprensione e alla prossima.

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.