Riempire due insert in due tabelle diverse

paperinik4

Utente Attivo
29 Mag 2011
1.811
0
36
Roma
www.ricetteagogo.it
Salve a tutti,

Nuovo programma e nuovo problemino. Allora cerco di venire subito al sodo. Ho i seguenti campi:

id INT(11) NOT NULL AUTO_INCREMENT,

rivista = VARCHAR(20) NOT NULL,
anno = VARCHAR(4) NOT NULL,
numero = VARCHAR(4) NOT NULL,
pagina = VARCHAR(3) NOT NULL,
titolo = VARCHAR(20) NOT NULL,
categoria = VARCHAR(15) NOT NULL,
componenti = VARCHAR(255) NOT NULL,
immagine1 = VARCHAR(255) NOT NULL,
immagine2 = VARCHAR(255) NOT NULL,
immagine3 = VARCHAR(255) NOT NULL,
immagine4 = VARCHAR(255) NOT NULL,
immagine5 = VARCHAR(255) NOT NULL,

Si tratta per lo più di riviste di elettronica. Sul campo categoria, si dovrebbe fare una select però gestita da un input. Ossia siccome non si sa su quale categoria appartiene e quindi impossibile fare un elenco a discesa, si deve avere la possibilità di digitare il tipo di categoria. Stessa cosa per il campo Componenti, i componenti non si possono elencare perchè sono tanti, quindi mano a mano si dovrebbero aggiungere solo una volta a mano e poi quando serve con la lista se sono presenti selezionarli direttamente sulla lista, altrimenti aggiungerli. Mi potete dare una mano per favore, ho una cosa del genere, ma mi funziona fino al salvataggio dei dati. Ioltre mi occorrerebbe di gestire il tutto con un unico tasti salva. Posto il codice.

Questo è il file aggingi.php

PHP:
<?php
require_once("connetti.php");
//require_once("paginaprotetta.php");
require_once("presenta.php");

