due query per due tabelle

efisio

Utente Attivo
5 Ago 2008
95
0
0
qualcuno potrebbe aiutarmi a comprendere come posso inserire i dati in due tabelle dello stesso DB utilizzando un form html?
Premetto che con una singola tabella non ho problemi, ma con due non riesco nell'intento.
Non avendo un gran che di conoscenze, ho pensato che ci volessero due query rivolte a due tabelle distinte, ma non funziona????
vi posto le query di seguito:

$query="INSERT INTO iscritti ( nome, cognome, provincia, via, mail, localita, telefono) VALUES ('$nome', '$cognome', '$provincia', '$via', '$mail, '$localita', '$telefono')";
$query="INSERT INTO discipline ( discipline) VALUES ('$discipline')";

Che fare?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao, prova così al massimo non funzia

PHP:
$query1="INSERT INTO iscritti ( nome, cognome, provincia, via, mail, localita, telefono) VALUES ('$nome', '$cognome', '$provincia', '$via', '$mail, '$localita', '$telefono')";
$query2="INSERT INTO discipline ( discipline) VALUES ('$discipline')";

$inser1=mysql_query($query1);
$inser2=mysql_query($query2);
 

efisio

Utente Attivo
5 Ago 2008
95
0
0
Ciao Borgo italia,
ho provato quanto mi hai detto e quello che sono riuscito a fare e inserire i dati nella tabella, riguardanti la seconda query, mentre quelli della prima non sono stati memorizzati.
E' possibile un'altra soluzione?
grazie

Efisio
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
verifica che i valori della qery si giusto
inserisci

$query1="INSERT INTO iscritti ( nome, cognome, provincia, via, mail, localita, telefono) VALUES ('$nome', '$cognome', '$provincia', '$via', '$mail, '$localita', '$telefono')";
var_dump($query1);

e verifca se i valori sono giusti anche come corrispondenza con i nomi dei campi
 

efisio

Utente Attivo
5 Ago 2008
95
0
0
Buongiorno Borgo italia,
sono in alto mare, ma ancora non affogo...
potresti darmi una mano con questo problema appena hai del tempo?
Grazie
Efisio
ti posto quanto ho scritto.


$query1="INSERT INTO iscritti ( nome, cognome, provincia, via, mail, localita, telefono) VALUES ('$nome', '$cognome', '$provincia', '$via', '$mail, '$localita', '$telefono')";
$query2="INSERT INTO discipline (*discipline) VALUES ('$discipline')";

$inser1= mysql_query($query1);
$inser2= mysql_query($query2);*
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Ciao, Borgo ti aveva suggerito di inserire la seguente riga nel codice, ma non sembra tu lo abbia ascoltato:

PHP:
var_dump($query1);
Inoltre, aggiungi anche:

PHP:
$inser1= mysql_query($query1) or die (mysql_error());
Esegui lo script e vedi cosa viene fuori. Se posti solamente il codice è difficile che qualcuno possa aiutarti.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
Se posti solamente il codice è difficile che qualcuno possa aiutarti
satifal ha perfettamente ragione, in quanto le righe inserite sono correte, perchè l'errore/i nasce a monte
puo essere es.
1. non corrispondenza tra i nomi che hai scritto e nomi tabella, o il nome della tabella
2. uno ho più varabili sono vuote e cerchi di inserirle in un campo not null
verificato il punto uno e non funzia comunque, devi capire perchè hai una o piu variabili vuote.
a. se è voluto devi verificare che il campo accetti il valore null
b. se non voluto il perche, qualche post che non funzia?
 

efisio

Utente Attivo
5 Ago 2008
95
0
0
sono propio una frana.
adesso il db mi dà questo rimando:
string(201) "INSERT INTO iscritti ( nome, cognome, provincia, via, mail, localita, telefono, discipline) VALUES ('giuseppe', 'garibaldi', 'LU', 'mazzini,12', 'giuseppe@giuseppe.it, 'viareggio', '113', 'Counsellor')" bool(false) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'viareggio', '113', 'Counsellor')' at line 1
cosa devo fare?
ho visto quanto mi hai detto e mi sembra tutto corretto...ma...
grazie
efisio
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Nel campo mail manca l'apice di chiusura come si evince dal messaggio di errore per cui devi aggiungerlo nella query:

