Controllo FORM e invio dati al DB

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
Salve, io ho una form e vorrei fare i controlli dei dati e mandarli al mio db. Qualcuno mi può dare una mano con php?

La form è questa:
HTML:
<form id="formTXT2" enctype="multipart/form-data" method='post' action="<?php echo $_SERVER['PHP_SELF'] ?>">
<p>
<label for="nome">Nome</label>
<input type="text" name="nome" id="nome" /></p>
<p>
<label for="denominazione">Titolo</label>
<input type="text" name="denominazione" id="denominazione" /></p>
<p><label for="status">Status immobile:</label>
<select name="status">
<option value="vendita">in vendita</option>
<option value="affitto">in affitto</option>
</select></p><br />
<label for="prezzo">prezzo</label>
<input type="text" name="prezzo" id="prezzo" /></p>
<label for="ins_mail">e-Mail</label>
<input type="text" name="ins_mail" id="ins_mail" /></p>
<p>
 <input type="submit" name="submit" id="submit" value="Invia Dati" />
 </p>
</form>

i controlli che vorrei sono:
- nome e denominazione devo contenere almeno 2 caratteri
- prezzo deve essere solo un valore numerico
- mail deve controllare che sia una mail di tipo valido

L'inserimento dei dati nel db quando schiaccio il pulsante Invia Dati

ps: è una form d'esempio, la mia è più ampia e con più elementi, ma è per capire il meccanismo.

