PDA

View Full Version : [PHP]help sql connection..?


Pro7on
21-12-2006, 14:06
ciao a tutti ho un probblema nella connessione con il db:

Alura:

$db_host = 'localhost',
$db_user = 'root';
$db_password = '';
$db_name = 'infoch';
$provider = 'Sunrise';
$locazione = 'Ticino';

$connessione = mysql_connect($db_host,$db_user,$db_password) or die("non riesco a connetermi al db");

$insdati = "INSERT INTO registro values values ($ip, $provider, $locazion, $browser, $os)";

$result = mysql_query($insdati, $connessione);

if($result)
{
echo"$result";
}
else{
echo"Errore";
}




watt is the problem..??????? :muro:

andbin
21-12-2006, 14:45
watt is the problem..??????? :muro:Hai messo 2 volte values

Pro7on
21-12-2006, 15:28
Hai messo 2 volte values

si li e xche ho coppiato male su qui .. -.- xche sto scrivendo con un fisso ma il coice c'è lo sul portatile e allora ho coppiato male, cmq nn dà nessun errore la pagina ma nn scrive nada -.-''

loris_p
21-12-2006, 15:53
mancano gli apici su tutti i valori che devi inserire..
deve essere fatto così:
$insdati = "INSERT INTO registro values ('".$ip."', '".$provider."', '".$locazion."', ."'$browser."', '".$os."')";

edit: e cmq è buona regola quando non funziona una query farne l'echo e provare a darla in pasto al client mysql

andbin
21-12-2006, 15:55
si li e xche ho coppiato male su qui .. -.- xche sto scrivendo con un fisso ma il coice c'è lo sul portatile e allora ho coppiato male, cmq nn dà nessun errore la pagina ma nn scrive nada -.-''Ok ... a parte gli errori di trascrizione (hai messo $locazione = 'Ticino'; ma poi hai scritto $locazion), ci sono altre cose:
- Dovresti mettere i valori che sono delle stringhe tra apici ed eventualmente fare l'escape del contenuto, se sai che ci possono essere caratteri speciali.
- le variabili $ip, $os, $browser sono state definite da qualche parte??

Pro7on
21-12-2006, 16:22
thx provo e poi dico...;)

Pro7on
21-12-2006, 21:50
-.-'' cavoli errori di sintasi nn ne ho le tre variabili le prendo tremite include da un'altr pagine ee alla fine ho messo un echo result ma mi da errore -.- nn capisco :muro: :muro:

loris_p
21-12-2006, 22:22
ed echo $insdati per vedere il testo della query l'hai fatto?

Pro7on
22-12-2006, 08:00
ed echo $insdati per vedere il testo della query l'hai fatto?

si ma mi stampa come na stringa normale??


cioe stampa fuori "INSDATI.....('192.168.1.1','ticino',....)

???

Pro7on
22-12-2006, 11:26
:muro: :muro: :muro: :muro: :mc: minchia nn riesco ad'uscire da sto vicolo ceco....

nn capisco....

ma allora e normale che la query viene presa come stringa??

andbin
22-12-2006, 11:29
ma allora e normale che la query viene presa come stringa??La query è una normalissima stringa.

Fai un echo di $insdati e riportalo qui, così vediamo almeno se la sintassi è corretta.

Pro7on
22-12-2006, 12:14
CODICE:



<?php
/*include'FileStile/php/pannelli/p_Info.php';*/

$db_host = 'localhost';
$db_user = 'root';
$db_password = '';
$ip = '192.168.1.2';
$browser = 'Firefox';
$os = 'MacOSX';
$db_name = 'infoch';
$provider = 'Sunrise';
$locazione = 'CH';
$data = '04.09.07';

$con = mysql_connect($db_host,$db_user,$db_password)or die("non riesco a connettemri al db");

$db = mysql_select_db($db_name, $con)or die("nn riesco a selezionare il db info");


$insdati = "INSERT INTO registro values ('".$ip."', '".$provider."', '".$locazione."', '".$browser."','".$os."','".$data."')";
/*$insdati = "SELECT * FROM registro";*/

$result = mysql_query($insdati, $con);

echo"insdati: $insdati";

if($result){
echo"$result";
}
else{
echo"Errore";
}
?>




Output:

insdati: INSERT INTO registro values('192.168.1.2', 'Sunrise', 'CH', 'Firefox','MacOSX','04.09.07')Errore

andbin
22-12-2006, 12:30
INSERT INTO registro values('192.168.1.2', 'Sunrise', 'CH', 'Firefox','MacOSX','04.09.07')La query, a vista, mi sembra corretta.
Invece di far stampare solo "Errore" fai stampare la stringa che viene restituita da:

