Problema con Guesbook: Il messaggio non viene sempre inviato

Scar991

Utente Attivo
30 Apr 2012
167
0
0
Salve a tutti.
Ho iniziato a strutturare un Guestbook seguendo una guida che ho trovato online...
Ho utilizzato il phpmyadmin di Altervista per creare la tabella e il codice risultante è questo

Codice:
CREATE TABLE IF NOT EXISTS `Guestbook` (
  `NOME` varchar(40) NOT NULL,
  `COGNOME` varchar(40) NOT NULL,
  `MESSAGGIO` longtext NOT NULL,
  `INDIRIZZO` varchar(150) NOT NULL,
  `DATA_ORA` datetime NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

ora, ho collegato la mia pagina del guestbook al database

PHP:
<?php
$connessione=mysql_connect("localhost", "root", "");
$selezione_db=mysql_select_db("my_xxx", $connessione);
?>

e ho creato il mio form nella pagina, aggiungendo il codice PHP dove voglio che compaia il messaggio

HTML:
<form id="Guestbook" name="form1" method="post" action="guestbook.php">
      <fieldset>
        <legend>Lascia un Segno!</legend>
        <p><span id="nome">
        <label for="name">Nome*:</label>
        <input type="text" name="name" id="name" tabindex="10" />
        <br />
        <span class="textfieldRequiredMsg">È obbligatorio specificare un valore.</span><span class="textfieldInvalidFormatMsg">Formato non valido.</span></span></p>
        <p><span id="cognome">
        <label for="surname">Cognome:</label>
        <input type="text" name="surname" id="surname" tabindex="20" />
<span class="textfieldInvalidFormatMsg">Formato non valido.</span></span></p>
        <p><span id="email">
        <label for="e-mail">Email*:</label>
        <input type="text" name="e-mail" id="e-mail" tabindex="30" />
        <span class="textfieldRequiredMsg"><br />
        È obbligatorio specificare un valore.</span><span class="textfieldInvalidFormatMsg"><br />
        L'indirizzo specificato non è valido.</span></span></p>
        <p><span id="messaggio">
          <label for="message">Messaggio*:</label>
          <textarea name="message" id="message" cols="45" rows="5" tabindex="40"></textarea>
<span class="textareaRequiredMsg"><br />
        È obbligatorio specificare un valore.</span></span></p>
        <p>
          <input type="submit" name="send" id="send" value="Invia" tabindex="50" />
          <input type="reset" name="reset" id="reset" value="Reset" tabindex="60" />
        </p>
        <hr />
PHP:
        <?php
        	  if (isset($_POST["send"]) && $_POST["send"] == "Invia") { 
              
$inserimento=mysql_query("insert into Guestbook (NOME, COGNOME, MESSAGGIO, INDIRIZZO, DATA_ORA) values ('" . $_POST['name'] . "', '" . $_POST['surname'] . "', '" . $_POST['message'] . "', '" . $_POST['e-mail'] . "', now())");
echo "Il tuo messaggio è stato inviato con successo!";
}
else
echo "";
?>
HTML:
      </fieldset>
    </form>

NB: Per una questione di chiarezza ho separato il codice HTML dal PHP, ma sono tutti insieme, naturalmente

Ora, ho provato a mandare dei messaggi di prova, per capire se il DB funzionasse. I messaggi arrivano, ma sebbene io abbia specificato LONGTEXT come parametro della voce "messaggio", se è più lungo di un "tot" di caratteri non lo registra...

Ho iniziato con la classica dell'Iliade: arriviamo al massimo a "Cantami o Diva, del Pelide Achille"...
Cosa c'è che non va?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
a aprte quello che dice il vampiro, per prima cosa non ti conviene inserire "brutalmente" i $_POST nel db, ma fare prima delle verifiche su cosa ti inviano.
può essere molto pericoloso inviare i dati in quella maniera.
poi per verificare se il difetto è nell'invio o nella registrazione per prima cosa commenta la riga $inserimento...
e aggiungi dei var_dump per verificare

PHP:
<?php
if (isset($_POST["send"]) && $_POST["send"] == "Invia") { 
     var_dump($_POST['name']);echo "<br>";
	 var_dump($_POST['surname']);echo "<br>";
	 var_dump($_POST['message']);echo "<br>";
	 var_dump($_POST['e-mail']);echo "<br>";
	//$inserimento=mysql_query("insert into Guestbook (NOME, COGNOME, MESSAGGIO, INDIRIZZO, DATA_ORA) values ('" . $_POST['name'] . "', '" . $_POST['surname'] . "', '" . $_POST['message'] . "', '" . $_POST['e-mail'] . "', now())");
	echo "Il tuo messaggio è stato inviato con successo!";
}
else
	echo "";
//...
?>
fai delle verifiche anche con l'eneide, può darsi che l'iliade non gli piaccia (io uso la divina commedia)
poi vedremo cosa ti serve per i controlli (tra l'altro metti dei campi obbligatori, ma se non li controlli non serve a nulla)
 

Scar991

Utente Attivo
30 Apr 2012
167
0
0
Invece di LONGTEXT prova con TEXT

Stessa cosa, il risultato è lo stesso...

tra l'altro metti dei campi obbligatori, ma se non li controlli non serve a nulla

I campi obbligatori sono settati nel form tramite spry (uso Dreamweaver) e il form non viene inviato senza che i campi obbligatori siano compilati ;) Provo a fare quel che mi hai detto e ti faccio sapere
 

Scar991

Utente Attivo
30 Apr 2012
167
0
0
Ho cambiato da LONGTEXT a TEXT ma niente, non viene registrato nel db...

Codice:
string(5) "Mario" 
string(5) "Rossi" 
string(20) "[email protected]" 
string(341) "Cantami o Diva, del Pelide Achille l'ira funesta che infiniti addusse lutti agli Achei, molte anzi tempo all'Orco generose travolse alme d'eroi, e di cani e d'augelli orrido pasto lor salme abbandonò (così di Giove l'alto consiglio s'adempìa), da quando primamente disgiunse aspra contesa Il re de' prodi Atride e il divo Achille." 
Il tuo messaggio è stato inviato con successo!

Ecco il risultato del controllo, di conseguenza il messaggio viene visualizzato ma non registrato... Come si procede???
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
148
63
PR
www.borgo-italia.it
ciao
ti faccio vedere l'errore
l'ira
quell'apice manda in tilt mysql perchè viene interpretato come un fine stringa e il resto come un altro campo.

ecco i controlli, li scrivo per esteso poi se vuoi puoi condensare

PHP:
<?php
if (isset($_POST["send"]) && $_POST["send"] == "Invia") {
	$name=addslashes(trim(strip_tags($_POST['name'])));//adslshes evita quell'errore
	$surname=addslashes(trim(strip_tags($_POST['surname'])));
	$message=addslashes(trim(strip_tags($_POST['message'])));//questo sarebbe giusto verificare anche numero di caratteri minimo
	if($name==""){$err_1=FALSE;}//vuoto
	if($surname==""){$err_2=FALSE;}//vuoto
	if(strlen($message) < 10){$err_3=FALSE;}//vuoto o minore di 10 caratteri
	if(filter_var($_POST['e_mail'], FILTER_VALIDATE_EMAIL)){$e_mail=$_POST['e_mail'];}else{$err_4=FALSE;}
	if(($err_1*$err_2*$err_3*$err_4) == 0){
		echo "hai fatto degli errori";
	}else{
		$inserimento=mysql_query("insert into Guestbook (NOME, COGNOME, MESSAGGIO, INDIRIZZO, DATA_ORA) values ('$name', '$surname', '$message', '$e_mail', nov()");
		if($inserimento){
			echo "messaggio inserito";
		}else{
			echo "errore: riprova più tardi";
		}
	}
	//ritorno al form
}
?>
poi quando leggerai il testo con strpslashes ($testo) togli la \ inserita con addslashes

p.s.
non usare nei nomi il - (meno) ma l'undescore _
 

Scar991

Utente Attivo
30 Apr 2012
167
0
0
Ho messo il codice come l'hai dato e mi da un errore, o meglio mi sputa fuori l'errore!

Ho modificato i campi con l'underscore al posto dello score normale

HTML:
    <form id="Guestbook" name="form1" method="post" action="guestbook.php">
      <fieldset>
        <legend>Lascia un Segno!</legend>
        <p><span id="nome">
        <label for="name">Nome*:</label>
        <input type="text" name="name" id="name" tabindex="10" />
        <br />
        <span class="textfieldRequiredMsg">È obbligatorio specificare un valore.</span><span class="textfieldInvalidFormatMsg">Formato non valido.</span></span></p>
        <p><span id="cognome">
        <label for="surname">Cognome:</label>
        <input type="text" name="surname" id="surname" tabindex="20" />
<span class="textfieldInvalidFormatMsg">Formato non valido.</span></span></p>
        <p><span id="email">
        <label for="e_mail">Email*:</label>
        <input type="text" name="e_mail" id="e_mail" tabindex="30" />
        <span class="textfieldRequiredMsg"><br />
        È obbligatorio specificare un valore.</span><span class="textfieldInvalidFormatMsg"><br />
        L'indirizzo specificato non è valido.</span></span></p>
        <p><span id="messaggio">
        <label for="message">Messaggio*:</label>
        <textarea name="message" id="message" cols="45" rows="5" tabindex="40"></textarea>
        <span class="textareaRequiredMsg"><br />
È obbligatorio specificare un valore.</span><span class="textareaMinCharsMsg"><br />
Numero minimo di caratteri non raggiunto.</span></span></p>
        <p>
          <input type="submit" name="send" id="send" value="Invia" tabindex="50" />
          <input type="reset" name="reset" id="reset" value="Reset" tabindex="60" />
        </p>
        <hr />
PHP:
<?php 
	if (isset($_POST["send"]) && $_POST["send"] == "Invia") { 
		$name=addslashes(trim(strip_tags($_POST['name']))); //adslshes evita quell'errore 
		$surname=addslashes(trim(strip_tags($_POST['surname']))); 
		$message=addslashes(trim(strip_tags($_POST['message']))); //questo sarebbe giusto verificare anche numero di caratteri minimo 

		if($name==""){$err_1=FALSE;}//vuoto 
		if($surname==""){$err_2=FALSE;}//vuoto 
		if(strlen($message) < 10){$err_3=FALSE;}//vuoto o minore di 10 caratteri 
		if(filter_var($_POST['e_mail'], FILTER_VALIDATE_EMAIL)){$e_mail=$_POST['e_mail'];}else{$err_4=FALSE;} 
		if(($err_1*$err_2*$err_3*$err_4) == 0){  
			echo "Hai commesso degli errori! Il messaggio non è stato inserito!"; 
		}else{ 
			$inserimento=mysql_query("insert into Guestbook (NOME, COGNOME, MESSAGGIO, INDIRIZZO, DATA_ORA) values ('$name', '$surname', '$message', '$e_mail', now()); 
			if($inserimento){ 
				echo "Il tuo messaggio è stato inserito correttamente!"; 
			}else{ 
				echo "Errore nell'inserimento del tuo messaggio. Riprova più tardi.\n Clicca su 'Indietro' per recuperare il tuo messaggio"; 
			} 
		} 
		//ritorno al form 
	}
?>
HTML:
      </fieldset>
    </form>

Hai commesso degli errori! Il messaggio non è stato inserito!

Ho provato a commentare tutti i controlli ma mi sputa fuori l'altro messaggio

Errore nell'inserimento del tuo messaggio. Riprova più tardi. Clicca su 'Indietro' per recuperare il tuo messaggio

Morale della favola: non vengono inviati...
 
Discussioni simili
Autore Titolo Forum Risposte Data
T PROBLEMA CON SESSIONI PHP 3
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
T PROBLEMA CON ARRAY PHP 8
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
F Problema con risposta PHP 0
S problema con recupero dati tabella mysql PHP 2
Z Problema con il mio tp-l i nk Reti LAN e Wireless 1
L Problema RAM con Tomcat 8 Apache 0
napuleone problema con sort e asort PHP 4
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
M Problema con controllo form in real time jQuery 6
Z Problema di sincronizzazione PAYPAL con PHP PHP 1
G Problema con Get page PHP 4
P Problema con require once PHP 6
P Problema con i package Java 1
A Problema login con Safari PHP 14
F INDESIGN: problema esportazione esecutivo per la stampa con foto B/N Webdesign e Grafica 1
S problema con css bootstrap3 HTML e CSS 4
M .load() problema con caricamenti dinamici di js Javascript 0
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
T problema con select dinamica con jquery Javascript 0
S Problema con spazi bianchi HTML e CSS 4
A PROBLEMA: insert mysqli con dati Tagsinput Presentati al Forum 0
Tommy03 Problema con z-index HTML e CSS 3
M Problema inserimento parole con apostrofo nel db PHP 5
C Problema con dati meteo xml XML 1
S Problema con infrarossi videocamera IP Cam e Videosorveglianza 1
V Problema con librerie allegro5 c++ C/C++ 1
M Problema con php per calcolo costo percentuale PHP 7
S Problema con mysqli_num_rows PHP 18
grgfede Problema javascript con aruba Javascript 1
M Problema con visibility e radio button Javascript 2
Marti1! Problema con casella mail cancellata Posta Elettronica 3
L [PHP] Problema con Telegram PHP 1
tomorc [HTML] Problema con scroll bar (risolto) HTML e CSS 0
S Strano problema con i title su Google SEO e Posizionamento 3
P [ASP.Net] Problema ERR_INCOMPLETE_CHUNKED_ENCODING 206 (Partial Content) con Font ASP.NET 4
P [HTML] Problema ERR_INCOMPLETE_CHUNKED_ENCODING 206 (Partial Content) con Font HTML e CSS 1
N [Apache] problema con estensione php Apache 0
C [PHP] Problema con download file PHP 0
M [PHP] Problema con preg_match PHP 1
gandalf1959 [PHP] problema con l'utilizzo di Header PHP 3
M [PHP] Problema con query select PHP 2
S [Javascript] Problema con condizione "if" Javascript 2
K Problema di indicizzazione con dominio vecchio vuoto SEO e Posizionamento 2
M [WordPress] Problema con pagina prodotti WordPress 0
Giacomo Boccherini Problema trasferimento file con FileZilla Windows e Software 10

Discussioni simili