if(!isset($_POST['submit']))
{
	echo "<form action='' method='POST' enctype='multipart/form-data'>
            <br> <br> <br> <br>
	Rivista: <input type='text' name='rivista'  /> <br> <br>
        Anno: <input type='text' name='anno' /> <br> <br>
        Numero <input type='text' name='numero' /> <br> <br>
        Pagina: <input type='text' name='pagina'  /> <br> <br>
        Titolo: <input type='text' name='titolo' /> <br> <br>
        Categoria: "; //ccreo il select delle categorie con un option preimostato di valore  nullo
        echo"<select name='categoria'><option value=''>Nessuna</option>";
        //gli altri option che seguiranno dovranno essere  presi dalla tabella dove sono salvati tutte le varie categorie
        //seleziono il contenuto della tabella tblcategoria
        $listacat=mysql_query("SELECT * FROM tblcategoria");
        //mostro il contenuto presente nel campo  descrizione che sarà il nome della categooria
        while($rowcat=mysql_fetch_array($listacat)){
         echo "<option value='".$rowcat['descrizione']."'>".$rowcat['descrizione']."</option>";
        }
        //se non presente creiamo un tag button che se lo cliccheremo apparirà il tag span con l'input text
        echo"</select><br/>
        Non è presente la categoria della tua rivista? <button onclick='toggle()'>Creala ora</button>
        <span>
        Nuova categoria: <input type='text' name='descrizione'>
        </span>
         <br> <br>
        Componenti: <input type='text' name='componenti' /> <br> <br>

         Immagine 1:   <input name='immagine1'  type='file'  /> <br> <br>

         Immagine 2:   <input name='immagine2'  type='file' /><br> <br>

         Immagine 3:   <input name='immagine3'  type='file'  /> <br> <br>

         Immagine 4:   <input name='immagine4'  type='file'/> <br> <br>

         Immagine 5:   <input name='immagine5'  type='file'  /><br> <br>
         <input name='submit' type='submit' value='Salva' />

		 </form>
";
}
else
{
        $rivista = mysql_real_escape_string ($_POST['rivista']);

	//QUA CREI LE TUE VARIABILI RIGUARDO AL FORM
        $anno = mysql_real_escape_string ($_POST['anno']);
        $numero = mysql_real_escape_string ($_POST['numero']);

        $pagina = mysql_real_escape_string ($_POST['pagina']);
        $titolo = mysql_real_escape_string ($_POST['titolo']);
        $categoria = mysql_real_escape_string ($_POST['categoria']);
        $componenti = mysql_real_escape_string ($_POST['componenti']);

        //$fbcategoria= mysql_real_escape_string ($_POST['fbcategoria']);

        

        //CREO LE VARIABILI PER I FILE FILES['nomecampo']['tipo']
	$img1=$_FILES['immagine1']['name'];
	$tmp1=$_FILES['immagine1']['tmp_name'];
	$img2=$_FILES['immagine2']['name'];
	$tmp2=$_FILES['immagine2']['tmp_name'];
	$img3=$_FILES['immagine3']['name'];
	$tmp3=$_FILES['immagine3']['tmp_name'];
	$img4=$_FILES['immagine4']['name'];
	$tmp4=$_FILES['immagine4']['tmp_name'];
	$img5=$_FILES['immagine5']['name'];
	$tmp5=$_FILES['immagine5']['tmp_name'];

	//SPOSTO LE IMAMGINI NELLA LORO CARTELLA
	$dir='foto/';
	$move1=move_uploaded_file($tmp1 , $dir.$img1);
	$move2=move_uploaded_file($tmp2 , $dir.$img2);
	$move3=	move_uploaded_file($tmp3 , $dir.$img3);
	$move4=	move_uploaded_file($tmp4 , $dir.$img4);
	$move5=	move_uploaded_file($tmp5 , $dir.$img5);

	//FACCIO UN COTROLLINO CHE HANNO FUNZIONATO
	if($move1 || $move2 || $move3 || $move4 || $move5)
	{

		//controllo il valore di rivista che non sia nullo
		if(!EMPTY($rivista))
		{


			//CREO UN ECO PER MOSTRARTI COSA STAI PER  SALVARE
			echo "STAI PER  CARICARE QUESA RIVISTA:<br/><br/>
			Nome rivista: $rivista <br/>
			Anno: $anno <br/>
			Numero: $numero <br/>
			Pagina: $pagina <br/>
			Titolo: $titolo <br/>
			Categoria: $categoria <br/>
			Componenti: $componenti <br/>
                    
                        <img src='".$dir.$img1."' style='width:100px; height:80px;  padding:9px; background:#c1c1c1'>
			<img src='".$dir.$img2."' style='width:100px; height:80px;  padding:9px; background:#c1c1c1'>
			<img src='".$dir.$img3."' style='width:100px; height:80px;  padding:9px; background:#c1c1c1'>
			<img src='".$dir.$img4."' style='width:100px; height:80px;  padding:9px; background:#c1c1c1'>
			<img src='".$dir.$img5."' style='width:100px; height:80px;  padding:9px; background:#c1c1c1'> <br/>

			<form action='insert.php' method='POST'>
			<input type='hidden' name='rivista' value='$rivista'>
			<input type='hidden' name='anno' value='$anno'>
			<input type='hidden' name='numero' value='$numero'>
			<input type='hidden' name='pagina' value='$pagina'>
			<input type='hidden' name='titolo' value='$titolo'>
			<input type='hidden' name='categoria' value='$categoria'>
			<input type='hidden' name='componenti' value='$componenti'>
			<input type='hidden' name='img1' value='$dir$img1'>
			<input type='hidden' name='img2' value='$dir$img2'>
			<input type='hidden' name='img3' value='$dir$img3'>
			<input type='hidden' name='img4' value='$dir$img4'>
			<input type='hidden' name='img5' value='$dir$img5'>

                        <br> <br> <center>
			Vuoi salvare questa rivista? <input type='submit' name='salva' value='Salva'><input type='submit' name='no' value='Non salvare'></form>
			</br> </br> </center>
                        ";
					}
		else
		{
			//altrimenti dò un messsaggio di errore
			echo "<script>alert('Il cammpo del nome della rivista è vuoto!');</script>";
		}
	}
	else
	{
	echo "<script>alert('I file non sono stati caricati');</script>";

	}

}