PHP:
$query1="INSERT INTO iscritti ( nome, cognome, provincia, via, mail, localita, telefono) VALUES ('$nome', '$cognome', '$provincia', '$via', '$mail', '$localita', '$telefono')";
 

efisio

Utente Attivo
5 Ago 2008
95
0
0
Grazie Satifal per avermi fatto notare dove avevo sbagliato.
ora riesco ad inserire i dati nella tabella, ma ancora navigo in alto mare riguardo all'inserimento in due tabelle distinte...
mi metto a lavoro prima di andare a lavoro.

buona giornata
Efisio
 

satifal

Utente Attivo
25 Set 2008
522
13
0
Roma
Non capisco quale sia il problema. Se lo illustri meglio magari riusciamo a risolverlo.
 

Federico B.

Nuovo Utente
29 Set 2009
29
0
0
28
Sant'Antioco (CI)
Fai una cosa, prima di inviare la query crea delle condizioni oppure al posto di inviarla stampa tutte le variabile per controllare sia valorizzate.
 

efisio

Utente Attivo
5 Ago 2008
95
0
0
scusate se vi rispondo solo stamani,
allora provo ad esporre il problema.
Al momento ho una tabella (utenti) all'interno di un Db, la quale contiene una serie di campi. L'utente, tramite la compilazione di un form, invia i dati ad una pagina (salva.php), la quale processa i dati e li invia al DB e tramite una query, li inserisce nell'apposita tabella (utenti). Fino a qui nessun problema.
Il problema mi si è presentato quando ho deciso di inserire una seconda tabella, in modo da inviare, una voce del form ( mail) ad un'apposita tabella. A questo punto ho provato a mettere due query come mi era stato suggerito ma non funzionava, probabilmente perchè ho fatto qualche errore a monte ma non riesco a capire quale.
Al momento attuale ho la situazione con una sola tabella e una query.
ti posto quanto ho scritto:
file salva.php:

<?php
$host = 'localhost';
$user = 'root';
$password = 'root';
$database = 'utenti';

$nome=$_REQUEST['nome'];
$cognome=$_REQUEST['cognome'];
$luogo=$_REQUEST['provincia'];
$via=$_REQUEST['via'];
$mail=$_REQUEST['mail'];
$localita=$_REQUEST['localita'];
$telefono=$_REQUEST['telefono'];
$discipline=$_REQUEST['discipline'];


$db = mysql_connect($host, $user, $password)
or die ( "impossibile connetersi al server");
mysql_select_db($database, $db)
or die ("impossibile connettersi al daabasee");

$query="INSERT INTO iscritti ( nome, cognome, provincia, via, mail, localita, telefono, discipline) VALUES ('$nome', '$cognome', '$provincia', '$via', '$mail', '$localita', '$telefono', '$discipline')";

var_dump($query);//vedi se viene scritta giusta
$risult=mysql_query($query);
var_dump($risult);//TRUE se ok, FALSE se ko
echo mysql_error();
mysql_close($db);
?>

La tabella db è di tipo Myisam e i campi sono tutti warchar not null, con ID primary kei auto incremente e un timestamp automatico.

Come potrei procedere?

Grazie

Efisio
 

Federico B.

Nuovo Utente
29 Set 2009
29
0
0
28
Sant'Antioco (CI)
Ti consiglio di utilizzare i tag appositici per il codice e di utilizzare l'indentazione, rendono il codice più leggibile.

Prova questo, ho fatto in modo di gestire tutti gli errori in modo da sapere dove si interrompe lo script.
PHP:
<?php

$host = 'localhost';
$user = 'root';
$password = 'root';
$database = 'utenti';

$nome 		= trim(htmlspecialchars($_POST['nome']));
$cognome	= trim(htmlspecialchars($_POST['cognome']));
$luogo		= trim(htmlspecialchars($_POST['provincia']));
$via		= trim(htmlspecialchars($_POST['via']));
$mail		= trim(htmlspecialchars($_POST['mail']));
$localita	= trim(htmlspecialchars($_POST['localita']));
$telefono	= trim(htmlspecialchars($_POST['telefono']));
$discipline	= trim(htmlspecialchars($_POST['discipline']));


