problema con Database e form

  • Creatore Discussione Creatore Discussione efisio
  • Data di inizio Data di inizio

efisio

Utente Attivo
5 Ago 2008
95
0
0
buon pomeriggio a tutti quelli del forum.
Nel mio fare pratica di apprendimento del linguaggio php e mysql sono incappato in un qualche errore.
Se qualcuno può aiutarmi provo a postare il codice con il quale sono alle prese, ma prima vi riassumo velocemente come ho impostato i file, magari c'è un'errore anche qui!

ho un form(inserisci.php) da cui invio dati (metodo post)ad una pagina (salva.php) la quale dovrebbe inviare i dati al Database mysql, (tabella iscritti.sql)e il file (connDB.php) che contiene i dati per la connessione al database.

Il codice (inserisci.php) è il seguente:

<form action="Salva.php" method="post">
nome: <input type="text" name="nome"><br>
cognome: <input type="text" name="cognome"><br>
Luogo:<select name="luogo">
<option value="AG" >Agrigento</option>
<option value="AL" >Alessandria</option>
<option value="AN" >Ancona</option>
<option value="AO" >Aosta</option>
<option value="AR" >Arezzo</option>
<option value="AP" >Ascoli Piceno</option>
<option value="AT" >Asti</option>
<option value="AV" >Avellino</option>
<option value="BA" >Bari</option>
<option value="BT" >Barletta-Andria-Trani</option>
<option value="BL" >Belluno</option>
<option value="BN" >Benevento</option>
<option value="BG" >Bergamo</option>
<option value="BI" >Biella</option>
<option value="BO" >Bologna</option>
<option value="BZ" >Bolzano</option>
<option value="BS" >Brescia</option>
<option value="BR" >Brindisi</option>
<option value="CA" >Cagliari</option>
<option value="CL" >Caltanissetta</option>
<option value="CB" >Campobasso</option>
<option value="CI" >Carbonia-Iglesias</option>
<option value="CE" >Caserta</option>
<option value="CT" >Catania</option>
<option value="CZ" >Catanzaro</option>
<option value="CH" >Chieti</option>
<option value="CO" >Como</option>
<option value="CS" >Cosenza</option>
<option value="CR" >Cremona</option>
<option value="KR" >Crotone</option>
<option value="CN" >Cuneo</option>
<option value="EN" >Enna</option>
<option value="FE" >Ferrara</option>
<option value="FI" >Firenze</option>
<option value="FG" >Foggia</option>
<option value="FC" >Forlì - Cesena</option>
<option value="FR" >Frosinone</option>
<option value="-" >Fuori Italia</option>
<option value="GE" >Genova</option>
<option value="GO" >Gorizia</option>
<option value="GR" >Grosseto</option>
<option value="IM" >Imperia</option>
<option value="IS" >Isernia</option>
<option value="SP" >La Spezia</option>
<option value="AQ" >L'Aquila</option>
<option value="LT" >Latina</option>
<option value="LE" >Lecce</option>
<option value="LC" >Lecco</option>
<option value="LI" >Livorno</option>
<option value="LO" >Lodi</option>
<option value="LU" >Lucca</option>
<option value="MC" >Macerata</option>
<option value="MN" >Mantova</option>
<option value="MS" >Massa Carrara</option>
<option value="MT" >Matera</option>
<option value="MD" >Medio Campidano</option>
<option value="ME" >Messina</option>
<option value="MI" >Milano</option>
<option value="MO" >Modena</option>
<option value="NA" >Napoli</option>
<option value="NO" >Novara</option>
<option value="NU" >Nuoro</option>
<option value="OG" >Ogliastra</option>
<option value="OT" >Olbia-Tempio</option>
<option value="OR" >Oristano</option>
<option value="PD" >Padova</option>
<option value="PA" >Palermo</option>
<option value="PR" >Parma</option>
<option value="PV" >Pavia</option>
<option value="PG" >Perugia</option>
<option value="PS" >Pesaro</option>
<option value="PU" >Pesaro - Urbino</option>
<option value="PE" >Pescara</option>
<option value="PC" >Piacenza</option>
<option value="PI" >Pisa</option>
<option value="PT" >Pistoia</option>
<option value="PN" >Pordenone</option>
<option value="PZ" >Potenza</option>
<option value="PO" >Prato</option>
<option value="RG" >Ragusa</option>
<option value="RA" >Ravenna</option>
<option value="RC" >Reggio Calabria</option>
<option value="RE" >Reggio Emilia</option>
<option value="RI" >Rieti</option>
<option value="RN" >Rimini</option>
<option value="RM" >Roma</option>
<option value="RO" >Rovigo</option>
<option value="SA" >Salerno</option>
<option value="SS" >Sassari</option>
<option value="SV" >Savona</option>
<option value="SI" >Siena</option>
<option value="SR" >Siracusa</option>
<option value="SO" >Sondrio</option>
<option value="TA" >Taranto</option>
<option value="TE" >Teramo</option>
<option value="TR" >Terni</option>
<option value="TO" >Torino</option>
<option value="TP" >Trapani</option>
<option value="TN" >Trento</option>
<option value="TV" >Treviso</option>
<option value="TS" >Trieste</option>
<option value="UD" >Udine</option>
<option value="VA" >Varese</option>
<option value="VE" >Venezia</option>
<option value="VB" >Verbano Cusio Ossola</option>
<option value="VC" >Vercelli</option>
<option value="VR" >Verona</option>
<option value="VV" >Vibo Valentia</option>
<option value="VI" >Vicenza</option>
<option value="VT" >Viterbo</option>
</select><br>
Disciplina: <select name="discipline">
<option value="avvocato" >avvocato</option>
<option value="commercialista" >commercialista</option>
<option value="ragioniere" >ragioniere</option>
</select><br>

