Form per alimentare un DB con PHP: aiuto!!

angeliam

Nuovo Utente
10 Apr 2010
9
0
0
Ciao a tutti!
Premetto che non sono esperto di PHP, ma mi trovo a dover fare per un sito una form in cui l'utente può inviare al sua prenotazione per un matrimonio: dovrà scrivere il suo nome-cognome, se parteciperà al pranzo, e se vorrà usufruire del servizio Pullman...in pratica una form con un campo di input tipo text, 2 radio button per il pranzo (sì e no) e 2 radio button per il pullman (sì e no).
Il DB è composto semplicemente da una tabella con 4 campi: ID (numero progressivo), Nome (TEXT di 60 caratteri), Pullman (TEXT di 3 caratteri - per inserire sì o no) e Pranzo (TEXT di 3 caratteri - per inserire sì o no).
Ho trovato qui su HTML.IT un articolo che spiega l'interazione tra php e mysql, spiegando in pratica come realizzare un blog.
Da questo io ho ripreso le funzioni principali che riguardano la connessione al DB, la disconnessione e l'inserimento in tabella.
Ho fatto una pagina di prova, ma mi dice quest'errore:
"Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /membri/happeningac2010/funzioni_mysql.php on line 7"

ora vi posto le due pagine:

funzioni_mysql.php:
PHP:
<?php 

class MysqlClass 

{ 
  // parametri per la connessione al database 
  private $nomehost = "localhost"; 
  private $nomeuser = "user"; 
  private $password = "password"; 
  private $nomedb = "nomeDB"; 


  // funzione per la connessione a MySQL 
  public function connetti() 
  { 
    if($connessione = mysql_connect($this->nomehost,$this->nomeuser,$this->password) or die (mysql_error())) { 
       // selezione del database 
       $selezione = mysql_select_db($this->nomedb,$connessione) or die (mysql_error()); 
    } 
    return true; 
    } 


// funzione per la chiusura della connessione 
public function disconnetti() 
{ 
        if($this->attiva) 
        { 
                if(mysql_close()) 
                { 
         $this->attiva = false; 
             return true; 
                }else{ 
                        return false; 
                } 
        } 
} 

//funzione per l'inserimento dei dati in tabella 
    public function inserisci($t,$v,$r = null) 
    { 
         if(isset($this->attiva)) 
          { 
                        $istruzione = 'INSERT INTO '.$t; 
            if($r != null) 
            { 
                $istruzione .= ' ('.$r.')'; 
            } 

            for($i = 0; $i < count($v); $i++) 
            { 
                if(is_string($v[$i])) 
                    $v[$i] = '"'.$v[$i].'"'; 
            } 
            $v = implode(',',$v); 
            $istruzione .= ' VALUES ('.$v.')'; 

            $query = mysql_query($istruzione) or die (mysql_error()); 

            }else{ 
                return false; 
            } 
        } 
} 
?>

prenota.php:
PHP:
<?php 

// valorizzazione delle variabili con i parametri dal form 
if(isset($_POST['submit'])&&($_POST['submit']=="Scrivi")){ 

  if(isset($_POST['nome'])){ 
    $nome = $_POST['nome']; 
  } 
  if(isset($_POST['pullman'])){ 
    $pullman = $_POST['pullman']; 
  } 
  if(isset($_POST['pranzo'])){ 
    $pranzo = $_POST['pranzo']; 
  } 

  // inclusione del file della classe 
include "funzioni_mysql.php"; 
// istanza della classe 
$data = new MysqlClass(); 
// chiamata alla funzione di connessione 
$data->connetti(); 

    $t = "prenotazioni"; //nome della tabella 
    $v = array ($nome,$pullman,$pranzo); //valori da inserire 
    $r =  "Nome,Pullman,Pranzo"; //campi da popolare 

   //chiamata alla funzione per l'inserimento dei dati 
    $data->inserisci($t,$v,$r); 
    echo "Prenotazione effettuata con successo."; 
    //disconnessione 
    $data->disconnetti(); 
   }else{ 

  // form per l'inserimento 
  ?> 
<h1>Prenotazione:</h1> 
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
Nome e Cognome:&nbsp; 
<input name="nome" type="text"><br /> 
Pullman:&nbsp; 
Sì<input type="radio" name="pullman" value="sì" />&nbsp; 
No<input type="radio" name="pullman" value="no" checked="checked" /><br> 
Pranzo:&nbsp; 
Sì<input type="radio" name="pranzo" value="sì" />&nbsp; 
No<input type="radio" name="pranzo" value="no" checked="checked" /><br><br> 
<input name="submit" type="submit" value="Scrivi"> 
</form> 
  <? 
} 
?>