mysql_error ($con)

così magari capiamo meglio il problema.

Pro7on
22-12-2006, 12:56
mmm se stampo con mi da : Resource id#2...
quindi ci sono probblemi col id del db..


allora id e la chiave primaria ed è autoincrement...???

andbin
22-12-2006, 12:59
mmm se stampo con mi da : Resource id#2...
quindi ci sono probblemi col id del db..


allora id e la chiave primaria ed è autoincrement...???Ripeto: che cosa contiene la stringa ritornata da mysql_error ($con) in caso di errore??

Pro7on
22-12-2006, 13:27
il numero di colonne non corrisponde all conteggio alla riga 1

max246
23-12-2006, 11:57
Em se ci fai vedere la descrizione della tabella magari tutti capiscono il tuo problema :)

Magari fai un esporta della così vediamo i campi...

Bye

Pro7on
24-12-2006, 14:28
id auto increment,stringa'192.168.1.2', stringa'Sunrise', stringa'CH', stringa'Firefox',Stringa'MacOSX',Data:'04.09.07'

andbin
24-12-2006, 15:03
id auto increment,stringa'192.168.1.2', stringa'Sunrise', stringa'CH', stringa'Firefox',Stringa'MacOSX',Data:'04.09.07'Nooo, max246 intendeva probabilmente dire la struttura della tabella!!

Esempio:
CREATE TABLE `nome` (
`id` int(12) unsigned NOT NULL auto_increment,
... blabla ...
)

Pro7on
28-12-2006, 08:53
Nooo, max246 intendeva probabilmente dire la struttura della tabella!!

Esempio:
CREATE TABLE `nome` (
`id` int(12) unsigned NOT NULL auto_increment,
... blabla ...
)

mmm -.-'' booo io ho crato la tabella con easyPHP... a livello grafico.. :confused:

andbin
28-12-2006, 09:38
mmm -.-'' booo io ho crato la tabella con easyPHP... a livello grafico.. :confused:Bene ... cioè male!
Allora tramite il tool a linea di comando del MySQL (o da qualunque altro tool grafico per MySQL) fai:

DESCRIBE nome_tabella;

o meglio ancora:

SHOW CREATE TABLE nome_tabella;