if(!($db = mysql_connect($host, $user, $password)))
{
	die("impossibile connetersi al database:<br />" . mysql_error());
}
if(!(mysql_select_db($database, $db)))
{
	die("impossibile connettersi al database:<br />" . mysql_error>());
}

$query = "INSERT INTO iscritti (nome, cognome, provincia, via, mail, localita, telefono, discipline)
	VALUES ('" . mysql_real_escape_string($nome) . "',
			'" . mysql_real_escape_string($cognome) . "',
			'" . mysql_real_escape_string($provincia) . "',
			'" . mysql_real_escape_string($via) . "',
			'" . mysql_real_escape_string($mail) . "',
			'" . mysql_real_escape_string($localita) . "',
			'" . mysql_real_escape_string($telefono) . "',
			'" . mysql_real_escape_string($discipline) . "')";

#var_dump($query); //vedi se viene scritta giusta
if(!($result = mysql_query($query)))
{
	die('Errore nella query<br />' . mysql_error() . '<br /><br /><pre>' . $query . '</pre>');
}
#var_dump($risult);//TRUE se ok, FALSE se ko
mysql_close($db);

?>
 

efisio

Utente Attivo
5 Ago 2008
95
0
0
Ciao Federico,
ho mandato in esecuzione il codice che mi hai scritto e i dati sono stati inseriti correttamente nella tabella.
A questo punto, se volessi inserire il dato (mail) in una tabella separata, sempre dello stesso DB, come potrei procedere?

Grazie per il tempo che mi hai dedicato,
Efisio
 

Federico B.

Nuovo Utente
29 Set 2009
29
0
0
28
Sant'Antioco (CI)
Non credo sia possibile. In ogni caso posta la struttura della tabella così preparo la seconda uqery per l'INSERT.
 

efisio

Utente Attivo
5 Ago 2008
95
0
0
Ciao Federico,
sono riuscito ad inserire il dato (mail) in una seconda tabella mediante il seguente codice:

$query="INSERT INTO iscritti ( nome, cognome, provincia, via, mail, localita, telefono, discipline) VALUES ('$nome', '$cognome', '$provincia', '$via', '$localita', '$telefono', '$discipline')";
$query_mail="INSERT INTO mail (email) VALUES ('$email')";


ora mi si aggiunge un nuovo problema.
come posso recuperare i dati dalle due tabelle?
grazie

Efisio
 

Federico B.

Nuovo Utente
29 Set 2009
29
0
0
28
Sant'Antioco (CI)
Con una SELECT. Ma son osicuro che la seconda tabella (quella della mail) conetiene un riferimento alla prima, quindi devi utilizzare le JOIN.

Ripeto, se non posti la struttura delle tabelle è difficile aiutarti.
 

efisio

Utente Attivo
5 Ago 2008
95
0
0
Ciao Federico,
hai perfettamente ragione, ti posto i dati delle due tabelle.
prima tabella 'Utenti':

id int (10) null(no) extra (auto_increment);
nome varchar (20) null (no);
cognome varchar (20) null (no);
localita varchar (20) null (no);
via varchar (20) null (no);
telefono int (20) null (no);
discipline varchar (20) null (no);
descrizione text null (yes) (default) null;
data timestamp no (default) current_timestamp;
tipo Myisam.

Tabella Mail:

id int (10) null(no) extra (auto_increment);
email varchar (20) null (no).

ho trascritto i dati prendendoli dalle tabelle in phpmyadmin.
 

Federico B.

Nuovo Utente
29 Set 2009
29
0
0
28
Sant'Antioco (CI)
Se id della mail è uguale a quella degli user puoi fare così:
Codice:
SELECT u.*, m.email 
FROM Utenti AS u
	LEFT JOIN Mail AS m
		ON (u.id = m.id)
WHERE u.id =
in u.id dopo l'uguasle devi inserire l'id. Ovviamente l'id della mail deve essere uguale a quello di u quindi quando esegui l'INSER INTO devi fare due query inserendo lo stesso valore, non ti consiglio di inserire l'auto_increment, rischi di avere dei problemi poi nel caso uno non inserisca l'email.