form controllo con il for "Tutti i dati sono richiesti".

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
43
Massa, Italy
Salve, come posso risparmiare codice per controllare che tutti i dati devono essere inseriti e far venire fuori un messaggio tipo "La data non è corretta ",
"Non è stato inserito il titolo.. etc......etc.....

mi sembra di aver capito con gli array e le [] .. ma non so come fare. mi date una mano?

vi posto il codice:
PHP:
<?php
require_once(dirname(__FILE__) . '/inc.php');
require_once(dirname(__FILE__) . '/admin_mod.php');

$page = new Page;

$page->setTitle('Gestione NEWS');

$page->startBody();

?>
<?php

	$cat = (isset($_POST["cat"])) ? trim ($_POST["cat"]): '';
	$user = (isset($_POST["user"])) ? trim ($_POST["user"]): '';	
	$active = (isset($_POST["active"])) ? trim ($_POST["active"]): '';
	
if(isset($_POST["invia"]))
{
	$cat = protect($_POST["cat"]);
	$user = protect($_POST["user"]);
    $titolo = protect($_POST["titolo"]);
    $testo = protect($_POST["testo"]);
    $intro = protect($_POST["intro"]);
  	
	$dtmPubblicazione = protect($_POST["data"]);

	
	if(empty($_POST["user"]))
	{
	$error = "L'username non &egrave; stato inserito.";
	}elseif($_POST["cat"] == "0")
	{
	$error = "La categoria non &egrave; stata inserita.";
	}
	elseif(empty($titolo))
	{
	$error = "Il titolo non &egrave; stato inserito";
	}elseif(!isString($titolo))
	{
	  $error = "Nel titolo ci sono simboli non consentiti nell'inserimento.";
	}
	elseif(empty($intro))
	{
	$error = "La introduzione non &egrave; stato inserito";
	}
	elseif(empty($testo))
	{
	$error = "Il testo non &egrave; stato inserito";
	}
	elseif(empty($dtmPubblicazione))
	{
	$error = "La data di pubblicazione non &egrave; stata inserita";
	}elseif(!isData($_POST["data"]))
	{
	$error = "La data deve avere il formato inglese data/tempo";
	}
	elseif(empty($active))
	{
	$error = "Lo stato della notizia non &egrave; stato selezionato";
	}
	else
	{
	
	$db_cat = $db->real_escape_string($cat);
	$db_user_id = $db->real_escape_string($user);
    $db_titolo = $db->real_escape_string($titolo);
	$db_testo = $db->real_escape_string($testo);
	$db_intro = $db->real_escape_string($intro);
    $db_dtmPubblicazione = $db->real_escape_string($dtmPubblicazione);
    $db_active = $db->real_escape_string($active);
	
		$strSQL = "INSERT INTO news(";
		$strSQL.="_userid,";
		$strSQL.="_catid,";
		$strSQL.="titolo,";
		$strSQL.="intro,";
		$strSQL.="testo,";
		$strSQL.="data,";
		$strSQL.="active)";
		$strSQL.= "VALUES(";
		$strSQL.="".$db_user_id.",";
		$strSQL.="'".$db_cat."',";
		$strSQL.="'".$db_titolo."',";
		$strSQL.="'".$db_intro."',";
		$strSQL.="'".$db_testo."',";
		$strSQL.="'".$db_dtmPubblicazione."',";
		$strSQL.="".$db_active.")";
		$db->query($strSQL) or die($db->error);
       
		$msg = "<p>Aggiunto</p>";
		$msg.="<p><a href=\"news.php\">Torna alla lista</a></p>";
		$msg.="<p><a href=\"news_aggiungi.php\">Aggiungi ancora</a></p>";
		}
	}
	
	require_once(dirname(__FILE__) . "/tiny_mce_news.php");
?>
<p align="center"><a href="news.php">Torna indietro</a></p>
<p class="titolo">Aggiungi</p>
<?php
 if(isset($error)){ echo "<p class=\"error\">".$error."</p>";}