il codice del file (salva.php) è il seguente:

<?php
$nome= trim($_POST ['nome']);
$cognome= trim($_POST['cognome']);
$luogo= intval($_POST ['luogo']);
$discipline= intval($_POST ['discipline']);
$nome = ($nome == "") ? "Anonimo" : $nome;
$cognome = ($cognome == "") ? "" : $cognome;
if($nome == "" || $cognome == "") {
die(header("Location: iserisci.php?errore=1&nome=$nome&cognome=$cognome&luogo=$luogo&disciplina=$disciplina"));
}
include ("connDB.php");
$pntDB = @mysql_connect($DB[host], $DB[user], $DB[pass]);
if(!$pntDB) {
die ("ATTENZIONE: il sito-web è temporaneamente off-line per problemi tecnici.")
};
mysql_select_db("$DB[database]", $pntDB);
mysql_query("INSERT INTO iscritti (nome, cognome, luogo, discipline) VALUES ('$_POST['nome']', '$_POST['cognome']','$_POST['luogo']','$_POST['discipline']')");
?>


La tabella MYSQL (iscritti) è la seguente:

id int(11) No auto_increment
nome varchar(20) latin1_swedish_ci No
cognome varchar(20) latin1_swedish_ci No
luogo tinyint(20) No
discipline tinyint(20) No


il file connDB ha il seguente codice:

<?php
$DB[host] = "localhost";
$DB[user] = "root";
$DB[pass] = "";
$DB[database] = "utenti";
?>
 
La tabella MYSQL (iscritti) è la seguente:

id int(11) No auto_increment
nome varchar(20) latin1_swedish_ci No
cognome varchar(20) latin1_swedish_ci No
luogo tinyint(20) No
discipline tinyint(20) No


il file connDB ha il seguente codice:

<?php
$DB[host] = "localhost";
$DB[user] = "root";
$DB[pass] = "";
$DB[database] = "utenti";
?>

perchè l'id e No auto_increment ???
 
non hai postato l'errore che ti restituisce, comunque in "inserisci.php" il form non è stato chiuso e non vedo un pulsante per l'invio.
 
ciao
scusate se mi intrometto (al massimo eliox mi banna)
ma c'è una cosa che non capisco
cosa vuol dire