?>

E questo è il file insert.php

PHP:
<?php
//INSERISCI INCLUDE

require_once("connetti.php");
//require_once("paginaprotetta.php");
require_once("presenta.php");

//Richiama le variabili degli input hidden

        $rivista=$_POST['rivista'];
	$anno=$_POST['anno'];
	$numero=$_POST['numero'];
        $pagina=$_POST['pagina'];
        $titolo=$_POST['titolo'];
        $categoria=$_POST['categoria'];
        $componenti=$_POST['componenti'];
        $nuovacategoria= $_POST['nuovacategoria'];
        $immagine1=$_POST['img1'];
	$immagine2=$_POST['img2'];
	$immagine3=$_POST['img3'];
	$immagine4=$_POST['img4'];
	$immagine5=$_POST['img5'];


if(isset($_POST['salva']))
{
//QUA TUTTE LE TUE VARIABILI con anche $nuovacategoria

//SE PREMO SU SALVA MI INSERISCE I VALORI  NELA TABELLA

 if($fbcategoria=='')
 {
       $fbcategoria = $nuovacategoria;


       $sql = "INSERT INTO tblrivista (`rivista`, `anno`, `numero`, `pagina`, `titolo`, `fbcategoria`, `componenti`, `immagine1`, `immagine2`, `immagine3`, `immagine4`, `immagine5`)
	VALUES('$rivista' , '$anno' , '$numero' , '$pagina' , '$titolo'  , '$fbcategoria' , '$componenti' , '$immagine1','$immagine2','$immagine3','$immagine4','$immagine5')";

       mysql_query($sql) or die(mysql_error());
			    echo "<script>alert('Rivista creata con successo!');</script>";
}

      
 elseif ($fbcategoria !='' && $nuovacategoria == '')
      {
$sql2 = "INSERT INTO tblcategoria (descrizione) VALUES('$descrizione')";

        mysql_query($sql2) or die (mysql_error());
			    echo "<script>alert('categoria aggiunta alla lista con successo!');</script>";
      }

}

Ovviamente ci sono due tabelle chiamate tblrivista e tblcategoria dove in tbl categoria c'è iddescrizione e descizione, e in tabella tblrivista ci sono i campi sopra indicati. Grazie per l'aiuto in anticipo.
 
Ultima modifica:
ciao
che annuncio?
dicevo che quanto hai scritto non rientra nella sezione html,xhtml e css, ma in quella di php (o su quella di mysql, anche se penso meglio php)
 
ciao
non so se ho capito bene, ma vorresti fare:
menù a discesa con le categorie esistenti (ricavata dalla tabella tblcategoria), se la categoria non esiste un campo in cui l'utente inserisce una categoria?
è così?
detto questo vorrei darti un consiglio anche su altre cose che ho notato.
non fai alcun controllo sui $_post quindi un utente (malvagio) può inserirti nel db tutto quello che vuole (tramite gli input tipo file anhe un file .exe),
con conseguenze probabilmente spiacevoli come minimo, o altri campi vuoti o errati.
fammi sapere
 
Ciao

Ciao,

Si, hai centrato in pieno il problema. in realtà devo fare due campi con questa cosa. Il campo categoria, e il campo componenti. In quanto devno essere definiti dall'utente che inserisce i dati. Ma il pericolo dei controlli vale anche se si fa tutto in localhost e non viene mai pubblicato il sito ???? COme si fanno tali controlli con $_post ??? Grazie.
 
