• User Attivo

    Estrarre dati mysl in array

    Ciao a tutti,
    ho un problema con la creazione di array da database,
    al momento creato manualmente con l'inserimento dei numeri 8, 2 e 3

    [PHP]
    $query = "SELECT * FROM tabella WHERE id = ".clean($_POST['send'])."";
    $result = mysql_query($query, $conn) or die(mysql_error());
    $num = mysql_num_rows ($result);

    $new_array = array('8','2','3');
    $array = implode(",", $new_array);
    $conta = count($array);
    for($i=0;$i<$conta;$i++)
    {
    $contents.="".$array."";
    }

    [/PHP]

    Come posso fare per creare l'array con i dati estratti dal database?

    grazie!


  • User

    Ciao cla83
    Per fare le cose semplici, potresti usare la mysql_fetch_array(), passando il parametro MYSQL_ASSOC
    Facendo in questo modo, la funzione ti restituisce un array associativo, quindi se i campi del tuo database si chiamano nome e cognome, per ogni record ti riferirai con un array in questo modo:
    echo $result['nome']

    
    <?php
    mysql_connect("localhost", "utente_mysql", "password_mysql") or
        die("Connessione non riuscita: " . mysql_error());
    mysql_select_db("mio_db");
    
    $risultato = mysql_query("SELECT id, nome FROM mia_tabella");
    
    while ($riga = mysql_fetch_array($risultato, MYSQL_ASSOC)) {
        printf ("ID: %s  Nome: %s", $riga["id"], $riga["name"]);
    }
    ?>
    
    

    spero di essere stato di aiuto
    Alfonso


  • User Attivo

    @icefoxsoftware said:

    Ciao cla83
    Per fare le cose semplici, potresti usare la mysql_fetch_array(), passando il parametro MYSQL_ASSOC
    Facendo in questo modo, la funzione ti restituisce un array associativo, quindi se i campi del tuo database si chiamano nome e cognome, per ogni record ti riferirai con un array in questo modo:
    spero di essere stato di aiuto
    Alfonso

    Ciao icefoxsoftware,
    grazie per il tuo aiuto 🙂

    Allora in realtà nell'array saranno contenuti solo degli id numerici.

    Ho provato a modificare il ciclo while in questo modo per concatenarlo con il resto del codice

    
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        $contents.= $row["id"];
    }
    
    

    ma ottengo
    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 ')' at line 1


  • User

    Puoi riscrivere tutto il codice? Sembra che hai un errore nella query.


  • User Attivo

    @icefoxsoftware said:

    Puoi riscrivere tutto il codice? Sembra che hai un errore nella query.

    Scrivo il codice completo reale di quello che vorrei ottenere,
    in teoria è un form dove l'utente inserisce una data d arrivo e una di
    partenza, con la prima query estrggo tutti i valori trovati e con la seconda
    stampo a video l'inverso, cioè i dati non contenuti nell'array.

    Posto il codice iniziale, quello funzionante:

    
    mysql_select_db($database_conn, $conn);
    function pulisci($str) {
      if (get_magic_quotes_gpc()) $str = stripslashes($str);
      return mysql_real_escape_string(htmlentities($str));
    }
    
    $arrivo =  date('Y-m-d',strtotime(str_replace("/","-", pulisci($_POST['arrivo']))));
    $partenza =  date('Y-m-d',strtotime(str_replace("/","-", pulisci($_POST['partenza']))));
    
    $query = "SELECT * FROM `bookings`
              LEFT JOIN bookings_items ON bookings.id_item = bookings_items.id
              WHERE (the_date BETWEEN '".$arrivo."' AND '".$partenza."') 
              GROUP BY id_item
              ORDER BY list_order ASC";
              
    $result = mysql_query($query, $conn) or die(mysql_error());
    $num = mysql_num_rows ($result); 
    
    $new_array = array('8','2','3');
    $array = implode(",", $new_array);
    
    
    $conta = count($array);
    for($i=0;$i<$conta;$i++){
    $contents.="".$array."";
    }
    
    
    
    if ($num == "0") { 
    $contents.= "<p style=\"font-size:22px; color:#0C0;\">Le Stanze sono tutte libere per questa data </p>";    
    }
    
    $query2 = "SELECT * FROM bookings_items WHERE id NOT IN ($array)";
    $result2 = mysql_query($query2, $conn) or die(mysql_error());
    
    
    while ($row2 = mysql_fetch_array($result2)) {
    if ($row2['desc_it'] != "0") { 
    $contents.= "<p style=\"font-size:22px\">La Stanza ".$row2['desc_it']." è libera</p>";
    }
    }
    
    

  • User

    usa MYSQL_ASSOC con mysql_fetch_array (oppure MYSQL_NUM che ti crea un array numerato).
    Però non capisco una cosa: cosa vuoi fare di preciso?


  • User Attivo

    @icefoxsoftware said:

    usa MYSQL_ASSOC con mysql_fetch_array (oppure MYSQL_NUM che ti crea un array numerato).
    Però non capisco una cosa: cosa vuoi fare di preciso?

    Lo script dovrebbe verificare in base alle date scelte la disponibilità.

    L'utente inserisce data di arrivo e partenza e all'invio nella pagina risultati (quella postata sopra),
    la prima query dovrebbe estrarre tutti gli id delle stanze già occupate,
    creando l'array come postato inizialmente per esempio array(1,4,7,8);

    e con la seconda query cioè questa:
    $query2 = "SELECT * FROM bookings_items WHERE id NOT IN ($array)";

    vorrei stampare a video gli id inversi, cioè quelli liberi, in questo caso stamperebbe a video

    id 2 è libero
    id 3 è libero
    id 5 è libero
    id 9 è libero
    id 10 è libero

    e così via...


  • User

    Si questo l'avevo capito, però non capisco dove ti serve l'array. Cioè tu praticamente vuoi che come risultato della prima query ti escono già in ordine i risultati? (arr[0]=1, arr[1]=3 ...)?


  • User Attivo

    @icefoxsoftware said:

    Si questo l'avevo capito, però non capisco dove ti serve l'array. Cioè tu praticamente vuoi che come risultato della prima query ti escono già in ordine i risultati? (arr[0]=1, arr[1]=3 ...)?

    No in realtá l'array mi servirebbe solo per poi effettuare la query per ottenere gli id liberi, io avevo pensato di fare in questo modo,ma non so se c'é un metodo migliore.


  • User
    
    
    $query = "SELECT * FROM `bookings`           LEFT JOIN bookings_items ON bookings.id_item = bookings_items.id           WHERE (the_date BETWEEN '".$arrivo."' AND '".$partenza."')            GROUP BY id_item           ORDER BY list_order ASC";            $result = mysql_query($query, $conn) or die(mysql_error());
    
    

    Ora il risultato di result (gli id occupati) li vuoi in un array. Fai in questo modo:

    
    while($ris = mysql_fetch_array($result, MYSQL_ASSOC)) 
    {
      $array[] $ris["id"];
    }
    //L'array $array contiene tutti gli id della query precedente
    
    

    Era questo che volevi?


  • User Attivo

    @icefoxsoftware said:

    Era questo che volevi?

    Ho modificato così il codice perché mancava '=' nel codice, (giusto?)
    però non funzione, ho l'errore :
    Unknown column 'Array' in 'where clause'

    [PHP]
    $query = "SELECT * FROM bookings
    LEFT JOIN bookings_items
    ON bookings.id_item = bookings_items.id
    WHERE (the_date BETWEEN '".$arrivo."' AND '".$partenza."')
    GROUP BY id_item
    ORDER BY list_order ASC";
    $result = mysql_query($query, $conn) or die(mysql_error());
    $num = mysql_num_rows ($result);

    while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $array[] = $row["id"];
    }

    if ($num == "0") {
    $contents.= "<p style="font-size:22px; color:#0C0;">Le Stanze sono tutte libere per questa data </p>";
    }

    $query2 = "SELECT * FROM bookings_items WHERE id NOT IN ($array)";
    $result2 = mysql_query($query2, $conn) or die(mysql_error());
    .....
    [/PHP]

    grazie 1000 ancora per l'aiuto 🙂


  • User Attivo

    ******Risolto!


    ******Ho modificato il codice in questo modo:

    [php]
    if ($num == "0") {
    $contents.= "<p style="font-size:22px; color:#0C0;">Le Stanze sono tutte libere per questa data </p>";
    }
    else {
    while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $array[] = $row["id"];}
    $query2 = "SELECT * FROM bookings_items WHERE id NOT IN (".implode(',',$array).")";
    $result2 = mysql_query($query2, $conn) or die(mysql_error());
    while ($row2 = mysql_fetch_array($result2)) {if ($row2['desc_it'] != "0") {
    $contents.= "<p style="font-size:22px; color:#0C0;">La Stanza ".$row2['desc_it']." è libera</p>";
    }
    }
    }[/php]

    grazie 1000000 icefoxsoftware


  • User

    Di dopo fatto l'array dovevi fare l'implode 😄
    Di nulla figurati 😉
    Ciao!