• User Newbie

    Php e mysqli problema con array

    Salve a tutti ho un problema con il seguente frammento di codice:

    <?php
    
    
    $mysqli=new mysqli("$host", "$username", "$psw", "$dbname");
    $query="SELECT dzdom_musicbattle_media.image_id, dzdom_musicbattle_media.title FROM dzdom_musicbattle_media WHERE dzdom_musicbattle_media.user_id=42";
    $result=$mysqli->query($query);
    
    $aUnits=array();
    $i=1;
    $elements=$result->num_rows;
    
    while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)){
    $img=$row[0];
    $titolo=$row[1];
    
    if($i!=$elements){
    $aUnits*=array($img=>$titolo);
    $i++;
    }
    }
    
    foreach ($aUnits as $sFilename=>$sTitle) {
    echo"<br>".$sFilename."/".$sTitle;
    
    }
    
    
    
    ?>
    

    La risposta ottenuta è la seguente:

    
    1/Array
    2/Array
    3/Array
    4/Array
    5/Array
    6/Array
    7/Array
    8/Array
    9/Array
    10/Array
    11/Array
    12/Array
    13/Array
    14/Array
    15/Array
    16/Array
    17/Array
    18/Array
    19/Array
    20/Array
    21/Array
    22/Array
    23/Array
    24/Array
    25/Array
    26/Array
    27/Array
    

    Perche non mi stampa il contenute della variabile $sTitle?

    Grazie 🙂


  • User

    prova a fare

    print_r($sTitle);

    vedi un po' che cosa ti restituisce... in pratica ti sta dicendo che sTitle è un array quindi non può essere stampata con echo...


  • User Newbie

    Hai ragione!! come posso invece rendere $sTitle una variabile con solamente dentro il titolo? sbaglio nella dichiarazione dell'array??


  • User

    cosa ti restituisce $sTitle? quando lo stampi con print_r ?


  • User Newbie

    il segmento è questo

    foreach ($aUnits as $sFilename=>$sTitle) {
    echo"<br>".$sFilename."/";
    print_r($sTitle);
    }
    

    e mi restituisce:

    1/Array (     [1] => Besugo ) 
    2/Array (     [28] => prova ) 
    3/Array (     [15] => test1 ) 
    4/Array (     [16] => test Friday ) 
    5/Array (     [17] => upload1 ) 
    6/Array (     [18] => upload2 ) 
    7/Array (     [19] => upload3 ) 
    8/Array (     [22] => prova ) 
    9/Array (     [24] => test Monday ) 
    10/Array (     [29] => when love takes over ) 
    11/Array (     [26] => prova2 ) 
    12/Array (     [27] => titolo dell mp3 ) 
    13/Array (     [31] => Samoyed ) 
    14/Array (     [32] => puzzle ) 
    15/Array (     [33] => paint red ) 
    16/Array (     [34] => Snow ) 
    17/Array (     [35] => Prima immagine quadrata ) 
    18/Array (     [36] => Prima immagine quadrata ) 
    19/Array (     [37] => ciao 1 ) 
    20/Array (     [38] => canzone 1 ) 
    21/Array (     [39] => FAQFEWWW ) 
    22/Array (     [40] => titolo 1 ) 
    23/Array (     [41] => REGGA ) 
    24/Array (     [42] => No one ) 
    25/Array (     [43] => So What ) 
    26/Array (     [44] => titolo mp3 ) 
    27/Array (     [45] => prova 1 )
    

    quelli a destra del => sono cio che dovrebbe essere stampato


  • User

    io farei così:
    <?php

    $mysqli = new mysqli("$host", "$username", "$psw", "$dbname");
    $query = "SELECT dzdom_musicbattle_media.image_id, dzdom_musicbattle_media.title FROM dzdom_musicbattle_media WHERE dzdom_musicbattle_media.user_id=42";
    $result = $mysqli->query($query);

    while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
    $img = $row[0];
    $titolo = $row[1];

    echo $img . "/" . $titolo."\n";
    

    }
    ?>

    Non ha senso inserire il contenuto del feth in un array e poi successivamente parsare nuovamente l'array creata...
    il while percorre l'intero risultato della query fin quando trova elementi.. la dove non ne trova più termina il ciclo.


  • User Newbie

    No, a me serve nell'array perchè non devo solo stamparlo


  • User

    allora fai:
    <?php

    $mysqli = new mysqli("$host", "$username", "$psw", "$dbname");
    $query = "SELECT dzdom_musicbattle_media.image_id, dzdom_musicbattle_media.title FROM dzdom_musicbattle_media WHERE dzdom_musicbattle_media.user_id=42";
    $result = $mysqli->query($query);
    $aElement = array();
    while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
    $img = $row[0];
    $titolo = $row[1];
    $aElement[] = $img . "/" . $titolo;
    }

    foreach($aElement as $value){
    echo $value."\n";
    }

    ?>


  • User Newbie

    mi spiego meglio a me servirebbe un array di questo formato array=('elemento1'=>'elementoassociato1', 'elemento2'=>'elementoassociato2', 'elemento3'=>'elementoassociato3', 'elemento4'=>'elementoassociato4',); ma di n elementi che vanno ad inserirsi nel ciclo


  • User

    <?php

    $mysqli = new mysqli("$host", "$username", "$psw", "$dbname");
    $query = "SELECT dzdom_musicbattle_media.image_id, dzdom_musicbattle_media.title FROM dzdom_musicbattle_media WHERE dzdom_musicbattle_media.user_id=42";
    $result = $mysqli->query($query);
    $aElement = array();
    while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
    $img = $row[0];
    $titolo = $row[1];
    $aElement[] = array($img => $titolo);
    }

    foreach($aElement as $k =>$value){
    echo $value."\n";
    }

    ?>

    Scrivimi un po' che ti stampa??


  • User Newbie

    $aUnits=array();
    while ($row = $result->fetch_row()){
    $img=$row[0];
    $titolo=$row[1];
    $aUnits=array($img=>$titolo);
    }

    questo funziona ma salva solo l'ultimo elemento


  • User Newbie

    stampa
    Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array Array


  • User

    scusami invece di echo $value."\n"; fai print_r($value)."\n";


  • User Newbie

    stampa lo stesso array

    1/Array ( [1] => Besugo ) 2/Array ( [28] => prova ) 3/Array ( [15] => test1 ) 4/Array ( [16] => test Friday ) 5/Array ( [17] => upload1 ) 6/Array ( [18] => upload2 ) 7/Array ( [19] => upload3 ) 8/Array ( [22] => prova ) 9/Array ( [24] => test Monday ) 10/Array ( [29] => when love takes over ) 11/Array ( [26] => prova2 ) 12/Array ( [27] => titolo dell mp3 ) 13/Array ( [31] => Samoyed ) 14/Array ( [32] => puzzle ) 15/Array ( [33] => paint red ) 16/Array ( [34] => Snow ) 17/Array ( [35] => Prima immagine quadrata ) 18/Array ( [36] => Prima immagine quadrata ) 19/Array ( [37] => ciao 1 ) 20/Array ( [38] => canzone 1 ) 21/Array ( [39] => FAQFEWWW ) 22/Array ( [40] => titolo 1 ) 23/Array ( [41] => REGGA ) 24/Array ( [42] => No one ) 25/Array ( [43] => So What ) 26/Array ( [44] => titolo mp3 ) 27/Array ( [45] => prova 1 )

    ma noto che l'id immagine è quello contenuto tra parentesi non quello prima del /


  • User

    <?php

    $mysqli = new mysqli("$host", "$username", "$psw", "$dbname");
    $query = "SELECT dzdom_musicbattle_media.image_id, dzdom_musicbattle_media.title FROM dzdom_musicbattle_media WHERE dzdom_musicbattle_media.user_id=42";
    $result = $mysqli->query($query);
    $aElement = array();
    while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) {
    $img = $row[0];
    $titolo = $row[1];
    $aElement[] = array($img => $titolo);
    }

    foreach($aElement as $k =>$value){
    foreach(value as $kV => $vV){
    echo $kV.'/'.$vV."\n";
    }
    }

    ?>

    credo che ora debba funzionare


  • User Newbie

    Funziona tutto grazie mille!!!!


  • User

    bene 🙂