Precedente :: Successivo |
Autore |
Messaggio |
frons Mortale devoto
Registrato: 08/11/07 11:31 Messaggi: 14 Residenza: Ancona
|
Inviato: 24 Nov 2007 15:41 Oggetto: MySQL --> PHP. Query incrociata ID+ANNO |
|
|
Salve, ho un database pieno di articoli, ciascuno di essi postato da un utente e ciascuno di essi ha la propria data (nel formato "d/m/Y").
Mi serve di costruire un form per la ricerca nel quale possa selezionare l'utente (dalla lista utenti) e l'anno (in una lista che vada dal 2003 all'anno attuale).
Come risultato mi deve dare solamente la lista di articoli postati da quel tale utente nell'anno selezionato.
Qualcuno può postare il codice necessario o uno simile in modo che possa capire come procedere?
(Per favore niente rimandi ad altri topic o simili, ho già controllato in giro da solo) |
|
Top |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 24 Nov 2007 19:27 Oggetto: |
|
|
Iniziamo a definire alcune ipotesi che tu adatterai alla tua situazione.
1) Tabella utenti: Utenti(Id,Nome) con chiave Id. Tu avrai più campi nella tabella ma qui noi siamo interessati a questi due.
2) Tabella degli articoli: Articoli(Id,Utente,Data,Testo) con chiave Id e la data memoriazzata come Y-m-d.
3) Supponiamo che la form di ricerca sia nel file Cerca.php e questa ciclerà su Risultati.php
Non ti scrivo il codice html intero delle pagine ma solo quello delle parti che ci interessano per la soluzione al problema.
Nel file Cerca.php dovrai avere qualcosa del tipo:
In testa alla pagina scriviamo il codice php per connetrci al db
<?
$MyConn=mysql_connect('localhost','nomeutente','passutente') or die('Errore');
$MyDB=mysql_select_db('nomedb') or die('Errore');
?>
....
....
....
poi creiamo il form tramite:
<form name="Frm" method="get" action="Risultati.php">
Utente:
<select name="d_Utente">
<option value="-1">-- Scegli un utente -- </option>
<?
/*
Qui faccio la query per per tirare fuori la lista di utenti
*/
$Select
= "SELECT Id,Nome FROM Utenti ORDER BY Nome ASC ";
$Rs=mysql_query($Select);
// se il recordset è buono e non vuoto, aggiungo le voci alla select
if ($Rs && mysql_num_rows($Rs)>0)
{
while ($MyRow=mysql_fetch_array($Rs))
{
print '<option value="' . $MyRow['Id'] .'">' . $MyRow['Nome'] . '</option>';
}
}
?>
</select>
<br>
Anno:
<select name="d_Anno">
<option value="0000">-- Scegli l'anno --</option>
<?
for ($i=2003;$i<=date('Y');++$i)
{
print '<option value="' . $i . '">' . $i . '</option>';
}
?>
</select>
<br>
<input type="submit" name="Command" value="Cerca">
</form>
Risultati.php avrà invece la forma che segue:
In testa alla pagina scriviamo il codice phpper connetrci al db
<?
$MyConn=mysql_connect('localhost','nomeutente','passutente') or die('Errore');
$MyDB=mysql_select_db('nomedb') or die('Errore');
?>
....
....
....
Poi da qualche altra parte, dove vuoi vedere l'elenco scriviamo qualcosa del tipo:
<?
// tiro fuuri glli articoli dell'utente nell'anno scelto
$Select
= "SELECT * FROM Articoli WHERE Id='" . $_REQUEST['d_Utente'] . '" AND DATE_FORMAT(Data,'%Y')='" . $_REQUEST['d_Anno'] . '" ORDER BY Data DESC ";
$Rs=mysql_query($Select);
// se il recordset è buono e non vuoto,creo la lista degli articoli
if ($Rs && mysql_num_rows($Rs)>0)
{
while ($MyRow=mysql_fetch_array($Rs))
{
print $MyRow['Articolo'];
}
}
?>
Quello che ti ho scritto non è il massimo, però credo che come schema da seguire vada bene.
Ovviamente sarebbe il caso che tu adattassi il tutto in modo che a video venga impaginato bene, magari dentro ad una tabella con tante righe quanti sono gli articoli e per ognuno scrivere a fianco la sua data.
In oltre, dovrai al posto di localhost, nomeutente, passutente e nomedb nelle connessioni al db, scrivere
i valori corretti dei parametri.
Spero di esserti stato di aiuto
P.S. potrebbero esserci errori di sintassi perchè hop scritto un po' in fretta perchè sono di volata.... |
|
Top |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 24 Nov 2007 19:29 Oggetto: |
|
|
Ecco, appunto sugli errori, dovresti cambiare la riga:
print $MyRow['Articolo'];
conb questa
$MyRow['Articolo'] . '<br><br>';
in modo da mandare a capo due volte dopo ogni articolo |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11559 Residenza: Tokelau
|
Inviato: 26 Nov 2007 16:45 Oggetto: Re: MySQL --> PHP. Query incrociata ID+ANNO |
|
|
frons ha scritto: | Mi serve di costruire un form per la ricerca nel quale possa selezionare l'utente (dalla lista utenti) e l'anno (in una lista che vada dal 2003 all'anno attuale). |
per la prima interrogherei la tabella degli articoli facendo una cosa tipo
Codice: | SELECT DISTINCT NomeUtente FROM TabellaArticoli ORDER BY NomeUtente |
per la seconda userei la funzione di PHP date()... e quindi farei un ciclo da 2003 a date("Y") |
|
Top |
|
|
frons Mortale devoto
Registrato: 08/11/07 11:31 Messaggi: 14 Residenza: Ancona
|
Inviato: 27 Nov 2007 15:11 Oggetto: |
|
|
freemind ha scritto: | Ecco, appunto sugli errori, dovresti cambiare la riga:
print $MyRow['Articolo'];
conb questa
$MyRow['Articolo'] . '<br><br>';
in modo da mandare a capo due volte dopo ogni articolo |
Ti ringrazio, ancora non ho avuto modo di provare con il sistema che hai suggerito tu, ma non riesco a capire una cosa: a cosa si riferisce l'argomento Articolo nella variabile $MyRow |
|
Top |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 27 Nov 2007 17:59 Oggetto: |
|
|
Scusa, in realtà all'inizio volevo fare un esempio con la tabella Articoli fatta nel modo seguente:
Articoli(Id,Utente,Data,Articolo)
ma poi ho cambiato con:
Articoli(Id,Utente,Data,Testo).
Di fatto la riga deve diventare:
$MyRow['Testo'] . '<br><br>';
Ho sempre troppa fretta purtroppo, prima o poi cambio lavoro :) ! |
|
Top |
|
|
|
|
Non puoi inserire nuovi argomenti Non puoi rispondere a nessun argomento Non puoi modificare i tuoi messaggi Non puoi cancellare i tuoi messaggi Non puoi votare nei sondaggi
|
|