PHP:
$luogo= intval($_POST ['luogo']);
$discipline= intval($_POST ['discipline']);

intavl non trasforma un numero in intero ed in funzione, se c'è, della base? ma nelle select i valori non mi sembrano numerici
analogo poi il
luogo tinyint(20) perche intero?non dovrebbe contenere una delle sigle della provincia?
 
non hai postato l'errore che ti restituisce, comunque in "inserisci.php" il form non è stato chiuso e non vedo un pulsante per l'invio.

Buongiorno Eliox,

hai perfettamente ragione. Non ho postato l'intero codice della pagina perchè pensavo non fosse necessario, ma provvedo subito.

(inserisci.php):

<div id="nav">
Per iscriverti compila i campi sottostanti

<form action="Salva.php" method="post">
nome: <input type="text" name="nome"><br>
cognome: <input type="text" name="cognome"><br>
Luogo:<select name="luogo">
<option value="AG" >Agrigento</option>
<option value="AL" >Alessandria</option>
<option value="AN" >Ancona</option>
<option value="AO" >Aosta</option>
<option value="AR" >Arezzo</option>
<option value="AP" >Ascoli Piceno</option>
<option value="AT" >Asti</option>
<option value="AV" >Avellino</option>
<option value="BA" >Bari</option>
<option value="BT" >Barletta-Andria-Trani</option>
<option value="BL" >Belluno</option>
<option value="BN" >Benevento</option>
<option value="BG" >Bergamo</option>
<option value="BI" >Biella</option>
<option value="BO" >Bologna</option>
<option value="BZ" >Bolzano</option>
<option value="BS" >Brescia</option>
<option value="BR" >Brindisi</option>
<option value="CA" >Cagliari</option>
<option value="CL" >Caltanissetta</option>
<option value="CB" >Campobasso</option>
<option value="CI" >Carbonia-Iglesias</option>
<option value="CE" >Caserta</option>
<option value="CT" >Catania</option>
<option value="CZ" >Catanzaro</option>
<option value="CH" >Chieti</option>
<option value="CO" >Como</option>
<option value="CS" >Cosenza</option>
<option value="CR" >Cremona</option>
<option value="KR" >Crotone</option>
<option value="CN" >Cuneo</option>
<option value="EN" >Enna</option>
<option value="FE" >Ferrara</option>
<option value="FI" >Firenze</option>
<option value="FG" >Foggia</option>
<option value="FC" >Forlì - Cesena</option>
<option value="FR" >Frosinone</option>
<option value="-" >Fuori Italia</option>
<option value="GE" >Genova</option>
<option value="GO" >Gorizia</option>
<option value="GR" >Grosseto</option>
<option value="IM" >Imperia</option>
<option value="IS" >Isernia</option>
<option value="SP" >La Spezia</option>
<option value="AQ" >L'Aquila</option>
<option value="LT" >Latina</option>
<option value="LE" >Lecce</option>
<option value="LC" >Lecco</option>
<option value="LI" >Livorno</option>
<option value="LO" >Lodi</option>
<option value="LU" >Lucca</option>
<option value="MC" >Macerata</option>
<option value="MN" >Mantova</option>
<option value="MS" >Massa Carrara</option>
<option value="MT" >Matera</option>
<option value="MD" >Medio Campidano</option>
<option value="ME" >Messina</option>
<option value="MI" >Milano</option>
<option value="MO" >Modena</option>
<option value="NA" >Napoli</option>
<option value="NO" >Novara</option>
<option value="NU" >Nuoro</option>
<option value="OG" >Ogliastra</option>
<option value="OT" >Olbia-Tempio</option>
<option value="OR" >Oristano</option>
<option value="PD" >Padova</option>
<option value="PA" >Palermo</option>
<option value="PR" >Parma</option>
<option value="PV" >Pavia</option>
<option value="PG" >Perugia</option>
<option value="PS" >Pesaro</option>
<option value="PU" >Pesaro - Urbino</option>
<option value="PE" >Pescara</option>
<option value="PC" >Piacenza</option>
<option value="PI" >Pisa</option>
<option value="PT" >Pistoia</option>
<option value="PN" >Pordenone</option>
<option value="PZ" >Potenza</option>
<option value="PO" >Prato</option>
<option value="RG" >Ragusa</option>
<option value="RA" >Ravenna</option>
<option value="RC" >Reggio Calabria</option>
<option value="RE" >Reggio Emilia</option>
<option value="RI" >Rieti</option>
<option value="RN" >Rimini</option>
<option value="RM" >Roma</option>
<option value="RO" >Rovigo</option>
<option value="SA" >Salerno</option>
<option value="SS" >Sassari</option>
<option value="SV" >Savona</option>
<option value="SI" >Siena</option>
<option value="SR" >Siracusa</option>
<option value="SO" >Sondrio</option>
<option value="TA" >Taranto</option>
<option value="TE" >Teramo</option>
<option value="TR" >Terni</option>
<option value="TO" >Torino</option>
<option value="TP" >Trapani</option>
<option value="TN" >Trento</option>
<option value="TV" >Treviso</option>
<option value="TS" >Trieste</option>
<option value="UD" >Udine</option>
<option value="VA" >Varese</option>
<option value="VE" >Venezia</option>
<option value="VB" >Verbano Cusio Ossola</option>
<option value="VC" >Vercelli</option>
<option value="VR" >Verona</option>
<option value="VV" >Vibo Valentia</option>
<option value="VI" >Vicenza</option>
<option value="VT" >Viterbo</option>
</select><br>
Disciplina: <select name="discipline">
<option value="avvocato" >avvocato</option>
<option value="commercialista" >commercialista</option>
<option value="ragioniere" >ragioniere</option>
</select><br>
<input name="pulsante" type="submit" id="pulsante" value="Invia ">
</form>
</div>