Pro7on
28-12-2006, 12:30
registro CREATE TABLE `registro` (\n `ID` int(11) NOT NULL auto_increment,\n `IP` varchar(16) NOT NULL default '',\n `Provider` varchar(30) NOT NULL default '',\n `Locazione` varchar(20) NOT NULL default '',\n `Browser` varchar(10) NOT NULL default '',\n `OS` varchar(10) NOT NULL default '',\n `Data` date NOT NULL default '0000-00-00',\n PRIMARY KEY (`ID`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1

:mbe: :confused:

andbin
28-12-2006, 12:41
registro CREATE TABLE `registro` (\n `ID` int(11) NOT NULL auto_increment,\n `IP` varchar(16) NOT NULL default '',\n `Provider` varchar(30) NOT NULL default '',\n `Locazione` varchar(20) NOT NULL default '',\n `Browser` varchar(10) NOT NULL default '',\n `OS` varchar(10) NOT NULL default '',\n `Data` date NOT NULL default '0000-00-00',\n PRIMARY KEY (`ID`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1

:mbe: :confused:Allora ti conviene specificare nella INSERT quali colonne impostare!

INSERT INTO registro (`IP`,`Provider`,`Locazione`,`Browser`,`OS`,`Data`) VALUES (........)

Pro7on
28-12-2006, 12:48
Allora ti conviene specificare nella INSERT quali colonne impostare!

INSERT INTO registro (`IP`,`Provider`,`Locazione`,`Browser`,`OS`,`Data`) VALUES (........)


e ho gia provato ma nn và :muro: :confused:

andbin
28-12-2006, 13:03
e ho gia provato ma nn và :muro: :confused:Per l'ennesima volta: fai una echo di $insdati e di mysql_error ($con) e riporta qui i dati, che vediamo.

Pro7on
28-12-2006, 14:49
Per l'ennesima volta: fai una echo di $insdati e di mysql_error ($con) e riporta qui i dati, che vediamo.

INSERT INTO registro values ('192.168.1.2', 'Sunrise', 'CH', 'Firefox','MacOSX','04.09.07')

Il numero delle colonne nn corisponde al conteggio alla riga 1

andbin
28-12-2006, 15:35
INSERT INTO registro values ('192.168.1.2', 'Sunrise', 'CH', 'Firefox','MacOSX','04.09.07')

Il numero delle colonne nn corisponde al conteggio alla riga 1Ehm .. allora forse non ti è chiaro: secondo te come farebbe MySQL a capire che il primo valore '192.168.1.2' deve essere inserito nel secondo campo `IP` e non nel primo campo `ID`??? :D :p

Non può saperlo! Appunto per quello devi specificare anche in quali colonne mettere i valori. La tua tabella è fatta da 7 campi ma tu nella INSERT hai messo solo 6 valori. Ecco il perché dell'errore.

La documentazione del MySQL è abbastanza chiara su questo punto: "If you do not specify the column list for INSERT ... VALUES or INSERT ... SELECT, values for every column in the table must be provided in the VALUES list or by the SELECT."

Pro7on
28-12-2006, 15:45
Ehm .. allora forse non ti è chiaro: secondo te come farebbe MySQL a capire che il primo valore '192.168.1.2' deve essere inserito nel secondo campo `IP` e non nel primo campo `ID`??? :D :p

Non può saperlo! Appunto per quello devi specificare anche in quali colonne mettere i valori. La tua tabella è fatta da 7 campi ma tu nella INSERT hai messo solo 6 valori. Ecco il perché dell'errore.

La documentazione del MySQL è abbastanza chiara su questo punto: "If you do not specify the column list for INSERT ... VALUES or INSERT ... SELECT, values for every column in the table must be provided in the VALUES list or by the SELECT."

e quindi nel primo campo cosa metto se id si autoincrementa :confused:

andbin
28-12-2006, 15:47
e quindi nel primo campo cosa metto se id si autoincrementa :confused:Non devi inserire nulla per l'ID ... è già auto-increment. Devi solo specificare quali colonne e quali valori per i restanti campi. :muro:

Pro7on
28-12-2006, 15:55
Quindi faccio così?

INSERT INTO registro (`IP`,`Provider`,`Locazione`,`Browser`,`OS`,`Data`) VALUES ('192.168.1.2', 'Sunrise', 'CH', 'Firefox','MacOSX','04.09.07');

andbin
28-12-2006, 16:13
Quindi faccio così?

INSERT INTO registro (`IP`,`Provider`,`Locazione`,`Browser`,`OS`,`Data`) VALUES ('192.168.1.2', 'Sunrise', 'CH', 'Firefox','MacOSX','04.09.07');Sì, così.

Pro7on
29-12-2006, 07:49
Quindi faccio così?

INSERT INTO registro (`IP`,`Provider`,`Locazione`,`Browser`,`OS`,`Data`) VALUES ('192.168.1.2', 'Sunrise', 'CH', 'Firefox','MacOSX','04.09.07');

e ma come fà a sapere allora del id??


Questo sarebbe sbagliato?

INSERT INTO registro ('id',`IP`,`Provider`,`Locazione`,`Browser`,`OS`,`Data`) VALUES ('','192.168.1.2', 'Sunrise', 'CH', 'Firefox','MacOSX','04.09.07');

andbin
29-12-2006, 09:24
e ma come fà a sapere allora del id??In che senso? .... guarda che se è dichiarato auto-increment lo gestisce/incrementa il MySQL!!!

Questo sarebbe sbagliato?

INSERT INTO registro ('id',`IP`,`Provider`,`Locazione`,`Browser`,`OS`,`Data`) VALUES ('','192.168.1.2', 'Sunrise', 'CH', 'Firefox','MacOSX','04.09.07');Credo che sia sbagliato.

Ripeto ancora una volta: l'ID lo incrementa/scrive il MySQL se il campo è auto-increment. Se invece ti interessa conoscere il valore dell'ID inserito, allora subito dopo aver fatto la query puoi chiamare la funzione mysql_insert_id($con), la cui documentazione, molto chiaramente, dice: "Retrieves the ID generated for an AUTO_INCREMENT column by the previous INSERT query."

Pro7on
29-12-2006, 09:46
Ma nn vÀ? :muro:

INSERT INTO registro ('IP','Provider','Locazione','Browser','OS','Data') VALUES ("192.168.1.2", "Sunrise", "CH", "Firefox","MacOSX","04.09.07");

andbin
29-12-2006, 10:03
Ma nn vÀ? :muro:

INSERT INTO registro ('IP','Provider','Locazione','Browser','OS','Data') VALUES ("192.168.1.2", "Sunrise", "CH", "Firefox","MacOSX","04.09.07");I nomi dei campi vanno messi o senza alcun apice oppure con il back-quote `.

Pro7on
29-12-2006, 11:07
funziona :D :D :sofico: thx;)


mm come mai ID parte da 4-.....??

o meglio se cancello i campi nn viene decrementato id quindi e 1 2 3 se elimino tre vaa a 4 e nn 3??

andbin
29-12-2006, 11:21
un'ultima domanda: per fare un create table come facciu?Dipende da dove devi farla e con cosa ...
Io in genere preparo un file .sql con dentro le istruzioni per creare la/e tabella/e e poi invio il file al MySQL. Puoi farlo anche con un tool grafico, ovviamente.

Ma non ho ben capito se il tuo problema è come scrivere l'istruzione per una CREATE TABLE o come eseguirla ...

mm come mai ID parte da 4-.....??Non lo so ... fai una query di SELECT sulla tabella per capire cosa c'è dentro.

o meglio se cancello i campi nn viene decrementato id quindi e 1 2 3 se elimino tre vaa a 4 e nn 3??I numeri degli ID non li recupera, va sempre in avanti. Se l'ultimo ID è 5 e tu cancelli la riga, al prossimo inserimento mette 6 nella nuova riga.

Pro7on
29-12-2006, 11:30
ok thx ;)

andbin
29-12-2006, 11:42
Tra l'altro stavo leggendo adesso la documentazione del MySQL e c'è una cosa che in effetti non mi ricordavo. Il campo ID puoi inserirlo NULL (e se lo gestisce lui), quindi visto che tu scrivi tutti i valori, puoi anche evitare di indicare i campi facendo così:

INSERT INTO registro VALUES (NULL, ........)

Pro7on
29-12-2006, 11:52
Tra l'altro stavo leggendo adesso la documentazione del MySQL e c'è una cosa che in effetti non mi ricordavo. Il campo ID puoi inserirlo NULL (e se lo gestisce lui), quindi visto che tu scrivi tutti i valori, puoi anche evitare di indicare i campi facendo così:

INSERT INTO registro VALUES (NULL, ........)

;) Thx... ma la documentazione la guardi su php.net?

andbin
29-12-2006, 12:40
ma la documentazione la guardi su php.net?Beh no, la documentazione propria del MySQL è su http://dev.mysql.com/doc/

satoshi2005
03-01-2007, 09:42
mm come mai ID parte da 4-.....??

o meglio se cancello i campi nn viene decrementato id quindi e 1 2 3 se elimino tre vaa a 4 e nn 3??
Guarda che le hai fatte in prima ste cose..

Pro7on
04-01-2007, 00:51
Guarda che le hai fatte in prima ste cose..


:confused: :confused: :mbe: :muro: ma chi si ricorda ... :rolleyes:

Pro7on
05-01-2007, 09:42
per mettere l'auto increment???


es:


$q_master = "CREATE TABLE prova
(
ID int(5) ,
Nome varchar(20)
)";

come metto "ai" a ID?? :confused:

thx ciauz

andbin
05-01-2007, 09:46
per mettere l'auto increment???Esempio:
CREATE TABLE `unatabella` (
`id` INT(12) NOT NULL AUTO_INCREMENT,

....blabla....

PRIMARY KEY(`id`)
)

Pro7on
05-01-2007, 09:53
Esempio:
CREATE TABLE `unatabella` (
`id` INT(12) NOT NULL AUTO_INCREMENT,

....blabla....

PRIMARY KEY(`id`)
)


;) thx

ma l'apici nel nometab e tipo dato sono obblicatori xche io nn li ho messi e va lstesso..

Pro7on
05-01-2007, 09:58
nn me la crea.... :(


<?php


$db_host="localhost";
$db_user="root";
$db_password="";
$db_name="infoch";

//_________________________________

$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
{
die ("Errore nella connessione. Verificare i parametri nella config");
}
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri nella config");


//query master
$q_master = "CREATE TABLE 'prova'
(
'ID' INT(5) NOT NULL AUTO_INCREMENT,
'Nome' varchar(20),
PRIMARY KEY('ID')
)";



$r_master = mysql_query($q_master, $db);

if ($r_master == FALSE)
{
die ("Errore nella query");
}
else{
echo"Query riuscita";
}
?>

andbin
05-01-2007, 10:07
nn me la crea.... :(Già detto ... e lo ripeto: i nomi dei campi vanno messi o senza alcun apice oppure con il back-quote. :rolleyes:

Pro7on
05-01-2007, 10:11
;) ma thx mai salvato il cervello se no andavo in depressione per sto progettino :D :D thx