Form con campi input text e upload file

  • Creatore Discussione Creatore Discussione xone
  • Data di inizio Data di inizio

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
Salve a tutti, ho un form per l'inserimento di annunci, dovrei fare in modo che alla pressione del pulsante invia, il primo controllo fosse all'immagine e se non rispetta i parametri blocchi lo script e dia un messaggio di errore. Attualmente ciò accade ma anche se l'immagine non rispetta l'estensione o il peso, compare si un messaggio di errore, ma l'inserimento dell'annuncio continua comunque e non dovrebbe accadere! Lo script per il controllo è il seguente:

PHP:
$file = $_FILES["file"]["name"];

$img = "$titolo";
$img = str_replace(' ', '-', $img);

$allowedExts = array("gif", "jpeg", "jpg", "JPG", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/JPG")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 50000)
&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    }
  else
    {

    if (file_exists("../img-annunci/" . $_FILES["file"]["name"]))
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],"../img-annunci/$img.jpg");
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],"../img-annunci/$img.jpg");
      }
    }
  }
else
  {
  }

// seguono gli altri controlli sui campi input //

if (ereg("^[A-Za-z0-9]+$",$titolo)) { 
                            echo '
				<div id="message-red">
				 <p class="red-left">Errore, Sono consentiti solo caratteri alfanumerici.</p>
				</div>';

}else{
ecc.....
 
Ultima modifica di un moderatore:
ciao
ci sono alcune cose da riguardare nel tuo script, es perche fau tutto qull'ambaradan per il controllo dell'estensione?
poi per fermare l'invio
PHP:
<?php
//.....
$file = $_FILES["file"]["name"];
$estension=strtolower(pathinfo($file, PATHINFO_EXTENSION));//tutto in minuscolo
$allowedExts = array("gif", "jpeg", "jpg", "png");
if(in_array($extension, $allowedExts) && $_FILES["file"]["size"] < 50000){
	//fai gli altri controlli schematizzo
	/*
	se controllo OK prosegui
	else mostri errore e rimandi al form
	*/
}else{
	echo "file non ammesso";
	//e rimandi al form
}
//....
?>
poi non usare eregi è deprecato usa preg_match
oppure puoi con gli errori fare così (schematizzo)
PHP:
<?php
$errore="";
$file = $_FILES["file"]["name"];
$estension=strtolower(pathinfo($file, PATHINFO_EXTENSION));
$allowedExts = array("gif", "jpeg", "jpg", "png");
if(!in_array($extension, $allowedExts) || $_FILES["file"]["size"] > 50000){
	$errore.="file non ammesso<br />";
}
/*
se controllo NON OK
$errore.="caratteri non consentiti<br />";
*/
if($errore==""){//$errore rimasto vuoto
	//carichi il tutto
	//e rimandi dove vuoi
}else{
	echo $errore;
	//e rimandi al form
}
//.....
?>

dimenticavo: formatta sempre il codice con gli appositi BCCODE
 
Ciao, grazie per la correzione ma non sto riuscendo ad ordinare come si deve lo script poichè ho un mare di controlli da fare + l'invio di una mail di avviso + l'inserimento del db dei dati form + immagine caricata. C'è un modo per far vedere l'intero script in modo da poterlo ordinare? Te ne sarei davvero grato !
 
Questo è l'intero script che in grosso modo funziona ma va solo ordinato e non ne sto venendo a capo!

PHP:
<?php

$nome = $_POST['nome'];
$email = $_POST['email'];
$telefono = $_POST['telefono'];

$tipo = $_POST['tipo'];
$categoria = $_POST['categoria'];
$dove = $_POST['dove'];
$comune = $_POST['comune'];

$titolo = $_POST['titolo'];
$prezzo = $_POST['prezzo'];
$descrizione = $_POST['descrizione'];

// PROTEZIONI CONTRO SQL INJECT

$nome = strip_tags($nome);
$email = strip_tags($email);
$telefono = strip_tags($telefono);

$tipo = strip_tags($tipo);
$categoria = strip_tags($categoria);
$dove = strip_tags($dove);
$comune = strip_tags($comune);

$titolo = strip_tags($titolo);
$prezzo = strip_tags($prezzo);
$descrizione = strip_tags($descrizione);

$nome = mysql_real_escape_string($nome);
$email = mysql_real_escape_string($email);
$telefono = mysql_real_escape_string($telefono);

$tipo = mysql_real_escape_string($tipo);
$categoria = mysql_real_escape_string($categoria);
$dove = mysql_real_escape_string($dove);
$comune = mysql_real_escape_string($comune);

$titolo = mysql_real_escape_string($titolo);
$prezzo = mysql_real_escape_string($prezzo);
$descrizione = mysql_real_escape_string($descrizione);

$data .= "".date('d/m/Y');
$file = $_FILES["file"]["name"];

$img = "$titolo";
$img = str_replace(' ', '-', $img);

$estension=strtolower(pathinfo($file, pathinfo_extension));
$allowedExts = array("gif", "jpeg", "jpg", "png");
if(in_array($extension, $allowedExts) && $_FILES["file"]["size"] < 50000){

      move_uploaded_file($_FILES["file"]["tmp_name"],"../img-annunci/$img.jpg");

}else{
    echo "file non ammesso";
    //e rimandi al form
}

// CONTROLLO SE CI SONO CAMPI VUOTI

if ($nome == "" | $email == "" | $comune == "" | $titolo == "" | $descrizione == ""){
                            echo '
                            <br />
				<div id="message-red">
				 <p class="red-left">Errore, tutti i campi con la dicitura (<i>richiesto</i>) sono richiesti.</p>
                             <a href="javascript:history.back()"><< Torna indietro</a>
				</div>';
}else{


// CONTROLLO SE IL CAMPO NOME CONTIENE SOLO CARATTERI ALFANUMERICI

if (preg_match("[A-Za-z]",$nome)) {
                            echo '
				<div id="message-red">
				 <p class="red-left">Errore, campo Nome non valido.</p>
				</div>';

}else{

// CONTROLLO SE IL CAMPO COMUNE CONTIENE SOLO CARATTERI ALFANUMERICI

if (preg_match("[A-Za-z]",$comune)) {
                            echo '
				<div id="message-red">
				 <p class="red-left">Errore, campo Comune non valido.</p>
				</div>';

}else{


// CONTROLLO SE IL CAMPO TELEFONO CONTIENE SOLO NUMERI

if (ereg("^[0-9]+$",$telefono)) {  
                            echo '
				<div id="message-red">
				 <p class="red-left">Errore, campo Telefono non valido.</p>
				</div>';

}else{

// CONTROLLO SE IL CAMPO PREZZO CONTIENE SOLO NUMERI

if (preg_match("^[0-9]+$",$prezzo)) {  
                            echo '
				<div id="message-red">
				 <p class="red-left">Errore, campo Prezzo non valido.</p>
				</div>';

}else{


// CONTROLLO LA VALIDITA DELLA EMAIL

if (!eregi("^[a-z0-9][_.a-z0-9-]+@([a-z0-9][0-9a-z-]+.)+([a-z]{2,4})", $email)) {
                            echo '
				<div id="message-red">
				 <p class="red-left">Errore, indirizzo email non valido.</p>
				</div>';

}else{


$to = "blabla@bla.it";
$subject = "Inserimento nuovo annuncio rapido";
$sender = "miamail@mail.it";
$messaggio = "Inserito un nuovo annuncio rapido, verificalo prima di approvarlo.";

$ip = $_SERVER['REMOTE_ADDR'];
 
$headers = "From: $sender\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "X-Mailer: PHP " . phpversion();

$headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$headers .= "Content-Transfer-Encoding: 8bit\n\n";

$body = "Buone notizie! Un utente ha inserito un nuovo annuncio rapido IP: $ip\n\n Annuncio: $tipo $titolo\n\n";
$body .= "========================================================================================\n\n $messaggio";


$Sql="INSERT INTO annunci (id_utente, nome, email, telefono, tipo, categoria, dove, comune, titolo, prezzo, descrizione, miniatura, data, attivato) 
VALUES ('0', '$nome', '$email', '$telefono', '$tipo', '$categoria', '$dove', '$comune', '$titolo', '$prezzo', '$descrizione', '$img.jpg', '$data', 'no')";

if(!($Result=mysql_query($Sql)))
                            echo '
                            <br />
				<div id="message-red">
				 <p class="red-left">Errore, annuncio non pubblicato.</p>
				</div>';

else
{
                            echo '
                            <br />
				<div id="message-green">
				<p class="green-left">Complimenti! Il Tuo Annuncio sarà ora controllato prima di essere pubblicato. Attendi..</p>
				</div>';
                            mail($to, $subject, $body, $headers);

  }
echo('<meta http-equiv="refresh" content="5;url=../index.php">'); 
      }
     }
    }
   }
  }
 }
?>
 
Ultima modifica di un moderatore:
ciao
ci do un occhio, ma devi avere un po' di pazienza

comunque ricorda di formmattare il codice (ultime tre iconcine nell'ordine CODE, HTML, PHP)
 

Discussioni simili