if(isset($msg)){ echo $msg;} else {
?>
	<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">



<table width="100%" align="center">
<tr>
	<td>User</td>
	
					
				<td><input class="input" type="text" name="user_text" id="user_text" size="25" value="<?php  echo htmlspecialchars(get_username($_SESSION["user_crypt"]));   ?>" readonly />
				<input class="input" type="hidden" name="user" id="user" size="25" value="<?php echo htmlspecialchars($_SESSION["user_id"]);?>" /></td>
			</tr>
<tr>
      <td>Seleziona Categoria</td>
      <td><?php echo "<select  name=\"cat\">";?>

        <option  selected="selected" value="0">Seleziona</option>
        <?php
	$result = $db->query("SELECT * FROM news_categorie");
	
	while($row = $result->fetch_array())
	{
	$_cat= $row['titolo'];
	$id = $row['id'];
  ?>
    <option value="<?php echo $id; ?>"<?php if($cat=="".$id."") echo ' selected'?> ><?php echo $row["titolo"]; ?></option>
           <?php
  }
?>
      </select></td>
    </tr>
<tr>
	<tr>
	<td>Titolo</td>
	<td><input name="titolo" type="text" id="titolo"  value="<?php if(isset($_POST['titolo'])){echo htmlspecialchars($_POST['titolo']);}?>" size="40"  /></td>
</tr>
<tr>
	<td>Introduzione</td>
	<td><textarea cols="50" rows="10" name="intro"><?php if(isset($_POST['intro'])){echo htmlspecialchars($_POST['intro']);}?></textarea></td>
</tr>
<tr>
	<td>Testo</td>
	<td><textarea cols="50" rows="10" name="testo"><?php if(isset($_POST['testo'])){echo htmlspecialchars($_POST['testo']);}?></textarea></td>
</tr>

<tr>
	<td>Data</td>
	<td><input name="data" type="text" id="data"  value="<?php if(isset($_POST['data'])){echo $_POST['data'];}else { echo  "".date("Y-m-d H:i:s").""; }?>"  /></td>
</tr>
<tr>
	<td>Stato di attivazione</td>
	<td>
		 Pubblica<input type="radio" name="active" value="1"  <?php if($active=='1') echo 'checked="checked"'?> />
     Nascosto<input type="radio" name="active" value="2" <?php if($active=='2') echo 'checked="checked"'?>/>
</td>
</tr>
<tr>
	<td></td>
	<td></td>
</tr>
</table>
		<input type="submit" value="Aggiungi" name="invia" />
	</form>
	<?php 
	}?>
<?php
$page->endBody();
echo $page->render('layout/template.php');
?>

vi ringrazio molto. e buona giornata.
 
Sicuramente puoi risparmiare una montagna di codice!
Innanzi tutto ti consiglio di mettere tutti i campi del tuo form in un array dedicato.
Questo puoi farlo specificando gli <input> in questo modo

HTML:
<input type='text' name='nomeform[nomecampo]'/>

Cosi' se in grado di accedere al dato tramite php utilizzando

$_POST['nomeform']['nomecampo'];

Grazie a questa tecnica, sei in grado di scorrerti l'array e valutare l'esistenza dei campi all'interno del ciclo.
Ecco l'esempio

PHP:
foreach ($_POST['nomeform'] as $campo)
   if(empty($campo))
     $error="Errore! il campo $campo e' vuoto!".

In queste 3 righe riusciamo ad automatizzare cio' che tu hai postato in circa 30 righe :)
Ovviamente, se vuoi dei messaggi di errore piu' specifici, dobbiamo aggiungere un array di mappatura.
Ecco l'esempio

PHP:
$errori['nomeform']['nomecampo1']="Questo e' l'errore per il campo1";
$errori['nomeform']['nomecampo2']="Questo e' un errore diverso per il campo2";

A questo punto il ciclo diventerebbe:
PHP:
foreach ($_POST['nomeform'] as $campo)
   if(empty($campo))
     $error=$errori['nomeform'][$campo];

Fammi sapere se hai bisogno di altri chiarimenti!
 
Ultima modifica di un moderatore:
ciao
oltre a quanto ti ha detto alexa per mostrare tutti gli errori (se più di uno) concatena la variabile $error
PHP:
<?php
//.....
	$error="";
	foreach ($_POST['nomeform'] as $campo => $val){
		if(empty(trim($val)){
			$error.="Errore! il campo $campo &egrave; vuoto!<br />";
		}
	}
	if($error==""){
		//fai quello che devi fare
	}else{
		//mostri gli errori
		echo $error;
		//e rimandi al form
	}
//.....
?>
certo presenta un piccolo difetto, in questo modo verifichi solo una caratteristica (in questo caso se è vuoto)
ma se vuoi verificare di un campo anche altre cose, e non solo se vuoto, devi verificare il campo specifico, quindi la serie di if diventano indipensabili.
se come dici vuoi verificare una data oltre al fatto che non sia vuota devi verificare es. che non sia 31.02.2013 e se tale data ti serve poi nel db (es order by data) devi verificare anche che sia inserita con un formato unico
 

Discussioni simili