Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - problema con interfacciamento php...
Forum - PHP - problema con interfacciamento php...

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 18:50
Lunedì, 30/11/2009
Salve ragazzi, ho creato due tabelle in mysql:

mysql > CREATE TABLE giocatore (
     -> id_giocatore int(6) NOT NULL auto_increment,
     -> nome varchar(25) default ' ',
     -> cognome varchar(25) default ' ',
     -> data_nascita date default ' 0000-00-00 ',
     -> luogo_nascita varchar(25) NOT NULL default ' ',
     -> cittadinanza varchar(25) NOT NULL default ' ',
     -> peso int(3) NOT NULL default ' 0 ',
     -> altezza int(3) NOT NULL default ' 0 ',
     -> id_squadra int(5) default ' 0 ',
     -> goal_camp int(3) NULL,
     -> goal_uefa int(3) NULL,
     -> goal_mund int(3) NULL,
     -> convocato smallint(1) default ' 0 ',
     -> giocate_mund int(3) NOT NULL default ' 0 ',
     -> PRIMARY KEY (nome, cognome, data_nascita)
     -> );

mysql > CREATE TABLE squadra (
     -> id_squadra int(5) NOT NULL auto_increment,
     -> nome varchar(25) default ' ',
     -> marca varchar(25) default ' ',
     -> sponsor varchar(25) default ' ',
     -> allenatore varchar(25) default ' ',
     -> id_stadio int(3) default ' 0 ',
     -> PRIMARY KEY (nome)
     -> );
L'interfacciamneto per l'inserimento, modifica e cancellazione ha avuto successo.
Ora però vorrei unire le tabelle associando ad ogni nome e cognome di un giocatore una nome e allenatore della squadra.
So che il comando in mysql per fare ciò è:

SELECT giocatore.nome, giocatore.cognome,
       squadra.nome, squadra.allenatore FROM giocatore LEFT JOIN squadra ON
       giocatore.id_giocatore=squadra.id_squadra;
e funziona correttamente. Ora però il rpoblema nasce quando devo interfacciare in php la funzione JOIN.
Ho provato a fare [codice PHP]

$sql = "SELECT giocatore.nome, giocatore.cognome,
       squadra.nome, squadra.allenatore FROM giocatore LEFT JOIN squadra ON
       giocatore.id_giocatore=squadra.id_squadra";    
$query_giocatorejoin = @mysql_query($sql) or die (mysql_error());
while($giocatore = my_sql_fetch_array(query_giocatorejoin) {

  $nome = $giocatore['giocatore.nome'];
  $cognome = $giocatore['giocatore.cognome'];
  $allenatore = $squadra['squadra.allenatore'];
  echo "'<p>' . $nome "-" $cognome "-" $allenatore "-" . '</p>'";
}

Ma non mi visulizza nulla solo tre zeri " 000 ". 8-|Dove sbaglio?Grazie anticipatamente.  

Ultima modifica effettuata da giocala88 il 30/11/2009 alle 18:50
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 6:01
Martedì, 01/12/2009
Testo quotato

Postato originariamente da giocala88:
  $nome = $giocatore['giocatore.nome'];
  $cognome = $giocatore['giocatore.cognome'];
  $allenatore = $squadra['squadra.allenatore'];
  echo "'<p>' . $nome "-" $cognome "-" $allenatore "-" . '</p>'";



Quando prelevi i risultati da mysql_fetch_array non serve riscrivere il nome della tabella... cambia in:

Codice sorgente - presumibilmente Plain Text

  1. $nome = $giocatore['nome'];
  2. $cognome = $giocatore['cognome'];
  3. $allenatore = $giocatore['allenatore'];
  4. echo "'<p>' . $nome "-" $cognome "-" $allenatore "-" . '</p>'";



Riguardati bene la documentazione per questa ultima funzione (mysql_fetch_array), non credo che tu abbia capito bene come funziona... nel tuo codice fai riferimento ad una variabile "$allenatore" che non ho ben capito dove la peschi.

Al posto di usare $giocatore usa una variabile più descrittiva... di solito io chiamo la funzione così:

while($values = mysql_fetch_array($query)) ...

$values conterrà i valori.


Il mio blog: https://piero.dev
PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 15:24
Martedì, 01/12/2009
Mi scusi, ma forse non mi sono spiegato bene:
Io dovrei creare un collegamento tra le due tabelle, associando della tabella squadra il nome della squadra al nome e cognome della tabella giocatore.
Difatti in mysql questa funzione è tradotta con

SELECT giocatore.nome, giocatore.cognome, squadra.nome FROM squadra LEFT JOIN giocatore ON squadra.id_squadra = giocatore.id_giocatore;

Ora il mio problema è come faccio a visualizzare la funzione sopra descritta in php??8-|
Grazie...spero ci siamo capiti:)

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 15:58
Martedì, 01/12/2009
Mai hai provato a modifcare il codice come ti ho descritto?


