Recupero dati da DB ( mi si moltiplicano i dati )

Ciao a tutti, dato che sono nuovo e abbastanza inesperto,

c'è qualche anima pia che sa risolvermi questo problemino.....

in una pagina ho un form che inserisce nel db 2 valori in 2 tabelle diverse, nominate iscritti e abbonamenti.

A database vuoto inserisco nel modulo del form "nome" Marco ( che viene inviato alla tabella iscritti ) e nel modulo costo 2000 che viene inviato alla tabella abbonamento.

quando recupro i dati del primo inserimento è tutto ok,

ma se poi torno alla pagina del form e inserisco nuovi dati ( ad es.Paola nel nome e 1500 nel costo,

quando dò il visualizza mi mostra una tabella con 2 Marco (2000 e 1500) e due Paola (2000 e 1500).

Vi posto in calce il codice della pagina:

<?php

// richiamo il file di configurazione

require 'config.php';

// richiamo lo script responsabile della connessione a MySQL

require 'connect.php';

// preparo la query

$query = "SELECT abbonamento.costo, iscritti.nome FROM abbonamento, iscritti";

// invio la query

$result = mysql_query($query) or die("Errore nella query $query: " . mysql_error());

echo '

<table border="1">

<tr>

<th>NOME</th>

<th>COSTO</th>

</tr>';

while ($row = mysql_fetch_assoc($result)){

$nome = htmlentities($row['nome']);

$costo = htmlentities($row['costo']);

echo "<tr>

<td>$nome</td>

<td>$costo</td>

</tr>";

}

echo '</table>';

// libero la memoria di PHP occupata dai record estratti con la SELECT

mysql_free_result($result);

?>

Grazie in anticipo a chiunque abbia voglia di aiutarmi.

inviato 7 anni fa
bruce1964
X 0 X

Il problema è nella query:

SELECT abbonamento.costo, iscritti.nome FROM abbonamento, iscritti

perché non contiene la condizione con cui collegare le tabelle abbonamento e iscritti, condizione che va espressa con una WHERE

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni, innanzi tutto grazie per la tua risposta,

ma ho passato tutto il giorno a cercare di venirne a una, purtroppo invano,

potresti farmi un esempio, io le ho provate tutte.......

$query = "SELECT nome, costo FROM iscritti, abbonamento WHERE nome='nome' and costo =''costo";

//risultato mi evidenzia solo l'intestazione della tabella NOME e COSTO ma sotto non inserisce i valori immessi dal form ( che comunque vengono regolarmente inseriti nel DB

$query = "SELECT nome, costo FROM iscritti, abbonamento WHERE nome='id_nome' and costo ='id_costo'";

//stessa cosa

$query = "SELECT nome, costo FROM iscritti, abbonamento WHERE nome='$nome' and costo ='$costo'";

//appare questo messaggio di errore:

Notice: Undefined variable: nome in C:\wamp\www\www\Due Formin\paginasemplificata.php on line 8

Notice: Undefined variable: costo in C:\wamp\www\www\Due Formin\paginasemplificata.php on line 8

io davvero non riesco ad arrivarci........

risposto 7 anni fa
bruce1964
X 0 X

Puoi riportare la struttura delle tabelle iscritti e abbonamento?

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

La struttura l'ho portata a soli 2 campi per tabella, per poterci studiare sopra meglio, quindi troverai solo ID e un campo "NOME" in Iscritti e ID e un campo "COSTO" in abbonamento, sotto trovi i parametri:

Tabella Iscritti

Campo        Tipo           Collation         Attributi       Null       Predefinito                    Extra              Azione

  id             int(11)                                                   No          Nessuno            auto_increment      Primar Key

Nome      varchar(50)  latin1_swedish_ci                No          Nessuno               

Tabella Abbonamento

Campo       Tipo            Collation          Attributi       Null       Predefinito                    Extra               Azione

id              int(11)                                                      No         Nessuno              auto_increment               

costo     varchar(50) latin1_swedish_ci                     No         Nessuno         

Ciao e grazie in anticipo     

risposto 7 anni fa
bruce1964
X 0 X

I  record che inserisci in "iscritti" sono in relazione con quelli che inserisci in "abbonamento"? Se si, secondo quale criterio? Magari hanno lo stesso "id"?

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Ciao, i campi Nome e Costo hanno entrambi il campo ID al quale ho assegnato il valore di chiave primaria,

infatti scusa ma mi sono accorto ora che per il costo non ti avevo segnalato l'id come chiave primaria.

Sono agli inizi e tramite qualche libro e qualche forum sto cercando di studiare un pò il linguaggio PHP e le sue relazioni con MySql.

Ciau ciau

risposto 7 anni fa
bruce1964
X 0 X

ok ma non mi hai detto se gli id inseriti in iscritti sono uguali a quelli inseriti in abbonamento, in modo da avere una relazione tra le due tabelle. Questa relazione è fondamentale per estrarre un record da una tabella ed il relativo record dall'altra tabella, infatti mysql vuole sapere nella SELECT secondo quale criterio deve accoppiare i record delle due tabelle.

Tu nella select non hai specificato questa relazione (es. i 2 id sono uguali) e quindi mysql per ciascun record della prima tabella ha associato tutti i record della seconda tabella, moltiplicando i risultati. una specie di "tutti con tutti"

 :bye:

risposto 7 anni fa
Gianni Tomasicchio
X 0 X

Ma per uguali cosa intendi? Che hanno gli stessi Valori ed Attributi?

Ad esempio ora sono entrato in phpadmin ed ho provato a rinominare i campi id in id_nome e id_costo ed ho riformulato la query in questo modo,

$query = "SELECT nome, costo FROM iscritti, abbonamento WHERE id_costo=id_nome";

ma il risultato è che mi evidenzia solo l'intestazione senza i dati immessi dal form

ho provato a fare anche così

$query = "SELECT nome, costo FROM iscritti, abbonamento WHERE id_costo=>0;

ma in questo modo torna a duplicarmi i dati.............. sto impazzendo ahahahaha

risposto 7 anni fa
bruce1964
X 0 X

Non c'è proprio nessuno che riesce ad aiutarmi?

 :'(

risposto 7 anni fa
bruce1964
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda