Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
PHP tabelle e MySQL
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet
Precedente :: Successivo  
Autore Messaggio
frons
Mortale devoto
Mortale devoto


Registrato: 08/11/07 11:31
Messaggi: 14
Residenza: Ancona

MessaggioInviato: 17 Dic 2007 23:13    Oggetto: PHP tabelle e MySQL Rispondi citando

Salve, ho un problema che non riesco a risolvere e che mi dà un sacco di rogne. Ho due (in realtà sono di più ma ne posto solo due tanto le relazioni che le legano sono sempre le stesse) tabelle su db MySQL:

Codice:
CREATE TABLE `autori` (
  `id` int(2) NOT NULL auto_increment,
  `nome` varchar(255) default NULL,
  `nazione_id` int(3) default NULL,
  `genere_id` int(3) default NULL,
  `web` varchar(255) default NULL,
  `email` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;

CREATE TABLE `dischi` (
  `id` int(2) NOT NULL auto_increment,
  `autore_id` int(2) default NULL,
  `titolo` varchar(255) default NULL,
  `data` date default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;


Le due tabelle come si può vedere sono "collegate" dalla relazione autore_id = autori.id

In una pagina con un form di ricerca seleziono da un menù posso scegliere filtrare i dati per utente ($aim), per stringa di ricerca ($seachstring) o per tutte e due le cose:

Codice:
$select = 'SELECT DISTINCT id, titolo, data, autore_id';
   $from   = ' FROM dischi';
   $where  = ' WHERE 1=1'; //condizione sempre vera eventualmente da implementare sotto

    $aid = $_POST['aid'];
    if ($aid != '') { // Un autore è stato selezionato nel form perché $aid non è vuota
     $where .= " AND autore_id='$aid'";
        }

      $searchtext = $_POST['searchtext'];
      if ($searchtext != '') { // E' stata selezionata una ricerca su stringa visto che $searchtext non è vuota
        $where .= " AND titolo LIKE '%$searchtext%'";
        }


Passo poi tutto alla pagina successiva che costruisce la tabella:

Codice:
$dischi= @mysql_query($select . $from . $where);
            if (!$dischi) {
                  echo '</table>';
                  exit('<p>Errore!<br />'.
                  'Errore: ' . mysql_error() . '</p>');
            }

            while ($disc= mysql_fetch_array($dischi)) {
              echo "<tr valign='top'>\n";
              $id = $disco['id'];
              $titolo= htmlspecialchars($disco['titolo']);
              $data= $disco['data'];
              $autore_id = htmlspecialchars($disco['autore_id']);
              echo "<td>$autore_id</td>\n";
              echo "<td>$titolo</td>\n";
              echo "<td>$data</td>\n";
              echo "</tr>\n";
    }


Premetto che funziona tutto, ma vorrei capire come posso fare, una volta formatasi e popolatasi la tabella, ottenere al posto del valore INT di autore_id quello testuale VARCHAR di autori.nome

Questa è una mia grossa lacuna e sarei contentissimo se riusciste a farmi degli esempi pratici, così che possa capire bene!!

Very Happy
Top
Profilo Invia messaggio privato HomePage MSN
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11553
Residenza: Tokelau

MessaggioInviato: 18 Dic 2007 10:05    Oggetto: Re: PHPe MySQL Rispondi citando

frons ha scritto:
vorrei capire come posso fare, una volta formatasi e popolatasi la tabella, ottenere al posto del valore INT di autore_id quello testuale VARCHAR di autori.nome


Nella query devi mettere in join le due tabelle attraverso i due campi preposti, in questo modo

Codice:
SELECT d.id, titolo, data, nome
FROM dischi d INNER JOIN autori a ON d.autore_id=a.id


a quel punto leggi in una variabile il campo così, come gli altri

Codice:
$autore = htmlspecialchars($disco['nome']);
Top
Profilo Invia messaggio privato HomePage
frons
Mortale devoto
Mortale devoto


Registrato: 08/11/07 11:31
Messaggi: 14
Residenza: Ancona

MessaggioInviato: 18 Dic 2007 12:13    Oggetto: Re: PHPe MySQL Rispondi citando

SverX ha scritto:
Codice:
SELECT d.id, titolo, data, nome
FROM dischi d INNER JOIN autori a ON d.autore_id=a.id


Scusa l'ignoranza, ma queste d e a da cosa derivano?
Top
Profilo Invia messaggio privato HomePage MSN
Franto
Semidio
Semidio


Registrato: 14/06/05 15:05
Messaggi: 367
Residenza: como (provincia)

MessaggioInviato: 18 Dic 2007 12:42    Oggetto: Re: PHPe MySQL Rispondi citando

frons ha scritto:


Scusa l'ignoranza, ma queste d e a da cosa derivano?


SverX ha scritto:
Codice:
SELECT d.id, titolo, data, nome
FROM dischi d INNER JOIN autori a ON d.autore_id=a.id


nella seconda riga dici che la tabbela autori la chimi a
e la tabella dischi la chiami d

e quando scrivi ad esempio
Codice:
d.id
gli dici prendi il campo id della tabella d

ecc ecc
Top
Profilo Invia messaggio privato HomePage
frons
Mortale devoto
Mortale devoto


Registrato: 08/11/07 11:31
Messaggi: 14
Residenza: Ancona

MessaggioInviato: 18 Dic 2007 13:37    Oggetto: Rispondi citando

Un paio di cose non mi sono ancora chiare:

1) l'indice nome da $autore = htmlspecialchars($disco['nome']) da cosa lo tiro fuori? Non saprei dove fare un altro while...

2) quando vado ad assegnare a $data i suoi valori $data = $disco['data'] qual'è la sintassi per far si che in output la data esca in questa forma: dd/mm/yy ?

