Newsgroup: it.comp.www.php
Titolo: help con modulo di autoinvio

salve a tutti, ogni tanto in preda alla disperazione mi rivolgo come ultima 
risorsa a questo ng (in ultima analisi per evitare di farvi perdere tempo), 
ma ho sbattuto il musu su uno script che non riesco a far funzionare:
lo script non è altro che un form nel quale occorre inserie la propia email 
e fatto ciò la stessa viene memorizzata in un database, lo script è preso 
dal libro della macgrowhill php5 & mysql.,
lo stesso si avvale della tecnica dell'autoinvio, ovvero il form di 
inserimento della email e lo script che accetta il valore inserito e poi lo 
passa al database stanno sullo stesso script, in particolare viene 
utilizzato un metodo per il quale il codice php viene inserito prima del 
codice html per gli opportuni controlli di stato.
 pur avendo io compreso concettualmente ogni singolo passaggio, non riesco a 
capire come questo form potrebbe funzionare dato che lo stesso parte con:
<?php if ($_POST['submit'] == 'Submit')
il sopracitato submit non è mai stato assegnato pertanto come può mai 
funzionare???
io cmq vi allego lo script completo che in effetti per averlo capito io 
dovrebbe essere abbastanza semplice se qualcuno quando ha un pò di tempo è 
disposto a spiegarmi dov'è il lato oscuro di questo script sarei molto 
grato.
ciao e scusate se commetto errori tipici da noob :)
___________________________________________
<!-- Listing 17-3: unified form and form-handler (newsletter_signup.php) -->
<?php
if ($_POST['submit'] == 'Submit') {
  if (!$_POST['email'] || $_POST['email'] == "" || strlen($_POST['email'] > 
30)) {
    $message = '<P>There is a problem.  Did you enter an email 
address?</P>';
  } else {
    // Open connection to the database
    mysql_connect("localhost", "phpuser", "sesame") or die("Failure to 
communicate with database");
    mysql_select_db("test");
    // Insert email address
    $as_email = addslashes($_POST['email']);
    $tr_email = trim($as_email);
    $query = "INSERT INTO mailinglist (ID, Email, Source)
              VALUES(NULL, '$tr_email', 
'
www.example.com/newsletter_signup.html
')
             ";
    $result = mysql_query($query);
    if (mysql_affected_rows() == 1) {
      $message = '<P>Your information has been recorded.</P>';
      $noform_var = 1;
    } else {
      error_log(mysql_error());
      $message = '<P>Something went wrong with your signup attempt.</P>';
    }
  }
  // Show the form in every case except successful submission
  if (!$noform_var) {
    $thisfile = $_SERVER['PHP_SELF'];
    $message .= <<< EOMSG
<P>Enter your email address and we will send you our weekly newsletter.</P>
<FORM METHOD="post" ACTION="$thisfile">
<INPUT TYPE="text" SIZE=25 NAME="email">
<BR><BR>
<INPUT TYPE="submit" NAME="submit" VALUE="Submit">
</FORM>
EOMSG;
  }
}
?>
<HTML>
<HEAD>
<STYLE TYPE="text/css">
<!--
BODY, P      {color: black; font-family: verdana; font-size: 10 pt}
H1        {color: black; font-family: arial; font-size: 12 pt}
-->
</STYLE>
</HEAD>
<BODY>
<TABLE BORDER=0 CELLPADDING=10 WIDTH=100%>
<TR>
<TD BGCOLOR="#F0F8FF" ALIGN=CENTER VALIGN=TOP WIDTH=17%>
</TD>
<TD BGCOLOR="#FFFFFF" ALIGN=LEFT VALIGN=TOP WIDTH=83%>
<H1>Newsletter sign-up form</H1>
<?php echo $message; ?>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

 ?>
[CUT]
ovvero ci porta a mostrare all'utente il form. Quando l'utente compila 
il form e fà il submit, vengono passati in $_POST i valori alla pagina 
stessa. In particolare $_POST['submit'] stavolta sarà =='Submit' dunque 
verrà valutato il blocco di codice interno del 1° IF. Questo blocco di 
codice esegue alcuni controlli e eventualmente inserisce l'email nel 
database.
ragionaci un pò su, se indentati il codice "a dovere" dovrebbe risultare 
evidente il flusso di esecuzione.
ciao
Alesi_27

 <?php if ($_POST['submit'] == 'Submit')
Infatti, come hai già detto tu, questa riga si aspetta una chiamata POST 
inviata da un pulsante conl nome di "submit"
Mi sa tanto che nel libro ci sia un'altro pezzetto di codice che compia tale 
chiamata.
Se non c'é....mmmh...mi sa tanto che si son persi tra le righe.
Ciao

il problema è che io son noobetto e lo script è scaricato dal sito ufficiale 
della macgrawhill quindi si suppone che preso così com'è e come io l'ho 
postato dovrebbe fungere, invece mi dà proprio un errore nel primo if, le 
parentesi e tutto il resto sembra giusto ..ma se poi anche la macgrawhill 
sgarra.. povero me...
grazie comunque per il tmpo che avete impiegato nel guardare lo script:) 

 30)) {
Sostituisci le righe sopra con qualcosa del genere:
if (isset($_POST['submit'])) && $_POST['submit'] == 'Submit') {
  if (!isset($_POST['email']) || $_POST['email'] == "" || strlen($_POST['email'] > 30 {
    ...
  }
}
Ciao.
-- 
Long John

 if (!isset($_POST['email']) || $_POST['email'] == "" || strlen($_POST['email'] > 30 {
C'è un errore: mancano due parentesi tonde alla fine della riga
precedente.
if (!isset($_POST['email']) || $_POST['email'] == "" || strlen($_POST['email']) > 30) {
Ciao.
-- 
Long John

 if (isset($_POST['submit'])) && $_POST['submit'] == 'Submit') {
                           ^^^^
E anche qui, c'è un errore: la seconda parentesi è di troppo.
if (isset($_POST['submit']) && $_POST['submit'] == 'Submit') {
Ciao.
-- 
Long John

 ha scritto nel messaggio 
news:obmwusy6yx7s$.1clx89nepifgq.dlg@40tude.net...


>>>if (isset($_POST['submit'])) && $_POST['submit'] == 'Submit') {
Scusate se mi intrometto ma mi accorgo che forse la domanda può essere 
inerente.
Se al posto di utilizzare
  if (isset($_POST['submit'])) ..etc.
si utilizzasse  if (($_POST['submit'] == NULL) ...etc.
Sarebbe ugualmente corretto? Si giungerebbe allo stesso risultato??
In caso negativo perchè?
In quanto ho avuto non pochi problemi con una costruzione analoga e 
variabili Superglobali $_POST
che derivavano tra gli altri da due RadioButtons.
Puntualmente se selezionati mi facevano letteralmente ignorare il fatto 
che nella Costruzione IF avessi richiesto
che TUTTI i campi fossero compilati.

"TalkBox" ha scritto nel messaggio

non so in merito alla tua domanda però dopo qualche giorno di sbatterci la 
testa con l'aiuto di questo ng, con alcuni libri e pagine web sono riuscito 
a trovare la soluzione per un corretto modulo di auto invio, in effetti la 
soluzione prospettata da long jonh con le relative correzioni andava nella 
strada giusta ma mancava ancora una cosetta ed in particolare la prima riga 
deve essere questa:
<?php if ((!isset($_POST['inserisci'])) || ($_POST['inserisci'] != 
'Inserisci'))
$message="benvenuto";
ecc..
posto il listato completamente fatto da me quindi abbastanza noob come 
script però funge sono alle prime armi anche con i css perciò non sarà il 
massimo.
in pratica questo script presenta una pagina con un form, la prima volta che 
appare ti dà il messaggio di benvenuto (la riga che mancava ^^) le 
successive volte se non inserisci i dati del form ti appare un messaggio di 
errore, chiaramente è ancora da migliorare sul lato della gestione degli 
eventuali errori del database ecc.. però come base funge anche molto bene:).
ovviamente i + esperti storceranno il naso su questo script che è scritto 
alla noob maniera , però è abbastanza semplice da implementare:) spero possa 
aiutarti:
per maggiore comprensibilità posto anche i file esterni  include e  foglio 
di stile per il menu.
considera che io non uso la variabile $_SERVER['PHPSELF'] per far si che i 
dati vengano mandati nello stesso modulo
perchè utilizzo easy php versione 1-8 che usa il php 4.x e pertanto non 
gestisce quella variabile (anche se ne gestisce una simile )
basterà adattare le varie voci e le connessione al database per poterlo 
utilizzare.
----------------------------------------------------------
<?php
if ((!isset($_POST['inserisci'])) || ($_POST['inserisci'] != 'Inserisci'))
$message="benvenuto";
 //{
  else if ((!isset($_POST['cognomeditta'])) || ($_POST['cognomeditta'] == 
"")|| (!isset($_POST['nomeditta'])) || ($_POST['nomeditta'] == "") || 
($_POST['datanascita'] == "") || (!isset($_POST['datanascita'])) || 
($_POST['comunenascita'] == "") || (!isset($_POST['comunenascita']))|| 
($_POST['comuneresidenza'] == "") || (!isset($_POST['comuneresidenza'])) || 
($_POST['viaresidenza'] == "") || (!isset($_POST['viaresidenza']))|| 
($_POST['codfiscale'] == "") || (!isset($_POST['codfiscale']))|| 
($_POST['cognomeditta'] == "")){
    $message= "immetti un dato corretto</P>";
     }else {
    // Open connection to the database
require("connessione_ditta_individuale.php");
$CognomeDitta=$_POST['cognomeditta'];
$NomeDitta=$_POST['nomeditta'];
$DataNascita=$_POST['datanascita'];
$ComuneNascita=$_POST['comunenascita'];
$ComuneResidenza=$_POST['comuneresidenza'];
$ViaResidenza=$_POST['viaresidenza'];
$CodFiscale=$_POST['codfiscale'];
$NomeSocieta=$_POST['nomesocieta'];
    // Insert email data
$Sql = "INSERT INTO ditta_individuale (id_ditta_individuale, cognome, 
nome,data_nascita,comune_nascita,comune_residenza,via_residenza,cod_fiscale,nome_eventuale_societa)
          VALUES(NULL, '$CognomeDitta', 
'$NomeDitta','$DataNascita','$ComuneNascita','$ComuneResidenza','$ViaResidenza','$CodFiscale','$NomeSocieta')";
$Query=mysql_query($Sql)or die(errore());
$Numero=mysql_affected_rows($Connessione);
if ($Numero==1)
{
$check=1;
$message="<p>dati inseriti";
}
else
{
error_log(mysql_error());
$message = "<P>qualcosa è andato storto nell'inserimento nel database</P>";
}
//chiusura connessione
mysql_close($Connessione)or die (errore());
}
//}
  // Show the form in every case except successful submission
  if (!isset($check)) {
    $thisfile = "
http://localhost/newsletter_signup1.php
";
    $message=$message.<<< EOMSG
<FORM METHOD="post" ACTION="$thisfile">
<div id='boxprincipale'>
<div id='boxcontenitore'>
<table>
<tr><td>cognome<td>nome<td>data di nascita<td>comune di nascita
<tr><td><input type="text" name="cognomeditta" size=20 maxlength=30>
<td><input type="text" name="nomeditta" size=20 maxlength=30>
<td><input type="text" name="datanascita" size=20 maxlength=30>
<td><input type="text" name="comunenascita" size=20 maxlength=30>
</table>
</div>
<div id='boxcontenitore'>
<table>
<tr><td>comune di residenza<td>via di residenza<td>codice 
fiscale<td>eventuale società di cui è il rapresentante
<tr><td><input type="text" name="comuneresidenza"  size=20 maxlength=30>
<td><input type="text" name="viaresidenza"   size=20 maxlength=30>
<td><input type="text" name="codfiscale"  size=16 maxlength=30>
<td><input type="text" name="nomesocieta" size=30 maxlength=30>
</table>
</div>
<div id='boxcontenitore1'>
<INPUT TYPE="submit" NAME="inserisci" VALUE="Inserisci">
</div>
</div>
<BR><BR>
</FORM>
EOMSG;
  }
?>
<HTML>
<HEAD>
<link rel="stylesheet" href="menucss1.css" type="text/css"/>
<STYLE TYPE="text/css">
#boxprincipale{
  width:80%;
  border:1px solid grey;
  padding:5%;
  color:#000;
}
#boxcontenitore{
  width:80%;
  height:auto;
  border:1px solid maroon;
  padding-top:5%;
  padding-bottom:5%;
  padding-right:0%;
  padding-left:0;
  margin-right:1%;
  margin-top:1%;
  color:grey;
  text-align:center;
  font-size:60%;
}
#boxcontenitore1{
  width:20%;
  height:auto;
  border:1px solid green;
  padding-top:5%;
  padding-bottom:5%;
  padding-right:0%;
  padding-left:0%;
  margin-right:0%;
  margin-left:60%;
  margin-top:1%;
  color:grey;
  text-align:center;
  font-size:60%;
}
table{
  border:1px solid blue;
  padding:3%;
}
td,th{
  border:1px solid grey;
  width:10%;
  height:2%;
  padding:2% 2%;
  border-spacing:50%;
  font-size:90%;
  font-style:normal;
  font-weight:normal;
  text-align:center;
  line-height:70%;
}
</STYLE>
</HEAD>
<BODY>
<ul class="menunavigazione">
    <li class="primavoce"><a href="index.php">home</a></li><li 
class="vocecorrente"><a href="calcolo_prova.php">calcolo 
canone</a></li><li><a href="database_demanio.php">database 
demanio</a></li></ul>
<H1>inserimento dati ditta</H1>
<p><?php echo $message; ?>
</BODY>
</HTML>
-------------------------------------------------------
//file include esterno chiamato connessione_ditta_individuale.php
<?php
//dati connessione sul server locale
$Server="localhost";
$Utente="root";
$Password="";
$Database="my_totoscarantino";
$Tabella="ditta_individuale";
//funzione per eventuali errori
function errore()
{echo "errore in connessione al database! tipo di errore:<br>";
echo mysql_error();
}
//connessione e selezione database
$Connessione=mysql_connect($Server,$Utente,$Password)or die (errore());
$Db=mysql_select_db($Database,$Connessione)or die (errore());
?>
---------------------------------------------------------
//foglio di stile esterno chiamato menucss1.css
.menunavigazione{
  background:navy;
  color:white;
  margin:0;
  padding:0.2em 0;
  text-align:center;
}
.menunavigazione li{
  display:inline;
}
.menunavigazione a{
  height:0;
  padding:0.5em 15px;
  text-decoration:none;
  margin:-0.5em 0;
  border-right:2px solid white;
  white-space:nowrap;
}
.menunavigazione li.primavoce{
  border-left:2px solid white;
}
.menunavigazione a:link,
.menunavigazione a:visited{
  background:navy;
  color:white;
}
.menunavigazione a:hover,
.menunavigazione a:focus,
.menunavigazione a:active{
  background:white;
  color:navy;
}

 risultato??
Non credo che sia proprio la stessa cosa.
In generale, la riga
  if ($_POST['submit'] == NULL) 
controlla che $_POST['submit'] sia impostata al valore NULL.
La riga 
  if (isset($_POST['submit']))
verifica l'esistenza o meno della variabile $_POST['submit'],
senza fare alcun controllo sul suo valore.
Se, per esempio, $_POST['submit'] fosse uguale a 1,
$_POST['submit'] == NULL sarebbe false, mentre
isset($_POST['submit']) restituirebbe true.
Se $_POST['submit'] non esistesse, $_POST['submit'] == NULL
solleverebbe un Notice, ma sarebbe true, mentre
isset($_POST['submit']) restituirebbe false. 
Se $_POST['submit'] fosse uguale a NULL, $_POST['submit'] == NULL
serebbe true, mentre isset($_POST['submit']) restituirebbe
false.
Tutto ciò, naturalmente, salvo errori e omissioni...
Ciao.
-- 
Long John

 Ciao.
Sei stato chiarissimo e ti ringrazio per questo.
apro allora un topic specifico perchè il problema rimane.
Grazie