ciao
se lavori in locale e solo tu (o al massimo persona fidata) puoi fare a meno dei controlli, mal che vada sono errori di digitazione e non inserimenti pericolosi.
i controlli diventano INDISPENSABILI se sei online e l'inserimento può farlo qualsiasi persona che acceda al tuo sito.
ti faccio un semplice esempio di controllo su un input di testo
PHP:
<?php
//.......messo passo passo, ma si puo semplificare
$nome=strip_tags($_POST['nome']);//tolgo tutti gli eventuali tag, spcialmente i pericolosi tipo <a href...> o <script>
$nome=trim($nome);//tolgo spazi iniziali e finali, se il campo è di soli spazi viene vuotato
$nome=addslashes($nome);//aggiungo gli slash se servono
if($nome ==""){//verifico se alla fine $nome è vuoto o no
	//rimando ad una pagina, es al form
}else{
	//faccio quello che devo fare
}
//....
?>
e uno sui file
PHP:
<?php
//.....
$ammessi=array('jpg','gif','png');//permetto solo immagini di formayto usuale
if(!in_array($_FILES['immagine']['type'],$ammessi)){
		//rimando ad una pagina, es al form
	}else{
		//faccio quello che devo fare
	}
//analogamente posso verificare la grandezza che se sono on line è importante
if($_FILES['immagine']['size']> 600000){//grandezza in bit
		//rimando ad una pagina, es al form
	}else{
		//faccio quello che devo fare
	}
?>
poi penso un momento a come fare per il problema categorie
 
ciao

Ho capito i controlli, comunque è solo mio padre, quindi al limite come dici tu, può commettere degli errori di digitazione. Certo non si autoinvia file exe o script che potrebbero danneggiare il suo pc e dati importanti eheheheeh. Sarebbe un folle. Comunque come al solito ti ringrazio per la tua disponibilità.
 
Ultima modifica:
ciao
potresti fare così (o almeno io probabilmente farei così), con delle verifiche in modo che se selezionata da una esistente prosegue, se messo un nome lo inserisce in tbl categorie,
penso che i commenti siano sufficienti

parte del form
PHP:
<form action="" method="post" enctype='multipart/form-data'>
<!-- ....quello che viene prima.... -->
seleziona categoria: <select name='categoria'>
	<option value=''>Nessuna</option>
<?php
$listacat=mysql_query("SELECT * FROM tblcategoria ORDER BY categoria");//in ordine alfabetico
while($rowcat=mysql_fetch_array($listacat)){
	echo "<option value='".$rowcat['descrizione']."'>".$rowcat['descrizione']."</option>";
}
?>
	</select><br>
	o se non presente inserisci un nome <input name="categoria_NP" type="text"><br>