Question
Top
Profilo Invia messaggio privato HomePage MSN
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11553
Residenza: Tokelau

MessaggioInviato: 18 Dic 2007 14:35    Oggetto: Rispondi citando

frons ha scritto:
l'indice nome da $autore = htmlspecialchars($disco['nome']) da cosa lo tiro fuori? Non saprei dove fare un altro while...


nello stesso while, leggi tutti i campi del record Smile

frons ha scritto:
quando vado ad assegnare a $data i suoi valori $data = $disco['data']qual'è la sintassi per far si che in output la data esca in questa forma: dd/mm/yy ?


Codice:
$data = date ("d/m/y",$disco['data']);


per dettagli sulla funzione date() guarda qui Smile
Top
Profilo Invia messaggio privato HomePage
frons
Mortale devoto
Mortale devoto


Registrato: 08/11/07 11:31
Messaggi: 14
Residenza: Ancona

MessaggioInviato: 18 Dic 2007 16:24    Oggetto: Rispondi citando

Grazie mille a tutti: adesso mi è tutto più chiaro (anche se nell'output della data, se metto la funzione date, mi restituisce 01/01/1970 come risultato) Very Happy
Top
Profilo Invia messaggio privato HomePage MSN
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11553
Residenza: Tokelau

MessaggioInviato: 18 Dic 2007 17:04    Oggetto: Rispondi citando

frons ha scritto:
Grazie mille a tutti: adesso mi è tutto più chiaro (anche se nell'output della data, se metto la funzione date, mi restituisce 01/01/1970 come risultato) Very Happy


prova a cambiare la query in

Codice:
SELECT d.id, titolo, UNIX_TIMESTAMP(data), nome
FROM dischi d INNER JOIN autori a ON d.autore_id=a.id
Top
Profilo Invia messaggio privato HomePage
frons
Mortale devoto
Mortale devoto


Registrato: 08/11/07 11:31
Messaggi: 14
Residenza: Ancona

MessaggioInviato: 18 Dic 2007 18:32    Oggetto: Rispondi citando

Così non mi cambiava nulla, allora ho fatto in un'altra maniera poco elegante sicuramente, ma il risultato è quello voluto.

Grazie ancora! Grazie
Top
Profilo Invia messaggio privato HomePage MSN
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11553
Residenza: Tokelau

MessaggioInviato: 19 Dic 2007 12:48    Oggetto: Rispondi citando

frons ha scritto:
ho fatto in un'altra maniera poco elegante sicuramente, ma il risultato è quello voluto.


Illustracela comunque Smile
Top
Profilo Invia messaggio privato HomePage
frons
Mortale devoto
Mortale devoto


Registrato: 08/11/07 11:31
Messaggi: 14
Residenza: Ancona

MessaggioInviato: 19 Dic 2007 14:22    Oggetto: Rispondi citando

Tabella NEWS

Codice:
CREATE TABLE `news` (
  `id` int(3) NOT NULL auto_increment,
  `titolo` varchar(255) default NULL,
  `data` date NOT NULL default '0000-00-00',
  `corpo` varchar(255) default NULL,
  `link` varchar(255) default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;


E query su essa e ho fatto in modo di farmi generare delle variabili in base agli indici di $news["data"] (non so bene la terminologia):

Codice:

$query1 = "SELECT * FROM news ORDER BY id DESC";
$risultato1 = mysql_query($query1) or die("");
while ($news = mysql_fetch_array($risultato1, MYSQL_ASSOC)) {
    $data_news = $news["data"];
    $anno = $data_news[0].$data_news[1].$data_news[2].$data_news[3];
    $mese = $data_news[5].$data_news[6];
    $giorno = $data_news[8].$data_news[9];
    $data_news = mktime(0,0,0,$mese,$giorno,$anno);


Così facendo mi è bastato fare solamente un print

Codice:
<?php print date("d/m/Y", $data_news)?>


ed eventualmente avevo già subito a disposizione una variabile $anno se, per ipotesi, avessi voluto riportare solamente l'anno, invece di tutta la data per esteso. Problemi non me ha dati, errori nemmeno, magari sembra un po' incasinato però funziona...
Top
Profilo Invia messaggio privato HomePage MSN
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 11553
Residenza: Tokelau

MessaggioInviato: 19 Dic 2007 15:28    Oggetto: Rispondi

in pratica hai riscritto la funzione strtotime()

la stessa cosa:
Codice:
print date("d/m/Y", strtotime($news["data"]) );
Top
Profilo Invia messaggio privato HomePage
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Linguaggi per Internet Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
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