Quando inserisco i dati nel form poi questi non vengono memorizzati nel DB?
A video mi viene retituita l'Header e mancano il corpo e il footer.

Grazie
ancora per esserti interessato a questo problema
Efisio
 
ciao
scusate se mi intrometto (al massimo eliox mi banna)
ma c'è una cosa che non capisco
cosa vuol dire

PHP:
$luogo= intval($_POST ['luogo']);
$discipline= intval($_POST ['discipline']);

intavl non trasforma un numero in intero ed in funzione, se c'è, della base? ma nelle select i valori non mi sembrano numerici
analogo poi il
luogo tinyint(20) perche intero?non dovrebbe contenere una delle sigle della provincia?

Buongiorno Borgo,


Cosa mi consigli di mettere al posto di intval?
Per il secondo problema mi sembra di capire che dovrò sostituire l'intero con la sigla.
potresti darmi qualche consiglio su come tu avresti risolto il problema?
grazie

Efisio
 
ciao
se nel db inserisci solo le sigle e/o i nomi delle province:

semplice $_POST per le sigle (al massimo un trim per sicurezza)
addslasces($_POST['']) per i nomi (addslashes perche se no L'Aquila ti da problemi

nella tabella
campo sigle varchar 2
campo nome_provincia varchar 15

io ho fatto così
per le
$discipline= addslashes(trim($_POST ['discipline']));
se le prendi da una select, altrimenti aggiungi htmlspecialchars

campo discipline varchar 20 (30 vedi tu)

dimenticavo
per verificare prova queste due righe

<?php
$a="PD";
$b="VE";
var_dump(intval($a));
var_dump(intval($b));
?>
vedrai che ti restituise sempre 0
 
Ultima modifica:
Scusami Borgo, ho seguito le tue indicazioni ma probabilmente ho commesso qualche altro errore.
Forse nell'organizzare le pagine web del sito, in quanto non riesco ancora ad inviare i dati al DB.

scusami se ti sottopongo un ennesimo dubbio...

Ciao

Efisio
 
ciao
ho notato una cosa
prima dell'insert tu prelevi i $_POST e lei tratti

es.
$nome= trim($_POST ['nome']);
$cognome= trim($_POST['cognome']);
poi nell'insert utilizzi direttamente il $_POST, a che ti serve trattarli?

prova così (spezzado il codice per vedere, poi i var_dump li togli)

PHP:
$query="INSERT INTO iscritti (nome, cognome, luogo, discipline) VALUES ('$nome', '$cognome','$luogo,'$discipline')";
var_dum($query);//vedi se viene scritta giusta
$risult=mysql_query($query);
var_dump($risult);//TRUE se ok, FALSE se ko
 
Ultima modifica:
sicuramente Borgo intendeva scrivere:
PHP:
var_dump($query);//vedi se viene scritta giusta
 
Grazie Borgo per i suggerimenti, ma ancora non riesco a risolvere il problema di inserimento dati nel DB.

Non riesco a capirci niente.

ti posto il file salva.php nella speranza di poter imparare dove stò sbagliando.

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

$nome=$_REQUEST['nome'];
$cognome=$_REQUEST['cognome'];
$luogo=$_REQUEST['luogo'];
$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,*luogo,*discipline) VALUES*('$nome',*'$cognome','$luogo,'$discipline')";
var_dump($query);//vedi se viene scritta giusta
$risult=mysql_query($query);
var_dump($risult);//TRUE se ok, FALSE se ko

?>

inoltre quando inserisco i dati mi restituisce a video la seguente stringa:

string(111) "INSERT INTO iscritti (nome, cognome, luogo, discipline) VALUES ('giuseppe', 'garibaldi','AO,'Psicologo')" bool(false)

Grazie

Efisio
 
ciao
se hai scritto la query in questo modo

$query="INSERT INTO*iscritti*(nome,*cognome,*luogo,*discipline) VALUES*('$nome',*'$cognome','$luogo,'$discipline') ";

per forza non inserisce
prova così

PHP:
$query="INSERT INTO iscritti (nome, cognome, luogo, discipline) VALUES('$nome','$cognome','$luogo,'$discipline') ";

perchè hai messo gli *?
il var_dump dovrebbe restituirti

string(111) "INSERT INTO iscritti (nome, cognome, luogo, discipline) VALUES('giuseppe', 'garibaldi','AO,'Psicologo')"
bool(true)
 
Grazie Borgo, ma in effetti non avevo messo gli asterischi e non so come mai sono comparsi una volta che ho "inviato" la risposta.
riprovo a postare la parte in oggetto:

$query="INSERT INTO iscritti (nome, cognome, luogo, discipline) VALUES ('$nome', '$cognome','$luogo,'$discipline')";


Ps: prima di postare la risposta ho eseguito l'anteprima del messaggio e il programma mi restituisce gli asterischi al posto degli spazi.

purtroppo non riesco ad inserire i dati nel DB...questo problema mi sembra irrisolvibile !!!!!!
e mi domando:" Cosa continuo a sbagliare"?
Grazie Borgo per il tuo interessamento

Efisio
 
ciao
se il var_dump della query ti restituisce la stringa giusta, ma non fa l'insert, l'errore potrebbe essere nei nomi o nellla tabella.
1. verifica la corrispondenza dei nomi (anche minuscolo/maiuscolo)
2. verifica (sempre usando val_dump) che siano valorizzati $nome, $cognome, $luogo, $discipline
3. che il tipo dei campi in cui devono essere immessi sia giusto

dimenticavo
la tabella è rimasta così?
id int(11) No auto_increment
nome varchar(20) latin1_swedish_ci No
cognome varchar(20) latin1_swedish_ci No
luogo tinyint(20) No
discipline tinyint(20) No

secondo me devi modificarla in

id int(11) autoincrement primary key
nome varchar(20)
cognome varchar(20)
luogo varchar(2)
discipline varchar(20)
 
Ultima modifica:
Grazie ai tuoi suggerimenti sono riuscito nell'impresa.

Grazie ancora Borgo.
:beer:
 

Discussioni simili