PDA

View Full Version : [php] lista dinamica


ectobsidian
23-07-2014, 15:36
Ciao ragazzi, ho la necessità di creare una lista dinamica.
In particolare ho fatto una tabella di prova in cui se il campo "pdf" è settato a si mi mette il mese, altrimenti no.
Es. metto tutti i mesi fino a luglio con pdf=si e avrò la tendina con gennaio, febbraio..ecc fino a luglio:
Il codice è questo:

$query2 = mysql_query("
SELECT mese
FROM tabella
WHERE pdf = 'si'
",$connessione);
// questo salva tutto in un array e quindi crea dinamicamente un menu a tendina
echo "<select name='sceltamonitor'>";

while($monitor = mysql_fetch_array($query2)) {
echo "<option value=\""."\">" .$monitor[0]. "</option>";
}
echo "</select>";



Quello che voglio aggiungere (e penso che sia abbastanza banale) è quello che ad ogni scelta (ad esempio gennaio o febbraio...) mi va in un sito diverso...
Non riesco ad aggiungere il link!
Ho provato mettendo il codice html:

<option value="http://www.google.it">Luglio </option>

Ma non funziona...
In php come aggiungo il link in questa linea di codice?

echo "<option value=\""."\">" .$monitor[0]. "</option>";


Grazie!

Daniels118
23-07-2014, 15:39
Per creare i link non si utilizza il tag <option> ma il tag <a>, cerca "html a" su google.

ectobsidian
23-07-2014, 15:45
Per creare i link non si utilizza il tag <option> ma il tag <a>, cerca "html a" su google.

Il tag option mi serve per avere i vari mesi...
come faccio ad incastrare il link all'interno? Si può fare? (cioè ogni mese un link diverso...)

Daniels118
23-07-2014, 21:22
Non ho capito cosa intendi, non mi risulta che esiste una legge che obbliga a scrivere i nomi dei mesi nei tag option, usa <a> e basta. Poi se hai una particolare esigenza spiega meglio quello che vuoi ottenere.

MicheleRaponi
24-07-2014, 08:24
Quello che voglio aggiungere (e penso che sia abbastanza banale) è quello che ad ogni scelta (ad esempio gennaio o febbraio...) mi va in un sito diverso...
Grazie!

Non puoi fare un redirect inserendo un link all'interno di ogni option.
Per avere una select con il comportamento che desideri devi utilizzare Javascript. Guarda qui: http://stackoverflow.com/a/5150486

ectobsidian
24-07-2014, 08:51
Non puoi fare un redirect inserendo un link all'interno di ogni option.
Per avere una select con il comportamento che desideri devi utilizzare Javascript. Guarda qui: http://stackoverflow.com/a/5150486

Senza Javascript non si può fare?
Non l'ho mai usato... :mc:
Praticamente devo fare questa lista html:
<!-- Paste this code into the BODY section of your HTML document -->
<select size="1" name="jumpit" onchange="document.location.href=this.value">
<option selected value="">Make a Selection</option>
<option value="http://www.javascriptsource.com/">The JavaScript Source</option>
<option value="http://www.javascript.com">JavaScript.com</option>
<option value="http://www.webdeveloper.com/forum/forumdisplay.php?f=3">JavaScript Forums</option>
<option value="http://www.scriptsearch.com/">Script Search</option>
<option value="http://www.webreference.com/programming/javascript/diaries/">The JavaScript Diaries</option>
</select>
Solo che il menù a tendina deve avere solo alcune scelte in base ad una query....

Daniels118
24-07-2014, 08:58
No, o usi javascript oppure metti dei normali link.
Potresti al massimo abbozzare qualcosa con i css, mettendo i link in un pannellino che compare con il mouse hover.

MicheleRaponi
24-07-2014, 09:04
Senza Javascript non si può fare?
Non l'ho mai usato... :mc:
Praticamente devo fare questa lista html:
<!-- Paste this code into the BODY section of your HTML document -->
<select size="1" name="jumpit" onchange="document.location.href=this.value">
<option selected value="">Make a Selection</option>
<option value="http://www.javascriptsource.com/">The JavaScript Source</option>
<option value="http://www.javascript.com">JavaScript.com</option>
<option value="http://www.webdeveloper.com/forum/forumdisplay.php?f=3">JavaScript Forums</option>
<option value="http://www.scriptsearch.com/">Script Search</option>
<option value="http://www.webreference.com/programming/javascript/diaries/">The JavaScript Diaries</option>
</select>
Solo che il menù a tendina deve avere solo alcune scelte in base ad una query....

Anche questo esempio usa JavaSript e comunque non ha niente di codice PHP.
Vista la poca dimestichezza, mi permetto di consigliarti, come accennato da Daniels118, questa soluzione: http://jsfiddle.net/Ry8P6/

ectobsidian
24-07-2014, 09:08
Non ho capito cosa intendi, non mi risulta che esiste una legge che obbliga a scrivere i nomi dei mesi nei tag option, usa <a> e basta. Poi se hai una particolare esigenza spiega meglio quello che vuoi ottenere.

Lo so, ma usando il tag a mi sparisce la lista...
Probabilmente non so usarlo...
Se metto il tag a invece che option non ho più i nomi...

echo "<option value=\""."\">" .$monitor[0]. "</option>";

Ma devo modificare qualcos'altro per farlo funzionare?

Daniels118
24-07-2014, 09:15
Che vuol dire "non ho più i nomi"?
La sintassi del tag <a> è la seguente:
<a href="link">testo</a>
Ovviamente a differenza del tag <option> i link non sono raggruppati in un menù a tendina.
Il menu a tendina non è fatto per presentare dei link, i tag non possono essere combinati.

ectobsidian
24-07-2014, 09:18
Che vuol dire "non ho più i nomi"?
La sintassi del tag <a> è la seguente:
<a href="link">testo</a>
Ovviamente a differenza del tag <option> i link non sono raggruppati in un menù a tendina.
Il menu a tendina non è fatto per presentare dei link, i tag non possono essere combinati.

Aaah, no io volevo fare il link nel menù a tendina... :cry:
(mantenendo la lista dinamica)

Daniels118
24-07-2014, 09:31
Allora valgono le considerazioni di prima, o usi javascript oppure crea un menu a tendina con i css (però questa è una soluzione abbastanza laboriosa, te la sconsiglio).

ectobsidian
01-08-2014, 09:34
Questo codice ha i link ma non riesco a fare le opzioni dinamiche...
<script type="text/javascript">
function change_url(val) {
window.location=val;
}
</script>
<select style="width:130px;" onchange="change_url(this.value);">
<option value="http://www.url1.com">Option 1</option>
<option value="http://www.url2.com">Option 2</option>
</select>

Cioè vorrei fare che ad es l'option 1 è visibile solo ad una certa condizione.
Come posso fare il controllo?

Non c'è qualche esempio in rete che posso adattare alle mie esigenze?

Daniels118
01-08-2014, 11:24
Quale sarebbe questa condizione? Non generavi le option con la query sul db?

ectobsidian
01-08-2014, 11:37
Quale sarebbe questa condizione? Non generavi le option con la query sul db?

Sì ma poi mi sono accorto che così avevo solo le label ma non riuscivo a mettere i link.
Mi è stato consigliato di usare javascript e di passare i valori a jquery...
Ho provato a fare due array in javascript, dovrei passarli a jquery per fare la form.
// array mesi
array_mesi=new Array("gennaio","febbraio","marzo");
for (i = 0; i < array_mesi.length; i++) {
document.write (array_mesi[i]+"<br>");
}
// array link
array_link=new Array("www.google.it","www.google.com","www.google.it");
for (i = 0; i < array_link.length; i++) {
document.write (array_link[i]+"<br>");
}

Non c'è qualche codice simile in rete? Io non ne sto trovando.

Daniels118
01-08-2014, 11:42
:doh:
Le istruzioni in javascript non dovevano sostituire quelle in php, ma dovevano essere un'aggiunta. Comunque, questi link sono fissi? Stanno sul database?

ectobsidian
01-08-2014, 12:46
:doh:
Le istruzioni in javascript non dovevano sostituire quelle in php, ma dovevano essere un'aggiunta. Comunque, questi link sono fissi? Stanno sul database?

Riassumo per fare un po' di chiarezza:
- ho fatto un sorgente php che tramite query mi genera un menu a tendina con le opzioni che voglio, ma non sono riuscito ad agganciare i link.
- ho quindi provato a fare la stessa cosa in javascript (anche senza query, giusto per provare, ma non sono riuscito...servirebbe jquery?

Quello che voglio ottenere è la seguente cosa:
- Dovrei creare un menu a tendina (con i mesi dell'anno) in cui la presenza del mese (ossia la scelta) dipende da una query su DB.
Ad es. facendo la query avrò i mesi da gennaio a luglio (ad es.).
A questo punto avrò il menu a tendina con le opzioni da gennaio a luglio e ogni mese ha un link (che è fisso, tipo per il mese di gennaio sarà una roba del genere www.sito.mese_gennaio.it).
Il link è fisso, cambierà solo il nome del mese... Devo solo agganciarlo.

Daniels118
01-08-2014, 13:17
Allora, devi creare prima di tutto un'associazione tra mese e link. Puoi farlo con una tabella sul db, un array associativo in php, o un array associativo in javascript.

Primo metodo (link su DB):
$query2 = mysql_query("
SELECT mese, link
FROM tabella
WHERE pdf = 'si'
",$connessione);
// questo salva tutto in un array e quindi crea dinamicamente un menu a tendina
echo "<select name='sceltamonitor'>";

while($monitor = mysql_fetch_array($query2)) {
echo "<option value=\"" . $monitor[1] . "\">" .$monitor[0]. "</option>";
}
echo "</select>";

Secondo metodo (array associativo in php):
$links = array(
'gennaio'=>'link gennaio',
//...
'dicembre'=>'link dicembre',
);
$query2 = mysql_query("
SELECT mese
FROM tabella
WHERE pdf = 'si'
",$connessione);
// questo salva tutto in un array e quindi crea dinamicamente un menu a tendina
echo "<select name='sceltamonitor'>";

while($monitor = mysql_fetch_array($query2)) {
echo "<option value=\"" . $links[$monitor[0]] . "\">" .$monitor[0]. "</option>";
}
echo "</select>";

Il terzo metodo è simile al secondo ma avviene lato client.

ectobsidian
01-08-2014, 13:43
Allora, devi creare prima di tutto un'associazione tra mese e link. Puoi farlo con una tabella sul db, un array associativo in php, o un array associativo in javascript.

Primo metodo (link su DB):
$query2 = mysql_query("
SELECT mese, link
FROM tabella
WHERE pdf = 'si'
",$connessione);
// questo salva tutto in un array e quindi crea dinamicamente un menu a tendina
echo "<select name='sceltamonitor'>";

while($monitor = mysql_fetch_array($query2)) {
echo "<option value=\"" . $monitor[1] . "\">" .$monitor[0]. "</option>";
}
echo "</select>";

Secondo metodo (array associativo in php):
$links = array(
'gennaio'=>'link gennaio',
//...
'dicembre'=>'link dicembre',
);
$query2 = mysql_query("
SELECT mese
FROM tabella
WHERE pdf = 'si'
",$connessione);
// questo salva tutto in un array e quindi crea dinamicamente un menu a tendina
echo "<select name='sceltamonitor'>";

while($monitor = mysql_fetch_array($query2)) {
echo "<option value=\"" . $links[$monitor[0]] . "\">" .$monitor[0]. "</option>";
}
echo "</select>";

Il terzo metodo è simile al secondo ma avviene lato client.

Il metodo dell'array php associativo mi sembra buono.
Ho visto che l'associazione avviene con successo ma per far reindirizzare al link come faccio?
Cioè, adesso che ho l'associazione, ad es. cliccando su gennaio vorrei che mi andasse al link associato....
Devo usare javascript?
Ad es. una cosa così?

<script type="text/javascript">
function goURL(url) {
window.open(url);
return false;
}
</script>

E poi modificando questa riga di codice:

echo "<select name='sceltamonitor' onchange="goURL(this.value);">

ectobsidian
01-08-2014, 14:09
Il metodo dell'array php associativo mi sembra buono.
Ho visto che l'associazione avviene con successo ma per far reindirizzare al link come faccio?
Cioè, adesso che ho l'associazione, ad es. cliccando su gennaio vorrei che mi andasse al link associato....
Devo usare javascript?
Ad es. una cosa così?

<script type="text/javascript">
function goURL(url) {
window.open(url);
return false;
}
</script>

E poi modificando questa riga di codice:

echo "<select name='sceltamonitor' onchange="goURL(this.value);">


Mi rispondo da solo xD
Risolto cambiando e mettendo questa linea di codice (con la funzione che ho messo sopra):
echo "<select name='sceltamonitor' onchange=goURL(this.value) >";

Daniels118
01-08-2014, 15:45
Si, volevo scriverlo ma ma me ne sono dimenticato, comunque l'importante è che hai risolto :)