<!-- ....quello che viene dopo.... -->
<input name='submit' type='submit' value='Salva' />
</form>
parte inserimento
PHP:
<?php
//....
if(isset($_POST['submit'])){
//....
	//comunque il trim e l'addslsches lo metterei e comunque uniformerei es. tutto minuscolo per non fare duplicati come pinco e Pinco
	$categoria=strtolower(addslashes(trim($_POST['categoria'])));//leggo dalla select
	$categoria_NP=strtolower(addslashes(trim($_POST['categoria_NP'])));//leggo dal campo di input
	if($categoria=="" && $categoria_NP==""){//entrambi vuoto
		echo "devi selezionare una categoria o scriverne una nuova";
		//ritorno al form
	}else{//almeno uno non è vuoto
		if($categoria=="" && $categoria_NP!=""){//non ho selezionato ma riempito il campo
			//faccio una verifica per vedere se la categoria c'era ma era sfuggita
			$q=mysql_query("SELECT * FROM tblcategorie WHERE categoria='$categoria_NP'");
			$esiste=mysql_num_rows($q);
			if($esiste == 0){//se 0 non esite
				$q=mysql_query("INSERT INTO tblcategorie(categoria) VALUES('$categoria_NP'))";
				//per usare in seguito usando un nome unico di variabile
				$categoria=$categoria_NP;
			}
		}
	}
	/*
	non considero il caso in cui $categoria!="" && $categoria_NP!="", cioè entrambi pieni, perchè considero la selezione prioritaria
	rispetto all'inserimento di un nome
	però può essere considerato anche questo caso
	*/
	//ecc..........
}
?>
considerala un'idea di base, a te eventualmente adattarla meglio ed anche per i componenti
comunque sono qui

p.s.
verifica, perchè l'ho buttata giù di getto e quindi può essermi sfuggito qualche erroretto (errorone)
 
Ciao

Come idea non è malvaggia, la provo subito. L'unica cosa vorrei capire cos'è questa variabile: $categoria_NP Inoltre, dovrò sicuramente fare una tabella ance chiamata tblcomponenti o sbaglio ????
 
ciao
$categoria è la variabile in cui metto il valore proveniente dalla select del form, se selezionata
$categoria_NP è la variabile proveniente dal campo di testo del form che posso riempire se non c'è una categoria che mi interessa tra quelle della select, cioè una nuova categoria che, se tutto ok, andrò a inserire nella tabella tblcategorie e quindi in seguito mi ritroverò nella select
(chiamata categoria_NP per dire categoria Non Presente)

secondo me ti conviene procedere nella stessa maniera anche con i componenti soprattutto se poi sono sempre gli stessi
 
Ciao

Si i componenti non sono sempre gli stessi, però potrebbero capitare dei doppioni, quindi se c'è un controllo che dice no questo esiste in elenco allora non me lo fa aggiungere. Scusami l'avevo letto dopo che l'avevi già descritta quella variabile, li per li quando ho viisto il codice non me ne ero accorto ehehehe.
 
ciao
anche per i componenti ti converrebbe una tabella, poi se sono tanti e quindi hai paura che vengsa una select troppo lunga usa in campo di testo con l'autocomplete (cioe mentre scrivi si visualizza il nome simile), comunque i doppioni non vanno mai bene (anche negli scripts).
per l'autocmplete prova a vedere nella sezione js articoli, mi sembra che ci sia
 
Ciao

Ho qualche problemino mi si sta impiccià er cervello. Allora ti mando in allegato se ci riesco quello che ho, non riesco ad implementarlo con il tuo. sartò che ho unamentalità meno elastica sicuramente della vostra. Speriamo che mi accetti gli allegati.
 
Ciao

ciao
anche per i componenti ti converrebbe una tabella, poi se sono tanti e quindi hai paura che vengsa una select troppo lunga usa in campo di testo con l'autocomplete (cioe mentre scrivi si visualizza il nome simile), comunque i doppioni non vanno mai bene (anche negli scripts).
per l'autocmplete prova a vedere nella sezione js articoli, mi sembra che ci sia

Ok Grazie.
 
ciao
prima di proseguire ho notato una cosa, secondo me, alquanto inusuale
dopo il form metti la creazione della tabella, che prenderà il nome $rivista
ma crei una tabella per ogni rivista? mi sembra un po' assurdo, fai tante tabelle quante le riviste (tabelle con un unico record)??

senza considerare che se hai messo in tabella es. già la rivista "electronics" dell'anno 1980, numero 22 ecc...
e nel 2011 reinserisci la rivista "electronics" dell'anno 2011, numero 07 ecc...
facendo così vai a sovrascivere (perdendo) i dati della tabella creata prima.

se proprio al limite vuoi usare innumerevoli tabelle (???) almeno metti la clausola
CREATE TABLE $rivista IF NOT EXIST (ecc...

ma, sempre secondo me, devi rivedere un po' tutto il progetto.
generalmente quando si creano le tabelle via php si fa un file unico (es. crea_tabelle.php) dove si impostano le tabelle e relative query,
poi si richiama (prima di iniziare) http://localhost:8080/cartella/crea_cartelle.php , una volta richiamato sarebbe opportuno eliminare il file
 
Ciao

Ripensandoci come i cornuti, a dire il vero non piaceva nemmeno a me come soluzione. E difatti l'avevo tolta facendo un unico db. Inoltre, sarebbe stato difficile gestire la ricerca dati. Senza considerare che poi il db si appesantirebbe enormemente. Guardo ora il link che mi hai inviato. Grazie per i consigli.
 

Discussioni simili