Spero tanto che possiate aiutarmi!!!
 

angeliam

Nuovo Utente
10 Apr 2010
9
0
0
eh sì...ho scritto anche lì, così almeno il post ha più visibilità! :)
Cmq grazie mille!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao, eccho qui più rapido di un fulmine
puo fare semplicemente così
fai un file da includere con i dati di connessione (chiamata es. connetti.php) che può servirti in seguito

PHP:
<?php
  // parametri per la connessione al database 
$nomehost = "localhost"; 
$nomeuser = "user"; 
$password = "password"; 
$nomedb = "nomeDB";
//---connessione----------------------------------------------------
$conn = @mysql_connect($host,$nomeuser,$password) or die (mysql_error());
$sel = @mysql_select_db($nomedb) or die (mysql_error());
?>

poi fai la tua pagina prenota.php

PHP:
<?php
//usa il include_once oppure require_once 
include_once "connessione.php";
//leggo il submit
if(isset($_POST['submit']) && $_POST['submit']=="Scrivi"){
	//leggo i valori
	/*per il post nome devi mettere alcuni controlli, puè essere
	  pericoloso inserire direttamente nel db, come minimo un adslashes
	  che ti serve per i nomi del tipo "D'Alba"
	  poi quando lo leggerai mettarerai stripslashes*/
	$nome=addslashes(trim($_POST['nome']));
	//ti conviene verificare se è stato immesso nome vuoto
	if($nome==""){
		echo "ti sei dimenticato di metter il nome";
		//dopo 3 secondi ripulisco il tutto senza entrare nel db
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	}else{
		//il nome non è vuoto leggo gli altri post
		//proveniendo da un checkbox selzionato di default l'isset non servirebbe
		if(isset($_POST['pulman'])){$pulman=$_POST['pulman'];}
		if(isset($_POST['pranzo'])){$pranzo=$_POST['pranzo'];}
		$query="INSERT INTO prenotazioni(nome,pranzo,pulman) VALUES('$nome','$pulman','$pranzo')";
		$result=mysql_query($query);
		if($reseult){
			echo "prenotazione eseguita";
		}else{
			echo "c'è stato un errore, riprova più tardi";
		}//fine if-else salvataggio
		//finito il tutto ritorno al form, se ad altra pagina metti al posto di.htm....PHP_SELF']).
		//il nome della pagina a cui vuoi che l'utente sia riinviato
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	}//fine if-else nome
}//fine if submit
?>
<h1>Prenotazione:</h1> 
<form action="<?php htmlspecialchars(echo $_SERVER['PHP_SELF']); ?>" method="post"> 
Nome e Cognome:&nbsp; 
<input name="nome" type="text"><br /> 
Pullman:&nbsp; 
Sì<input type="radio" name="pullman" value="sì" />&nbsp; 
No<input type="radio" name="pullman" value="no" checked="checked" /><br> 
Pranzo:&nbsp; 
Sì<input type="radio" name="pranzo" value="sì" />&nbsp; 
No<input type="radio" name="pranzo" value="no" checked="checked" /><br><br> 
<input name="submit" type="submit" value="Scrivi"><br>
<!-- metti anche il pulsante di reset -->
<input type="reset" name="Submit" value="Ripristina">
</form>

vedi, se togli i commenti, sono davvero poche righe di codice, quindi mi sembra inutile scomodare le classi
 

angeliam

Nuovo Utente
10 Apr 2010
9
0
0
Grazie mille!!!
solo che provando le tue modifiche, appena carico la pagina di prenotazione, mi dice questo:
Parse error: syntax error, unexpected T_ECHO, expecting ')' in /membri/happeningac2010/prenota.php on line 36

che dovrebbe coincidere con:
<form action="<?php htmlspecialchars(echo $_SERVER['PHP_SELF']); ?>" method="post">
sempre se l'errore è veramente su questa riga!

Inoltre, se clicco sulla pagina connetti.php, mi dice:
Access denied for user 'happeningac2010'@'localhost' (using password: YES)

(le pagine le sto caricando su altervista, dove ho un Db mysql fornito da loro!)
 

angeliam

Nuovo Utente
10 Apr 2010
9
0
0
il primo errore dovrebbe essere in un echo di troppo!
invece di scrivere
PHP:
<form action="<?php htmlspecialchars(echo $_SERVER['PHP_SELF']); ?>" method="post">
si deve scrivere
PHP:
<form action="<?php htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
(almeno credo)

in questo modo, però, sia cliccando sulla pagina prenota.php sia su connetti.php, entrambe mi danno la seguente comunicazione:
Access denied for user 'happeningac2010'@'localhost' (using password: YES)

why??? :crying:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao, mea culpa

