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!!!
 
eh sì...ho scritto anche lì, così almeno il post ha più visibilità! :)
Cmq grazie mille!
 
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
 
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!)
 
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:
 
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:
 
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....
 
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!
 
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:
 
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!
 
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!
 
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!!!
 

Discussioni simili