- Home
- Categorie
- Coding e Sistemistica
- PHP
- Estrarre dati mysl in array
-
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!
-
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
-
@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
AlfonsoCiao icefoxsoftware,
grazie per il tuo aiutoAllora 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
-
Puoi riscrivere tutto il codice? Sembra che hai un errore nella query.
-
@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>"; } }
-
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?
-
@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 è liberoe così via...
-
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 ...)?
-
@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.
-
$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?
-
@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 * FROMbookings
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
-
******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
-
Di dopo fatto l'array dovevi fare l'implode
Di nulla figurati
Ciao!