Il mio blog: https://piero.dev
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2305
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 16:45
Martedì, 01/12/2009
giocala, non fare troppo affidamente alle guide, magari e solo un esempio di illustrazione di una funzione, ma ci sono metodi molto più efficaci appunto quello che ti sta consigliando piero.

Codice sorgente - presumibilmente PHP

  1. $sql = mysql_query("SELECT * FROM giocatore");
  2.  
  3. while($row = mysql_fetch_array($sql)) {
  4.  
  5. $sq = mysql_query("SELECT * FROM squadra WHERE id_squadra='$row[id_squadra]';");
  6. $rw = mysql_fetch_array($sq);
  7.  
  8.  
  9. //da qui in poi puoi utilizzare entrambe le tabelle
  10. // row per il giocatore  rw per la squadra
  11.  
  12.  
  13. echo "$row[nome] - $row[cognome] - Allenatore: <b>$rw[allenatore]</b><br>";
  14.  
  15. }




questo e quanto piero intendeva spigarti.
un solo ciclo che racchiude dati di una o piu tabelle in sincronia.
molto piu veloce e ordinato.


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 16:48
Martedì, 01/12/2009
Grazie mille..e mi scuso con piero...:asd::asd:

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 22:56
Martedì, 01/12/2009
Testo quotato


questo e quanto piero intendeva spigarti.
un solo ciclo che racchiude dati di una o piu tabelle in sincronia.
molto piu veloce e ordinato.



Assolutamente no, il metodo che hai postato non e' piu' veloce. Anzi.

Non c'e' dubbio che il metodo di TheJuster funziona, ma non e' la miglior via per farlo funzionare. Il codice da te utilizzato causera' molteplici chiamate a mysql_query e mysql_fetch_array (che non sono proprio leggere). Con l'aumentare dei record le performance si faranno sentire.

In questo caso usare le JOIN e' giustissimo ed eri nella giusta via. Ti mancava l'implementazione corretta in PHP.

Partendo dalla tua query: SELECT giocatore.nome, giocatore.cognome, squadra.nome FROM squadra LEFT JOIN giocatore ON squadra.id_squadra = giocatore.id_giocatore;

Intanto bisogna togliere le ambiguita': hai due campi "nome" (uno in giocatore e uno in squadra).

Per questo c'e' la parola AS.

SELECT giocatore.nome AS giocatore_nome, giocatore.cognome AS giocatore_cognome, squadra.nome AS squadra_nome FROM squadra LEFT JOIN giocatore ON squadra.id_squadra = giocatore.id_giocatore;

Il codice sarebbe qualcosa come:

Codice sorgente - presumibilmente Php

  1. $query = mysql_query("SELECT giocatore.nome AS giocatore_nome, giocatore.cognome AS giocatore_cognome, squadra.nome AS squadra_nome FROM squadra LEFT JOIN giocatore ON squadra.id_squadra = giocatore.id_giocatore",$link);
  2. while($values = mysql_fetch_array($query)){
  3.   echo $values['giocatore_nome'] . " " . $values['squadra_nome'];
  4. //....
  5. }




Ultima modifica effettuata da pierotofy il 01/12/2009 alle 22:58