<form action="<?php htmlspecialchars(echo $_SERVER['PHP_SELF']); ?>" method="post">

deve essere

<form action="<?php echo htmlspecialchars( $_SERVER['PHP_SELF']); ?>" method="post">

ma ho la testa un po' in pallone, con la primavera scoppiano le allergie:gun:
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
scusa dimenticavo
togli l'include e mettilo dentro l'if

PHP:
<?php 

//leggo il submit 
if(isset($_POST['submit']) && $_POST['submit']=="Scrivi"){ 
//usa il include_once oppure require_once  
include_once "connetti.php"; //verifica come hai chiamato il fale con i dati di connessione
//eccetera....
 

angeliam

Nuovo Utente
10 Apr 2010
9
0
0
Sei stato davvero grande...ora mi fa vedere la form!
Solo che nel momento in cui schiaccio il pulsante "Scrivi", mi esce il solito messaggio di access denied...anche se i dati per l'accesso al db li ho inseriti correttamente (infatti accedendo con gli stessi dati a phpmyadmin non ci sono problemi!)...ora mi sa che stacco...ci rimetto le mani domani, sperando in qualche altro consiglio e soprattutto di risolvere al più presto, così non ti scasso più! :)

Ancora grazie mille,
a presto!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
guarda che probabilmente l'errore è qui

<?php
// parametri per la connessione al database
$nomehost = "localhost";
$nomeuser = "user";
$password = "password";
$nomedb = "nomeDB";
//---connessione----------------------------------------------------
$conn = @mysql_connect($host,$nomeuser,$password) or die (mysql_error());
$sel = @mysql_select_db($nomedb) or die (mysql_error());
?>
il nome della variabile deve essere lo stesso o entrambe $nomehost oppure entrambe $host

non avevo mai fatto così tanti errori di distrazione in 10 righe di script:eek:
 

angeliam

Nuovo Utente
10 Apr 2010
9
0
0
Grazie...errori che io non avevo visto...che occhio! ;)
Ora almeno si connette al DB...solo che quando provo a schiacciare il bottone "Scrivi" mi dice il messaggio "c'è stato un errore, riprova più tardi", che niente non è! :)
(avevo notato che l'if che controlla il risultato della query contiene $reseult che invece è $result :) )

Poi, dopo 2 o 3 volte che ho provato la form, sono andato a vedere il db con phpmyadmin, e ho notato che un record me l'ha inserito...poi però ho riprovato con un altro inserimento (con valori diversi), ma non mi inserisce più niente!

Ora provo ad analizzare meglio il codice...vediamo un po' se riesco a trovare qualcosa!

A presto!
 

angeliam

Nuovo Utente
10 Apr 2010
9
0
0
Ah, una cosa...pensi che sia un problema tra php4 e php5? perchè volendo potrei cambiare le impostazioni e mettere a on il supporto a php5!
 

angeliam

Nuovo Utente
10 Apr 2010
9
0
0
Ho risolto così, anche se magari non è molto ortodosso!
Ho messo tutto in un'unica pagina e ho usato la funzione mysql_db_query, come di seguito riportato:

PHP:
<?php

//leggo il submit
if(isset($_POST['submit']) && $_POST['submit']=="Prenota"){

	$nomehost = "localhost";
	$nomeuser = "nomeuser";
	$password = "password";
	$nomedb = "nomedb";
	//---connessione----------------------------------------------------
	$conn = mysql_connect($nomehost,$nomeuser,$password) or die (mysql_error());

	//leggo i valori
    /*per il post nome devi mettere alcuni controlli, può essere
      pericoloso inserire direttamente nel db, come minimo un adslashes
      che ti serve per i nomi del tipo "D'Alba"
      poi quando lo leggerai metterai stripslashes*/

    $nome=addslashes(trim($_POST['nome']));
    //ti conviene verificare se è stato immesso nome vuoto
    if($nome==""){
        echo "<b style='color:red;'>Ti sei dimenticato di scrivere il nome</b>";
        //dopo 3 secondi ripulisco il tutto senza entrare nel db
        echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
    }else{
        //il nome non è vuoto leggo gli altri post
        //proveniendo da un radio button selzionato di default l'isset non servirebbe
        if(isset($_POST['pullman'])){$pullman=$_POST['pullman'];}
        if(isset($_POST['pranzo'])){$pranzo=$_POST['pranzo'];}

        $query="INSERT INTO prenotazioni(nome,pranzo,pullman) VALUES('$nome','$pullman','$pranzo')";
        $result=mysql_db_query($nomedb,$query,$conn);

        if($result){
            echo "<b>Prenotazione eseguita con successo</b>";
        }else{
            echo "<b>C'è stato un errore, riprova più tardi</b>";
        }//fine if-else salvataggio

        //finito il tutto ritorno al form, se ad altra pagina metti al posto di.htm....PHP_SELF']).
        //il nome della pagina a cui vuoi che l'utente sia riinviato
        echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
    }//fine if-else nome

}//fine if submit
?>

<h1>Prenotazione:</h1>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
Nome e Cognome:&nbsp;
<input name="nome" type="text"><br />
Pullman:&nbsp;
Sì<input type="radio" name="pullman" value="sì" />&nbsp;
No<input type="radio" name="pullman" value="no" checked="checked" /><br>
Pranzo:&nbsp;
Sì<input type="radio" name="pranzo" value="sì" />&nbsp;
No<input type="radio" name="pranzo" value="no" checked="checked" /><br><br>
<input name="submit" type="submit" value="Prenota">&nbsp;
<!-- metti anche il pulsante di reset -->
<input type="reset" name="Submit" value="Reset">
</form>

Ho visto che funziona...come primo approccio al PHP non è stato male...e ti ringrazio di cuore per il supporto che mi hai dato!
Ora devo sfuticchiare un po' col Javascript per fare in modo che questa form mi compaia in una specie di pop-up!

Grazie Ancora!
Buona giornata!!!
 

MarcoGrazia

Utente Attivo
15 Dic 2009
852
20
28
62
Udine
www.stilisticamente.com
Discussioni simili
Autore Titolo Forum Risposte Data
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
L form immagini per il database PHP 0
U PHP bottone per invio mail o ritorno al form PHP 15
T [PHP] Creare Honeypot per form contatti PHP 10
D [WordPress] come fare per estrarre dati da un db MySQL tramite una form e visualizzare il risultato WordPress 0
I Guida/Tutorial configurare PHPMailer per inviare mails tramite contact form? PHP 2
M [PHP] Framework per form complessi (configuratore prodotto) PHP 6
S [PHP] Aiuto creazione form php per completamento modello word PHP 1
Z [MySQL] Campi corretti per form... MySQL 2
sandropochi [PHP] Form per creare filtro di ricerca su DB PHP 8
K [WordPress] Plugin per inserire un form per la ricerca in un database.. come si fa? WordPress 1
U [PHP] form per ricerca multipla: Unknown column 'undefined' in 'where clause' PHP 2
S Concatenare due campi di un form per creare un indirizzo web valido Javascript 7
xone Form completo Testi + multiple image per inserimento Annunci PHP 0
C Come posso integrare il bottone "paga adesso" di paypal e un form php per invio dati? PHP 1
A Form per modifica record database PHP 9
F aiuto per funzionamento sito responsive e form contatti HTML e CSS 29
elpirata Idee per personalizzare form HTML e CSS 9
L errore mysql per form di registrazione PHP 3
E Correzione per form PHP/HTML PHP 3
B Problema form mail per invio doppio allegato PHP 1
P Recupero dati per select form PHP 9
A Problema orario invio mail per form PHP 4
A consiglio uso jquery php per mostrare parte di un form PHP 6
A consiglio uso jquery per mostrare parte di un form jQuery 0
A Aiuto per Select form dinamica PHP 0
L come passare il campo allegato dal file html al fiel php per spedirlo con un form PHP 12
S Form per mandare la mail HTML e CSS 2
M [risolto] Script ajax per form e mappe Ajax 6
B aiuto per Form di eliminazione record PHP 21
asevenx form per formattare testo e inserirlo in databse PHP 1
U form mail per inviare tracciabilità corriere PHP 0
L Aiuto per ultimazione form invio email PHP 3
F Controlli form per Registrazione utenti PHP 9
A Pulsante per compilare una form php in automatico con dati presi da un db PHP 6
F Crear un form Contatti, per un Bed&Breakfast, dinamico, con Wordpress WordPress 3
A form in php o html per raccolta mail PHP 4
A da dove incominciare per fare vari form PHP 2
M Problema con form per accesso area riservata ai soci PHP 2
P Form per ricerca multipla in MYsql PHP 2
A problema con un semplice form per un loggin in php PHP 2
M Sicurezza dati form per insert e select in database PHP 11
C Aiuto per form PHP 5
A Aiuto per form email con allegato PHP 4
YellowMan Form mail per WordPress in italiano WordPress 2
P Mercatino Form annunci per regione Classic ASP 8
A Un input di tipo button deve per forza essere contenuto in un Form ?? HTML e CSS 6
R Altri controlii per windows form .NET Framework 2
asevenx problema con funzione per far apparire e scomparire un form di commenti PHP 1
G Inserire un campo mysql in un select per form PHP 3

Discussioni simili