grazie mille
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
potresti fare così, poi se cerchi e guardi anche in altre discussioni trovi altre info
PHP:
<?php
if(isset($_POST['subimit'])){
	$err="";//metti a vuoto una stringa
	//poi inizi a prelevare i dati
	$nome=trim($_POST['nome']);//metto solo nome il titolo è simile
	//reg_match('/^[a-z0-9]{5,15}/i'
	if(!preg_match('/^[a-zA-Z]{2,10}/', $nome){//verifico che siano solo lettere min 2 max 10
		$err.="non hai inserito il nome o nome non valido<br />";//concateno gli errori
	}
	$stato=$_POST['status'];
	if($stato=""){
		$err.="non hai selezionato lo stato<br />";
	}
	$prezzo=trim($_POST['prezzo']+0.0;
	if($prezzo==0 || !is_float($prezzo)){// potresti verificare anche che superi un certo valore
		$err.="prezzo non valido<br />";
	}
	$email=$_POST['ins_mail'];
	if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
		$err.="indirizzo email non valido<br />";
	}
	//qui verifichi se sono stati commessi errori, se no la variabile $err è rimasta vuota
	if($err==""){
		//..... fai quello che devi fare con i dati e metti l'avviso su $err
		$err="i tuoi dati sono stati inseriti<br />";//qui non serve concatenare
	}
	//mostri il messaggio
	echo $err;
	//e torni al form pulito dopo 3 secondi (content ='3;...)
	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
?>
<form id="formTXT2" enctype="multipart/form-data" method='post' action="<?php echo $_SERVER['PHP_SELF'] ?>">
<p>
<label for="nome">Nome</label>
<input type="text" name="nome" id="nome" /></p>
<p>
<label for="denominazione">Titolo</label>
<input type="text" name="denominazione" id="denominazione" /></p>
<p><label for="status">Status immobile:</label>
<!-- per verificare la selezione ti conviene mettere la prima option vuota-->
<select name="status">
<option value="">- seleziona -</option>
<option value="vendita">in vendita</option>
<option value="affitto">in affitto</option>
</select></p><br />
<label for="prezzo">prezzo</label>
<input type="text" name="prezzo" id="prezzo" /></p>
<label for="ins_mail">e-Mail</label>
<input type="text" name="ins_mail" id="ins_mail" /></p>
<p>
 <input type="submit" name="submit" id="submit" value="Invia Dati" />
 </p>
</form>

dimenticavo:
se usi il db usa la classe PDO, le vecchie istruzioni mysql sono deprecate
 

Salvo Salvi

Utente Attivo
14 Nov 2012
230
0
0
Ciao vorresti fare tutto in php?
Perchè adesso alcuni di questi controlli li puoi fare pure in html5,
ad esempio per l'email puoi fare
<input type="email" required="required" name="email">
in questo modo il form ti controlla che l'email sia corretta e che sia riempito il campo altrimenti verrà un messaggio di errore.
in questa pagina puoi dare un occhiata http://www.w3schools.com/html/html5_form_input_types.asp.
inoltre puoi controllare anche con il php.


PHP:
$prezzo = $_POST['prezzo'];
$email = $_POST['email'];

if ( $email != ""){
}ELSE{
//SE L'EMAIL è VUOTA FAI QUELLO CHE VUOI
//....
}
  if (is_numeric($prezzo))
        {
//se è un numero....
echo "è un numero";
}

      else 
        {
//se non è un numero scegli te cosa fare

}

se mi posti il form completo ti aiuto nell intera costruzione.

PS segui lo script di borgo che è di gran lunga meglio del mio.
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
potresti fare così, poi se cerchi e guardi anche in altre discussioni trovi altre info
PHP:
<?php
if(isset($_POST['subimit'])){
	$err="";//metti a vuoto una stringa
	//poi inizi a prelevare i dati
	$nome=trim($_POST['nome']);//metto solo nome il titolo è simile
	//reg_match('/^[a-z0-9]{5,15}/i'
	if(!preg_match('/^[a-zA-Z]{2,10}/', $nome){//verifico che siano solo lettere min 2 max 10
		$err.="non hai inserito il nome o nome non valido<br />";//concateno gli errori
	}
	$stato=$_POST['status'];
	if($stato=""){
		$err.="non hai selezionato lo stato<br />";
	}
	$prezzo=trim($_POST['prezzo']+0.0;
	if($prezzo==0 || !is_float($prezzo)){// potresti verificare anche che superi un certo valore
		$err.="prezzo non valido<br />";
	}
	$email=$_POST['ins_mail'];
	if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
		$err.="indirizzo email non valido<br />";
	}
	//qui verifichi se sono stati commessi errori, se no la variabile $err è rimasta vuota
	if($err==""){
		//..... fai quello che devi fare con i dati e metti l'avviso su $err
		$err="i tuoi dati sono stati inseriti<br />";//qui non serve concatenare
	}
	//mostri il messaggio
	echo $err;
	//e torni al form pulito dopo 3 secondi (content ='3;...)
	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
?>
<form id="formTXT2" enctype="multipart/form-data" method='post' action="<?php echo $_SERVER['PHP_SELF'] ?>">
<p>
<label for="nome">Nome</label>
<input type="text" name="nome" id="nome" /></p>
<p>
<label for="denominazione">Titolo</label>
<input type="text" name="denominazione" id="denominazione" /></p>
<p><label for="status">Status immobile:</label>
<!-- per verificare la selezione ti conviene mettere la prima option vuota-->
<select name="status">
<option value="">- seleziona -</option>
<option value="vendita">in vendita</option>
<option value="affitto">in affitto</option>
</select></p><br />
<label for="prezzo">prezzo</label>
<input type="text" name="prezzo" id="prezzo" /></p>
<label for="ins_mail">e-Mail</label>
<input type="text" name="ins_mail" id="ins_mail" /></p>
<p>
 <input type="submit" name="submit" id="submit" value="Invia Dati" />
 </p>
</form>

dimenticavo:
se usi il db usa la classe PDO, le vecchie istruzioni mysql sono deprecate

Ho capito tutte le funzioni, però mi dà un errore, c'era un errore di parentesi non chiuse che ho sistemato.
Però non funziona il sistema errori, ho compilato solo il nome con "mmm" e mi da l'errore di "prezzo non valido
indirizzo email non valido" o_O

cmq ho sostituito is_double con is_numeric, a me basta che sia un numero numerico intero, è giusto?

ps: invece x il caricamento in db? va bene così?
PHP:
$sql = new mysqli("localhost", "root", "", "NOME_DB");
						$query="INSERT INTO TABELLA (RECORD1,RECORD2, eccc.....) 
						VALUES ('$nome','....','ecc..')";  
						var_dump($query);//e qui verifichi che venga scritta come dovrebbe
						if(!$sql->query($query)) { 
							echo $sql->error; 
}
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
è si, avevo fatto qualche erroretto (es. avevo scrtitto $_POST['subimit'] al posto di $_POST['submit'])
ma l'avevo buttato giu di corsa cercando di ricordare quello che ho io (che non sono andato a guardare)
poi per numero non valido sei sicuro di aver usato il punto decimale e non la virgola?
counque puoi usare l'intero, ma dipende da a cosa si riferisce il prezzo cioè se hai bisogno dei decimi e centesimi di euro, se parli di centomila euro i decimali sono ininfluenti.
poi dici che non funzia per l'email, che versione di php usi?
comunque se ti serve ti posto il corretto l'ho provato.
per l'insert nel db forse ti converrebbe trattare i dati di testo con mysqli_real_escape_string() prima di inseririli
PHP:
<?php
if(isset($_POST['submit'])){
    $err="";//metti a vuoto una stringa
    //poi inizi a prelevare i dati
    $nome=trim($_POST['nome']);//metto solo nome il titolo è simile
    //reg_match('/^[a-z0-9]{5,15}/i'
    if(!preg_match('/^[a-zA-Z]{2,10}$/', $nome)){//verifico che siano solo lettere min 2 max 10
        $err.="non hai inserito il nome o nome non valido<br />";//concateno gli errori
    }
    $stato=$_POST['status'];
    if($stato==""){
        $err.="non hai selezionato lo stato<br />";
    }
    $prezzo=trim($_POST['prezzo'])+0.0;
    if($prezzo==0 || !is_float($prezzo)){// potresti verificare anche che superi un certo valore
        $err.="prezzo non valido<br />";
    }
    $email=$_POST['ins_mail'];
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
        $err.="indirizzo email non valido<br />";
    }
    //qui verifichi se sono stati commessi errori, se no la variabile $err è rimasta vuota
    if($err==""){
        echo "tutto giusto<br>";
		//..... fai quello che devi fare con i dati e metti l'avviso su $err
        $err="i tuoi dati sono stati inseriti<br />";//qui non serve concatenare
    }
    //mostri il messaggio
    echo $err;
    //e torni al form pulito dopo 3 secondi (content ='3;...)
    echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
?>
<form id="formTXT2" enctype="multipart/form-data" method='post' action="<?php echo $_SERVER['PHP_SELF'] ?>">
<p>
<label for="nome">Nome</label>
<input type="text" name="nome" id="nome" /></p>
<p>
<label for="denominazione">Titolo</label>
<input type="text" name="denominazione" id="denominazione" /></p>
<p><label for="status">Status immobile:</label>
<!-- per verificare la selezione ti conviene mettere la prima option vuota-->
<select name="status">
<option value="">- seleziona -</option>
<option value="vendita">in vendita</option>
<option value="affitto">in affitto</option>
</select></p><br />
<label for="prezzo">prezzo</label>
<input type="text" name="prezzo" id="prezzo" /></p>
<label for="ins_mail">e-Mail</label>
<input type="text" name="ins_mail" id="ins_mail" /></p>
<p>
 <input type="submit" name="submit" id="submit" value="Invia Dati" />
 </p>
</form>

poi per kirsolo
tutti i controlli (html e/o js) risiedono sul client(pc dell'utente) sono bypassabili da uno smanettone anche non molto esperto, i controlli php sono lato server e quindi molto difficilmente raggiungibili e quindi non facilmente bypassabili, anche se in internet il pc sicuro è il pc spento
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
è si, avevo fatto qualche erroretto (es. avevo scrtitto $_POST['subimit'] al posto di $_POST['submit'])
ma l'avevo buttato giu di corsa cercando di ricordare quello che ho io (che non sono andato a guardare)
poi per numero non valido sei sicuro di aver usato il punto decimale e non la virgola?
counque puoi usare l'intero, ma dipende da a cosa si riferisce il prezzo cioè se hai bisogno dei decimi e centesimi di euro, se parli di centomila euro i decimali sono ininfluenti.
poi dici che non funzia per l'email, che versione di php usi?
comunque se ti serve ti posto il corretto l'ho provato.
per l'insert nel db forse ti converrebbe trattare i dati di testo con mysqli_real_escape_string() prima di inseririli
PHP:
<?php
if(isset($_POST['submit'])){
    $err="";//metti a vuoto una stringa
    //poi inizi a prelevare i dati
    $nome=trim($_POST['nome']);//metto solo nome il titolo è simile
    //reg_match('/^[a-z0-9]{5,15}/i'
    if(!preg_match('/^[a-zA-Z]{2,10}$/', $nome)){//verifico che siano solo lettere min 2 max 10
        $err.="non hai inserito il nome o nome non valido<br />";//concateno gli errori
    }
    $stato=$_POST['status'];
    if($stato==""){
        $err.="non hai selezionato lo stato<br />";
    }
    $prezzo=trim($_POST['prezzo'])+0.0;
    if($prezzo==0 || !is_float($prezzo)){// potresti verificare anche che superi un certo valore
        $err.="prezzo non valido<br />";
    }
    $email=$_POST['ins_mail'];
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
        $err.="indirizzo email non valido<br />";
    }
    //qui verifichi se sono stati commessi errori, se no la variabile $err è rimasta vuota
    if($err==""){
        echo "tutto giusto<br>";
		//..... fai quello che devi fare con i dati e metti l'avviso su $err
        $err="i tuoi dati sono stati inseriti<br />";//qui non serve concatenare
    }
    //mostri il messaggio
    echo $err;
    //e torni al form pulito dopo 3 secondi (content ='3;...)
    echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
}
?>
<form id="formTXT2" enctype="multipart/form-data" method='post' action="<?php echo $_SERVER['PHP_SELF'] ?>">
<p>
<label for="nome">Nome</label>
<input type="text" name="nome" id="nome" /></p>
<p>
<label for="denominazione">Titolo</label>
<input type="text" name="denominazione" id="denominazione" /></p>
<p><label for="status">Status immobile:</label>
<!-- per verificare la selezione ti conviene mettere la prima option vuota-->
<select name="status">
<option value="">- seleziona -</option>
<option value="vendita">in vendita</option>
<option value="affitto">in affitto</option>
</select></p><br />
<label for="prezzo">prezzo</label>
<input type="text" name="prezzo" id="prezzo" /></p>
<label for="ins_mail">e-Mail</label>
<input type="text" name="ins_mail" id="ins_mail" /></p>
<p>
 <input type="submit" name="submit" id="submit" value="Invia Dati" />
 </p>
</form>

poi per kirsolo
tutti i controlli (html e/o js) risiedono sul client(pc dell'utente) sono bypassabili da uno smanettone anche non molto esperto, i controlli php sono lato server e quindi molto difficilmente raggiungibili e quindi non facilmente bypassabili, anche se in internet il pc sicuro è il pc spento

Ti rispondo:
- Uso easyPhP 5.4.6.
- Nella tabella ho impostato il record prezzo su INT(10) , quindi mi va bene verificarlo per un numero intero, tranquillo non ci saranno virgole o centesimi =)
- la form avrà un action riferita ad una pagina controlloform.php ;)
- mi scriveresti gentilmente l'esempio di inserimento con mysqli_real_escape_string() ??
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
ti conviene guardare su
http://it2.php.net/manual/en/mysqli.real-escape-string.php
hai i due esempi ben fatti: a oggetti e procedurale.
se è un numero intero va bene quello che hai fatto
ultimo, puoi fare tutto nella stessa pagina, a che ti servono pagine diverse? salvo che tu non abbia un form lungo 3 km per cui è una bibbia leggere tutto il form + lo script

Ok posso farlo anche in un'unica pagina, ho 16 campi, più il campo dell'upload immagine nel server.
Ho letto mysqli_real_escape_string, ho capito tutto tranne la riga "mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");"
perchè crea una tabella temporanea come query sql? o_O
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
no no
PHP:
mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");
serve solo per fare la prova dell'esempio nel caso tu volessi vedere come funziona, immagino che tu la tabella l'abbia di già.
poi una cosa se ti fai caricare le immagini, che sono dei file, una cosa importante è verificare il tipo dei file(.jpg o .png o .gif o .pdf)
questo per impedire che qualcuno ti carichi un_bel_virus.exe o simile
se non sai come fare la verifica (non stasera) ti posto come fare
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
no no
PHP:
mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");
serve solo per fare la prova dell'esempio nel caso tu volessi vedere come funziona, immagino che tu la tabella l'abbia di già.
poi una cosa se ti fai caricare le immagini, che sono dei file, una cosa importante è verificare il tipo dei file(.jpg o .png o .gif o .pdf)
questo per impedire che qualcuno ti carichi un_bel_virus.exe o simile
se non sai come fare la verifica (non stasera) ti posto come fare

ah ecco, mi pareva un tantino strano come cosa , quindi ometto quel passaggio.
Lo script per caricare l'immagine e fare i controlli l'ho già implementato a parte, diciamo era per prova e imparare un pò il funzionamento. Ora devo solo implementare il tutto in una form unica.
Te lo posto magari mi dici se c'è qualcosa da migliorare ( è già funzionante)

PHP:
<?php
// limite peso in byte 
$peso_file = 1024 * 1024;
// inizializziamo il messaggio
$messaggio = "Carica una o piu immagini, fino ad un massimo di 4 consentite:";
// estensioni ammesse
$estensioni = array("jpg", "png", "bmp", "gif");
// percosrso destinazione immagini la cartella deve esistere e il percorso deve essere corretto
$dir = "../myCARTELLA";
// verifichiamo che sia stato premuto il submit
if (isset($_POST['upload']) && $_POST['upload'] == "Carica immagini") {
    // azzeriamo il messaggio
    $messaggio = "";
    // recuperiamo e uniamo le informazionei sulle immagini
    $infoimages = array_combine($_FILES["image"]['name'], $_FILES["image"]['tmp_name']);
    // cicliamo le immagini
    foreach ($infoimages as $k => $v) {
        // nome del file
        $nomefile = strtolower($k);
        // controlliamo il peso immagine
        if (filesize($v) < $peso_file) {
            // recuperiamo l'estensione
            $estensionefile = pathinfo($nomefile, PATHINFO_EXTENSION);
            // controlliamo il tipo immagine
            if (in_array(strtolower($estensionefile), $estensioni)) {
                // controllo caricamento
                if (is_uploaded_file($v)) {
                    // spostiamo il file nella cartella immagini
                    if (!move_uploaded_file($v, "$dir/$nomefile")) {
                        $messaggio .= "<br/>Impossibile spostare il file $k";
                    } else {
                        $messaggio .= "<br/>Immagine $k caricata con successo";
						$sql = new mysqli("localhost", "root", "", "lucatropina");
						$query="INSERT INTO myTABELLA (record1, record2, ecc....) 
						VALUES('','','','',''','','myCARTELLA/$nomefile','','','')";  
						// var_dump($query); e qui verifichi che venga scritta come dovrebbe
						if(!$sql->query($query)) { 
							echo $sql->error; 
}	
                    }
                } else {
                    $messaggio .= "<br/>Errore nell'upload del file $k.";
                }
            } else {
                $messaggio .= "<br/>Tipo immagine non consentito : $k";
            }
        } else {
            $messaggio .= "<br/>Immagine $k non caricata : limite peso superato";
        }
    }
}
?>

HTML:
<form id="formIMG" enctype='multipart/form-data' method='post' action='<?php echo $_SERVER['PHP_SELF'] ?>'>
    <p><?php echo $messaggio ?></p>
    <p>
        <input name="image[]" type="file" size="40" multiple="multiple"/>   
        <input name="upload" type="submit" value="Carica immagini" /></p>
		<p><?php echo $messaggio ?>
    </p>
</form>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
nel complesso ok, ma ci sono due punti che mi lasciano perplesso
1) tu dici di caricare un massimo di 4 immagini, ma così te ne possono caricare quante ne vogliono, potresti mettere un contatore nel foreach e quando e se diventa 5 escli dal ciclo, oppure ciclare prima i $_FILES["image"] e unsettare dal quinto in poi
2) l'insert messo dentro il foreach, da quello che ho capito che vuoi fare un utente ti manda un testo e delle foto, facendo così ripeti il record per quante immagini ti inviano, quindi o fai l'insert dopo se la tabella ha 4 campi riservati alle immagini ho fai una tabella apposita per le immagini con l'id dell'utente e poi fai una join
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
nel complesso ok, ma ci sono due punti che mi lasciano perplesso
1) tu dici di caricare un massimo di 4 immagini, ma così te ne possono caricare quante ne vogliono, potresti mettere un contatore nel foreach e quando e se diventa 5 escli dal ciclo, oppure ciclare prima i $_FILES["image"] e unsettare dal quinto in poi
2) l'insert messo dentro il foreach, da quello che ho capito che vuoi fare un utente ti manda un testo e delle foto, facendo così ripeti il record per quante immagini ti inviano, quindi o fai l'insert dopo se la tabella ha 4 campi riservati alle immagini ho fai una tabella apposita per le immagini con l'id dell'utente e poi fai una join

ho messo il contatore così:
PHP:
...
 $infoimages = array_combine($_FILES["image"]['name'], $_FILES["image"]['tmp_name']);
    // cicliamo le immagini
	$cnt=0;
    foreach ($infoimages as $k => $v) {
	if ($cnt < 4) {
		++$cnt;
        // nome del file
        $nomefile = strtolower($k);
        // controlliamo il peso immagine
        if (filesize($v) < $peso_file) {
.....

L'insert dove lo dovrei mettere? alla fine ? lo metterei dentro ai controlli del testo
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
io mettrei al posto di
PHP:
<?php
//.....
	$messaggio .= "<br/>Immagine $k caricata con successo";
	$sql = new mysqli("localhost", "root", "", "lucatropina");
	$query="INSERT INTO myTABELLA (record1, record2, ecc....) 
	VALUES('','','','',''','','myCARTELLA/$nomefile','','','')";  
	// var_dump($query); e qui verifichi che venga scritta come dovrebbe
	if(!$sql->query($query)) { 
                            echo $sql->error; 
	}
//......
?>
così
PHP:
<?php
//.......
// percosrso destinazione immagini la cartella deve esistere e il percorso deve essere corretto
$dir = "../myCARTELLA";
$salva_file=array("","","","");//creo l'array per i nomi dei file in modo che sia sempre di 4 posti anche se vengono inserite meno di 4 immagini
//......
					} else {
                        $messaggio.= "<br/>Immagine $k caricata con successo<br />";
						$salva_file[$cnt]="myCARTELLA/$nomefile";//$cnt va da 0 al numero di immagini caricate -1
					}    
//cambia per gli errori il nome della variabile es. da $messaggio a $mess_err (ricordati di inizializzarla a vuota
//......
?>
poi gli inserimenti dipende hai 4 campi dedicati al nome dei file?
comunque dopo devi unificare il tutto in un form unico quindi lo schema di inserimento dei dati per me andrebbe fatto così
PHP:
<?php
if(isset($_POST['subimit'])){
	//tutti i controlli del nome testo email come gia visti
	//qui verifichi se sono stati commessi errori, se no la variabile $err è rimasta vuota e terminare col <br />
    if($err==""){
		//solo dopo aver verificato che i dati di teso sono OK farei il caricamento delle immagini
		//se uno sbaglia es. l'email è inutile che ti riempia la cartella di immagini
		//lettura dei $_FILES e tutti i controlli, tanto se o non ci sono immagini o qualcuna non e ammessa non viene caricata
		//e l'array $salva_file prende il nome solo se tutto è ok, altrimenti il posto rimane a vuoto
		$query="INSERT INTO myTABELLA (...., imm_1,imm_2,imm_3,imm_4....) 
                VALUES(....,'{$salva_file[0]}','{$salva_file[1]}','{$salva_file[2]}','{$salva_file[3]}',.....)";
		$err=$mess_err.$messaggio."i tuoi dati sono stati inseriti<br />";
	}
	    echo $err;
    //e torni al form pulito dopo 3 secondi (content ='3;...)
    echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	//poi al posto del solo if del submit metterei anche l'else cosi il form scompare dopo il submit
	//e riappare solo dopo i messaggi eventualmente per dare meglio il tempo di leggere allunga il content='
}else{
?>
<!-- qui il form -->
<?php
}//chiusura dell'if/else submit
?>

spero di essere stato chiaro, altrimenti chiedi
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
io mettrei al posto di
PHP:
<?php
//.....
	$messaggio .= "<br/>Immagine $k caricata con successo";
	$sql = new mysqli("localhost", "root", "", "lucatropina");
	$query="INSERT INTO myTABELLA (record1, record2, ecc....) 
	VALUES('','','','',''','','myCARTELLA/$nomefile','','','')";  
	// var_dump($query); e qui verifichi che venga scritta come dovrebbe
	if(!$sql->query($query)) { 
                            echo $sql->error; 
	}
//......
?>
così
PHP:
<?php
//.......
// percosrso destinazione immagini la cartella deve esistere e il percorso deve essere corretto
$dir = "../myCARTELLA";
$salva_file=array("","","","");//creo l'array per i nomi dei file in modo che sia sempre di 4 posti anche se vengono inserite meno di 4 immagini
//......
					} else {
                        $messaggio.= "<br/>Immagine $k caricata con successo<br />";
						$salva_file[$cnt]="myCARTELLA/$nomefile";//$cnt va da 0 al numero di immagini caricate -1
					}    
//cambia per gli errori il nome della variabile es. da $messaggio a $mess_err (ricordati di inizializzarla a vuota
//......
?>
poi gli inserimenti dipende hai 4 campi dedicati al nome dei file?
comunque dopo devi unificare il tutto in un form unico quindi lo schema di inserimento dei dati per me andrebbe fatto così
PHP:
<?php
if(isset($_POST['subimit'])){
	//tutti i controlli del nome testo email come gia visti
	//qui verifichi se sono stati commessi errori, se no la variabile $err è rimasta vuota e terminare col <br />
    if($err==""){
		//solo dopo aver verificato che i dati di teso sono OK farei il caricamento delle immagini
		//se uno sbaglia es. l'email è inutile che ti riempia la cartella di immagini
		//lettura dei $_FILES e tutti i controlli, tanto se o non ci sono immagini o qualcuna non e ammessa non viene caricata
		//e l'array $salva_file prende il nome solo se tutto è ok, altrimenti il posto rimane a vuoto
		$query="INSERT INTO myTABELLA (...., imm_1,imm_2,imm_3,imm_4....) 
                VALUES(....,'{$salva_file[0]}','{$salva_file[1]}','{$salva_file[2]}','{$salva_file[3]}',.....)";
		$err=$mess_err.$messaggio."i tuoi dati sono stati inseriti<br />";
	}
	    echo $err;
    //e torni al form pulito dopo 3 secondi (content ='3;...)
    echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	//poi al posto del solo if del submit metterei anche l'else cosi il form scompare dopo il submit
	//e riappare solo dopo i messaggi eventualmente per dare meglio il tempo di leggere allunga il content='
}else{
?>
<!-- qui il form -->
<?php
}//chiusura dell'if/else submit
?>

spero di essere stato chiaro, altrimenti chiedi

mi sa che ho perso qualche graffa ma non riesco a trovarla:
Parse error: syntax error, unexpected 'else' (T_ELSE) in C:\Program Files (x86)\EasyPHP-12.1\www\form\formTxT.php on line 134

lo riscrivo in caso di altri errori:

PHP:
<?php 
if(isset($_POST['submit'])){ 
    $err="";//metti a vuoto una stringa 
    //poi inizi a prelevare i dati 
    $nome=trim($_POST['nome']); //metto solo nome il titolo è simile 
    //reg_match('/^[a-z0-9]{5,15}/i' 
    if(!preg_match('/^[a-zA-Z]{2,20}$/', $nome)){//verifico che siano solo lettere min 2 max 20 
        $err.="non hai inserito il nome o nome non valido<br />";//concateno gli errori 
	} 
	$denominazione=trim($_POST['denominazione']);//metto solo nome il titolo è simile 
    //reg_match('/^[a-z0-9]{5,15}/i' 
    if(!preg_match('/^[a-zA-Z]{2,40}$/', $denominazione)){//verifico che siano solo lettere min 2 max 40 
        $err.="non hai inserito il titolo esatto<br />";//concateno gli errori 
    } 
	$stato=$_POST['status']; 
    if($stato==""){ 
        $err.="non hai selezionato lo stato<br />"; 
    } 
	$descrizione=trim($_POST['descrizione']);//metto solo nome il titolo è simile 
    //reg_match('/^[a-z0-9]{5,15}/i' 
    if(!preg_match('/^[a-zA-Z]{2,80}$/', $descrizione)){//verifico che siano solo lettere min 2 max 40 
        $err.="non hai inserito la descrizione o il max di lettere<br />";//concateno gli errori 
    } 
    $prezzo=trim($_POST['prezzo'])+0.0; 
    if($prezzo==0 || !is_float($prezzo)){// potresti verificare anche che superi un certo valore 
        $err.="prezzo non valido<br />"; 
    } 
    $email=$_POST['ins_mail']; 
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ 
        $err.="email non valido<br />"; 
    } 
	$gg=trim($_POST['gg']);
	$mm=trim($_POST['mm']);
	$aaaa=trim($_POST['aaaa']);
	$data=$gg.$mm.$aaaa;
	if ((is_numeric($gg) == false) || (is_numeric($mm) == false) || (is_numeric($aaaa) == false )) {
	echo "<strong>Errore</strong>: non hai specificato una data!<br />";}
// CONTROLLIAMO GIORNI E MESI
		else if ($gg > 31 || $mm > 12) {
		echo "<strong>Errore</strong>: data inesistente!<br />";}
// CONTROLLIAMO I MESI CON 30 GIORNI
			else if ($gg > 29 && ($mm == 4 || $mm == 6 || $mm == 9 || $mm == 11)) {
				echo "<strong>Errore</strong>: data inesistente!<br />";}
// CONTROLLIAMO GLI ANNI BISESTILI
					else if ($gg > 29 && $mm == 2 && ($aaaa >1584 && $aaa %4 == 0 && $aaaa %100 !=0)) {
						echo "<strong>Errore</strong>: data inesistente!<br />";}
// CONTROLLIAMO GLI ANNI NON BISESTILI
							else if ($gg > 28 && $mm == 2 && ($aaaa %4 != 0)) {
								echo "<strong>Errore</strong>: data inesistente!<br />";}
	
    //qui verifichi se sono stati commessi errori, se no la variabile $err è rimasta vuota 
if($err==""){ 
		//*********************C A R I C A M E N T O    I M M A G I N I ****************************
		// limite peso in byte 
	$peso_file = 1024 * 1024;
// inizializziamo il messaggio
	$messaggio = "Carica una o piu immagini, fino ad un massimo di 4 consentite:";
// estensioni ammesse
	$estensioni = array("jpg", "png", "bmp", "gif");
// percosrso destinazione immagini la cartella deve esistere e il percorso deve essere corretto
	$dir = "../MYcartella";
	$salva_file=array("","","","");//creo l'array per i nomi dei file in modo che sia sempre di 4 posti anche se vengono inserite meno di 4 immagini 
// verifichiamo che sia stato premuto il submit
	if (isset($_POST['submit']) && $_POST['submit'] == "Invia Messaggio") {
    // azzeriamo il messaggio
		$messaggio = "";
    // recuperiamo e uniamo le informazionei sulle immagini
		$infoimages = array_combine($_FILES["image"]['name'], $_FILES["image"]['tmp_name']);
    // cicliamo le immagini
			foreach ($infoimages as $k => $v) {
        // nome del file
			$nomefile = strtolower($k);
        // controlliamo il peso immagine
			if (filesize($v) < $peso_file) {
            // recuperiamo l'estensione
				$estensionefile = pathinfo($nomefile, PATHINFO_EXTENSION);
            // controlliamo il tipo immagine
				if (in_array(strtolower($estensionefile), $estensioni)) {
                // controllo caricamento
					if (is_uploaded_file($v)) {
                    // spostiamo il file nella cartella immagini
						if (!move_uploaded_file($v, "$dir/$nomefile")) {
                        $messaggio .= "<br/>Impossibile spostare il file $k";
						} else {
                        $messaggio.= "<br/>Immagine $k caricata con successo<br />"; 
                        $salva_file[$cnt]="images_immobili/$nomefile";//$cnt va da 0 al numero di immagini caricate -1 
						}
					} else {
						$messaggio .= "<br/>Errore nell'upload del file $k.";
					}
				} else {
					$messaggio .= "<br/>Tipo immagine non consentito : $k";
					}
			} else {
				$messaggio .= "<br/>Immagine $k non caricata : limite peso superato";
				}
			} else { $messaggio .= "<br/>Hai inserito più di 4 immagini";
				}
    }
}  
	   echo "tutto giusto<br>"; 
        //..... fai quello che devi fare con i dati e metti l'avviso su $err 
        $err="i tuoi dati sono stati inseriti<br />";
	
	$sql = new mysqli("localhost", "root", "", "myDB");	
						$query="INSERT INTO myTABELLA (record1, record2, ecc....) 
	VALUES('','','','',''','','myCARTELLA/$nomefile','','','')";  
						var_dump($query);//e qui verifichi che venga scritta come dovrebbe
						$err=$mess_err.$messaggio."i tuoi dati sono stati inseriti<br />";
			 
    //mostri il messaggio 
    echo $err; 
    //e torni al form pulito dopo 3 secondi (content ='3;...) 
    echo "<meta http-equiv='Refresh' content='33; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>"; 
} else {
?>
<!-- qui il form --> 
<?php 
}//chiusura dell'if/else submit 
?>
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
Correggendo un pò di sintassi e parentesi sono arrivato a questo, mi dice tutto ok, anche la query giusta, xò nel database non me li inserisce o_O

PHP:
if(isset($_POST['submit'])){ 
    $err="";//metti a vuoto una stringa 
    //poi inizi a prelevare i dati 
    $nome=trim($_POST['nome']); //metto solo nome il titolo è simile 
    //reg_match('/^[a-z0-9]{5,15}/i' 
    if(!preg_match('/^[a-zA-Z]{2,20}$/', $nome)){//verifico che siano solo lettere min 2 max 20 
        $err.="non hai inserito il nome o nome non valido<br />";//concateno gli errori 
	} 
	$denominazione=trim($_POST['denominazione']);//metto solo nome il titolo è simile 
    //reg_match('/^[a-z0-9]{5,15}/i' 
    if(!preg_match('/^[a-zA-Z]{2,40}$/', $denominazione)){//verifico che siano solo lettere min 2 max 40 
        $err.="non hai inserito il titolo esatto<br />";//concateno gli errori 
    } 
	$stato=$_POST['status']; 
    if($stato==""){ 
        $err.="non hai selezionato lo stato<br />"; 
    } 
	$descrizione=trim($_POST['descrizione']);//metto solo nome il titolo è simile 
    //reg_match('/^[a-z0-9]{5,15}/i' 
    if(!preg_match('/^[a-zA-Z]{2,80}$/', $descrizione)){//verifico che siano solo lettere min 2 max 40 
        $err.="non hai inserito la descrizione o il max di lettere<br />";//concateno gli errori 
    } 
    $prezzo=trim($_POST['prezzo'])+0.0; 
    if($prezzo==0 || !is_float($prezzo)){// potresti verificare anche che superi un certo valore 
        $err.="prezzo non valido<br />"; 
    } 
    $email=$_POST['ins_mail']; 
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ 
        $err.="email non valido<br />"; 
    } 
	$gg=trim($_POST['gg']);
	$mm=trim($_POST['mm']);
	$aaaa=trim($_POST['aaaa']);
	$data=$gg.$mm.$aaaa;
	if ((is_numeric($gg) == false) || (is_numeric($mm) == false) || (is_numeric($aaaa) == false )) {
	echo "<strong>Errore</strong>: non hai specificato una data!<br />";}
// CONTROLLIAMO GIORNI E MESI
		else if ($gg > 31 || $mm > 12) {
		echo "<strong>Errore</strong>: data inesistente!<br />";}
			else if ($gg > 29 && ($mm == 4 || $mm == 6 || $mm == 9 || $mm == 11)) {
				echo "<strong>Errore</strong>: data inesistente!<br />";}
					else if ($gg > 29 && $mm == 2 && ($aaaa >1584 && $aaa %4 == 0 && $aaaa %100 !=0)) {
						echo "<strong>Errore</strong>: data inesistente!<br />";}
							else if ($gg > 28 && $mm == 2 && ($aaaa %4 != 0)) {
								echo "<strong>Errore</strong>: data inesistente!<br />";}
	
    //qui verifichi se sono stati commessi errori, se no la variabile $err è rimasta vuota 
	if($err==""){ 
		//*********************C A R I C A M E N T O    I M M A G I N I ****************************
		// limite peso in byte 
		$peso_file = 1024 * 1024;
		// inizializziamo il messaggio
		$messaggio = "Carica una o piu immagini, fino ad un massimo di 4 consentite:";
		// estensioni ammesse
		$estensioni = array("jpg", "png", "bmp", "gif");
		// percosrso destinazione immagini la cartella deve esistere e il percorso deve essere corretto
		$dir = "../myCartella";
		$salva_file=array("","","","");//creo l'array per i nomi dei file in modo che sia sempre di 4 posti anche se vengono inserite meno di 4 immagini 
		
		// azzeriamo il messaggio
			$mess_err = "";
		// recuperiamo e uniamo le informazionei sulle immagini
			$infoimages = array_combine($_FILES["image"]['name'], $_FILES["image"]['tmp_name']);
		// cicliamo le immagini
				foreach ($infoimages as $k => $v) {
				// nome del file
				$nomefile = strtolower($k);
				// controlliamo il peso immagine
					if (filesize($v) < $peso_file) {
					// recuperiamo l'estensione
					$estensionefile = pathinfo($nomefile, PATHINFO_EXTENSION);
					// controlliamo il tipo immagine
						if (in_array(strtolower($estensionefile), $estensioni)) {
						// controllo caricamento
							if (is_uploaded_file($v)) {
							// spostiamo il file nella cartella immagini
								if (!move_uploaded_file($v, "$dir/$nomefile")) {
								$mess_err .= "<br/>Impossibile spostare il file $k";
								} else {
									$mess_err.= "<br/>Immagine $k caricata con successo<br />"; 
									$cnt=0;
									$salva_file[$cnt]="myCartella/$nomefile";//$cnt va da 0 al numero di immagini caricate -1 
									}
							} else {
								$mess_err .= "<br/>Errore nell'upload del file $k.";
								}
						} else {
							$mess_err .= "<br/>Tipo immagine non consentito : $k";
							}
					} else {
						$mess_err .= "<br/>Immagine $k non caricata : limite peso superato";
						}
				} 
		
	}  
	   echo "tutto giusto<br>"; 
        //..... fai quello che devi fare con i dati e metti l'avviso su $err 
        $err="i tuoi dati sono stati inseriti<br />";
	
		$sql = new mysqli("localhost", "root", "", "myDB");	
		$query="INSERT INTO immobile(....,...,...., immagine,img2,img3,img4,.....) 
				VALUES('..','.....','$salva_file[0]','$salva_file[1],'$salva_file[2],'$salva_file[3]','...')";
				var_dump($query);//e qui verifichi che venga scritta come dovrebbe
				$err=$mess_err.$messaggio."i tuoi dati sono stati inseriti<br />";
			 
		//mostri il messaggio 
		echo $err; 
    //e torni al form pulito dopo 303 secondi (content ='303;...) 
    echo "<meta http-equiv='Refresh' content='303; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>"; 
} 
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
io non l'avevo messo (per provarla e non avendo il tuo dfb non ho messo i riferimenti in modo da non avere gli errori di db non trovato...), ma hai inserito l'istruzione della query?
PHP:
<?php
//.....
	$query="INSERT INTO immobile(....,...,...., immagine,img2,img3,img4,.....) 
		VALUES('..','.....','$salva_file[0]','$salva_file[1],'$salva_file[2],'$salva_file[3]','...')";
	var_dump($query);//e qui verifichi che venga scritta come dovrebbe
	//cioè questa
	mysql_query($query);
	$err=$mess_err.$messaggio."i tuoi dati sono stati inseriti<br />";
//....
?>
se dopo aver inserito l'istruzione non inseriece ancora devi verificare la corrispondenza tra i nomi che hai scritto in $query e quelli che hai in tabella (compreso minuscole/maiuscole)
 

Kirsolo

Utente Attivo
17 Gen 2013
171
0
0
ciao
io non l'avevo messo (per provarla e non avendo il tuo dfb non ho messo i riferimenti in modo da non avere gli errori di db non trovato...), ma hai inserito l'istruzione della query?
PHP:
<?php
//.....
	$query="INSERT INTO immobile(....,...,...., immagine,img2,img3,img4,.....) 
		VALUES('..','.....','$salva_file[0]','$salva_file[1],'$salva_file[2],'$salva_file[3]','...')";
	var_dump($query);//e qui verifichi che venga scritta come dovrebbe
	//cioè questa
	mysql_query($query);
	$err=$mess_err.$messaggio."i tuoi dati sono stati inseriti<br />";
//....
?>
se dopo aver inserito l'istruzione non inseriece ancora devi verificare la corrispondenza tra i nomi che hai scritto in $query e quelli che hai in tabella (compreso minuscole/maiuscole)

Si si, il bello che con la verifica di var_dumb, sembra tutto ok, i messaggi che mi escono sono di buona uscita .
Però nel database non li carica o_O
 
Discussioni simili
Autore Titolo Forum Risposte Data
P invio form non corretto dopo controllo dati PHP 8
A Problema form: controllo campi vuoti e inibizione pulsante invio Javascript 5
M Problema con controllo form in real time jQuery 6
A [PHP] Controllo nome utente form di registrazione PHP 4
M [ASP] Upload file da form controllo Classic ASP 5
M [PHP] controllo inserimento dati un un form PHP 4
gandalf1959 Funzione di controllo su un form, comportamento inaspettato Javascript 6
F controllo form php con restituzione errori nella form PHP 10
M controllo di quantità in un form Javascript 0
P controllo sul form Javascript 1
S Controllo di due form in Javascript Javascript 1
Z Controllo campi di un form php PHP 5
T problema strano con procedura di controllo da database, di dati immessi in un form asp Classic ASP 5
H Effettuare il controllo dei campi di un form e cambiare l' action dinamicamente Javascript 1
K controllo testo da form PHP 7
L form controllo con il for "Tutti i dati sono richiesti". PHP 2
P controllo campo select nel form Javascript 6
ivarello Form Che avvia upload e controllo automatico PHP 1
P controllo dati form con jquery e php PHP 8
P controllo dati mentre s'inseriscono nel form PHP 17
P controllo campi form istantaneo PHP 4
L controllo form radio prima di inviare jQuery 1
T Impostare un controllo da database, di dati immessi in un form asp Classic ASP 6
T impostare il controllo dei dati immessi dagli utenti su form asp Classic ASP 8
L Controllo campi di un form Ajax 0
D script controllo campi form non va su FF Javascript 2
B Controllo form Javascript 2
B controllo su form PHP 4
B Controllo form: uno dei 2 campi obbligatorio Javascript 11
Robby84 Codice di controllo per form mail PHP 4
P controllo in form con 2 submit Javascript 7
L Controllo e confronto dati immessi in 2 campi Data in un form (mysql) PHP 1
P Predefinito Controllo campi form contenuto in un DIV Classic ASP 0
D Controllo su campi Form Javascript 3
M Controllo campi in un form Javascript 2
sbobby Codice di controllo su form mail!! PHP 4
A controllo in js dei campi di un form Javascript 1
T controllo form: data inserita > maggiore di data odierna Javascript 4
N Controllo form da altri frame HTML e CSS 0
M pulsante per aprire una maschera che contiene controllo schede MS Access 0
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
Z Controllo giorni MYSQL PHP 0
MarcoGrazia jquery validate() controllo checkbox jQuery 2
M Controllo del codice fiscale/partita iva PHP 11
S Software windows10 per controllo contenuti web Windows e Software 6
S Controllo appuntamenti disponibili sul db PHP 5
L input (controllo se è stato modificato o no). PHP 1
W Controllo competitors serp SEO e Posizionamento 2
bubino8 [Javascript] popup di controllo elimina dopo window.print(); Javascript 0
M [MS Access] controllo valido se MS Access 8

Discussioni simili