Il mio blog: https://piero.dev
PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 11:10
Mercoledì, 02/12/2009
Grazie a tutti ragazzi..Però volevo dirti una cosa piero, il tuo metodo va benissimo solo che mi visualizza tutti i giocatori con la relativa squadra, se io volessi che al selezionare di una squadra mi visualizzi quel determinato giocatore e non gli altri?
dovrei creare un for all'interno del while?
Ciauz:)

PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 13:17
Mercoledì, 02/12/2009
Il problema ora è questo: Come faccio a visualizzare solo il giocatore associato alla squadra? Ho provato a fare un if($id_squadra == $id_giocatore) nel while postato giù in fondo al codice, ma niente non mi visualizza nulla (eppure è strano visto che nel selezionare la squadra mi escono solo le caratteristiche della stessa e non delle altre, vorrei che fosse così anche per la query giocatore)..Come mai?8-|
Ho provato a modificare //Funzione JOIN in

//Funzione JOIN
$query = @mysql_query("SELECT giocatore.nome as giocatore_nome, giocatore.cognome as  
                       giocatore_cognome, squadra.nome as squadra_nome FROM squadra
                       WHERE id_squadra IN ('$id_squadra')LEFT JOIN giocatore
                       WHERE id_giocatore IN ('$id_giocatore') ON
                       squadra.id_squadra = giocatore.id_giocatore");
if(!$query) {
  echo "Associazione fallita!";
}

mi da Associazione fallita!...bah?!:d


[Codice PHP:]

<head>
<title>Gestione Campionati di calcio(dabase_squadra)</title>

</head>

<body>

<?php

// Connettiti col server database
$dbcnx = @mysql_connect('localhost', 'root', 'admin');
if(!$dbcnx) {
  echo "Impossibile connettersi al Server";
}

// Seleziona il database
if(!@mysql_select_db('progettoBDSI')) {
  echo "Errore nel selezionare il database!..Controllare che il database esista!";
}

//Visualizza le informazioni relative alla squadra selezionata
$id_squadra = $_GET['id_squadra'];
$info_s = @mysql_query("SELECT * FROM squadra WHERE id_squadra IN ($id_squadra)");

//Visualizza le informazioni relative al giocatore
$id_giocatore = $_GET['id_giocatore'];
$info = @mysql_query("SELECT * FROM giocatore WHERE id_giocatore IN ('$id_giocatore')");
if(!$info &&
   !$info_s) {
  echo '<p>Errore nel selezionare i record!</p>';
}



//Eventuale errore
if(!$info_s)
  echo "Errore nel selezionare i record";

echo "<h1><b>Informazioni generali sulla squadra</b></h1><br/>";

//Visualizza i record di squadra
while($values_squadra = mysql_fetch_array($info_s)) {
  echo "<b>nome</b>: <i>$values_squadra[nome]</i><br/><br/>
        <b>marca maglia</b>: <i>$values_squadra[marca]</i><br/><br/>
        <b>sponsor squadra</b>: <i>$values_squadra[sponsor]</i><br/><br/>
        <b>allenatore</b>: <i>$values_squadra[allenatore]</i><br/><br/>";
}


echo "<br/><br/><b>FORMAZIONE:</b><br/><br/>";
//Funzione JOIN
$query = @mysql_query("SELECT giocatore.nome as giocatore_nome, giocatore.cognome as  
                       giocatore_cognome, squadra.nome as squadra_nome FROM squadra
                       LEFT JOIN giocatore ON
                       squadra.id_squadra = giocatore.id_giocatore");
if(!$query) {
  echo "Associazione fallita!";
}

//Visualizza gli elementi associati alla squadra selezionata
while($values = mysql_fetch_array($query)) {
   if($id_squadra == $id_giocatore) {
   echo "<i>" . $values['giocatore_nome'] . " " . $values['giocatore_cognome'] . "</i><br/><br/>";
} else {
    echo "Nn ci sono giocatori in questa squadra";
  }
}


?>
<p><a href="new_giocatore.php">Inserisci una rosa di giocatori</a></p>
<p><a href="index.php">Ritorna alla pagina iniziale</a></p>

</body>

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo