Salvare dei dati in una determinata tabella in base al select che l'utente seleziona

Soulfearor

Utente Attivo
16 Set 2014
54
0
6
Torino
www.serenagraficatorino.it
Salve a tutti sono nuovo e da poco mi sto avvicinando al PHP ma per me è ancora molto sconosciuto. Ho un problema in questo script e sono sicuro che l'errore è stupido ma non riesco a trovarlo.

Ho un form:
HTML:
<form action="carica.php"  metod="post">
	Nome prodotto:<input type="text" name="nome"/>
        Collezione:<input type="text" name="collezione" />
        Descrizione:<textarea name="descrizione" class="form-control" rows="3"></textarea>
        Categoria:
                <select name="categoria"> 
                        <option value="1">primavoce</option>
                        <option value="2">secondavoce</option>
                        <option value="3">terzavoce</option>
                        <option value="4">quartavoce</option>
                </select> 
        <button type="submit" name="carica">Carica</button>
</form>

In un database ho 4 tabelle chiamate come le voci del select e la rispettiva tabella deve essere popolata con i dati del form quando preme il pulsante "carica". Se seleziona "primavoce" deve essere creato un nuovo record nella tabella "primavoce" e così via.

PHP:
// connessione
$connessione = mysql_connect('localhost', 'root', '') or die(mysql_error());
mysql_select_db ('database', $connessione) or die(mysql_error());

$categoria = $_POST['categoria'];

if($_REQUEST['nome'] != "") {
	if($categoria == 1) {
		$query = "insert into primavoce values ('','".$_REQUEST['nome']."','".$_REQUEST['collezione']."','".$_REQUEST['descrizione']."')";
		mysql_query($query) or die(mysql_error());
	}
	if($categoria == 2) {
		$query = "insert into secondavoce values ('','".$_REQUEST['nome']."','".$_REQUEST['collezione']."','".$_REQUEST['descrizione']."')";
		mysql_query($query) or die(mysql_error());
	}
	else { echo 'errore'; }
}

Con questo script qua mi visualizza errore e non carica niente. Se al posto di "if($categoria == 2)" metto "if($categoria = 2)" idem per tutti gli altri, mi carica il record in ogni tabella.

Come posso risolvere questo problema?

Grazie anticipatamente.
Buona giornata :)
 

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
Ciao,
dato che quando imposti la variabile $categoria in modo forzato usando
PHP:
if($categoria = 2)
L'inserimento funziona, significa che ti connetti con successo al database e le queries sono corrette, quindi il problema è nel codice PHP.
Prova a selezionare, una alla volta, tutte le opzioni del form e a vedere cosa succede.
Se per alcune opzioni funziona e per altre no, significa che per queste ultime non hai specificato alcuna condizione.
Se invece il comportamento è identico, sostituisci
PHP:
    else { echo 'errore'; }
Con
PHP:
    else { echo 'errore. Categoria: '.$categoria.' <br>
Dato passato tramite POST: '.$_POST['categoria']; }
In questo modo dovresti accorgerti di eventuali errori di logica.
Se non noti ancora nulla di strano, aggiungi all'inizio della tua pagina in PHP:
PHP:
error_reporting(E_ALL);
E vedi se esce fuori qualcosa



Solo alcune precisazioni importanti:
L'estensione mysql_ è deprecata, è sempre meglio usare mysqli_.
Inoltre, il tuo codice è aperto all'SQL injection.
Ecco la versione debuggata:

PHP:
// connessione 
$connessione = mysqli_connect('localhost', 'root', '','database');

$categoria = $_POST['categoria']; 

if($_REQUEST['nome'] != "") { 
    if($categoria == 1) { 
        $query = "insert into primavoce values ('','".mysqli_real_escape_string($connessione,$_REQUEST['nome'])."','".mysqli_real_escape_string($connessione,$_REQUEST['collezione'])."','".mysqli_real_escape_string($connessione,$_REQUEST['descrizione'])."')"; 
        mysqli_query($connessione,$query) or die(mysqli_error()); 
    } 
    if($categoria == 2) { 
        $query = "insert into secondavoce values ('','".mysqli_real_escape_string($connessione,$_REQUEST['nome'])."','".mysqli_real_escape_string($connessione,$_REQUEST['collezione'])."','".mysqli_real_escape_string($connessione,$_REQUEST['descrizione'])."')"; 
        mysqli_query($connessione,$query) or die(mysqli_error()); 
    } 
    else { echo 'errore'; } 
}
 
Ultima modifica:

Soulfearor

Utente Attivo
16 Set 2014
54
0
6
Torino
www.serenagraficatorino.it
Innanzitutto grazie per le risposte :)

Rispondo a borgo italia .. ho perso un po' di tempo dietro al codice php dal momento che, visto che mi sto avvicinando da poco ad esso, avrò fatto sicuramente un errore li e invece con mio stupore l'errore era l' H mancante in method come hai scritto anche te >_> .. non avevo pensato che il codice php si interlacciava a quello html del form e magari un errore era presente li .. ottimo, la prossima volta saprò dove guardare :)

Rispondo a Altutto .. ho letto la tua risposta e appena ho un attimo di tempo leggo cosa fanno esattamente le varie istruzioni che hai aggiunto o modificato.
Ho provato a modificare quella parte di codice e funziona come prima, che non dia errore è già un bell'inizio xD
Ho notato che "mysqli" deve essere sostituito a "mysql" .. dici che è deprecata, da quanto? nei vari tutorial in giro per la rete la usano ancora, cosa comporta se dovesse essere usata? ti chiedo perchè ho voglia di imparare ma sono ancora agli inizi.

Inoltre, il tuo codice è aperto all'SQL injection.
Non è un problema che mi sono posto ma che ci avrei fatto sicuramente caso successivamente, grazie per avermelo accennato e per un esempio pratico .. ho notato che hai riportato la variabile $connessione in tante parti di codice, la chiave è proprio quella? se si dove mi consigli di utilizzarla? oltre in questi casi intendo.

Scusa per le mille domande, ma rispetto a tutte quelle che vorrei fare sono poche xD
Se non hai tempo o voglia di rispondere nessun problema :) ti capirei xD

Buona serata.
 

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
Ciao :)
mysql_ è deprecato a partire da PHP 5.5.0, e verrà rimosso del tutto in futuro, pertanto, se lo utilizzerai, ti ritroverai comunque a dover esegurire l'upgrade presto.
Mysqli_ presenta diversi miglioramenti, per citare php.net:
The mysqli extension, or as it is sometimes known, the MySQL improved extension, was developed to take advantage of new features found in MySQL systems versions 4.1.3 and newer. The mysqli extension is included with PHP versions 5 and later.

The mysqli extension has a number of benefits, the key enhancements over the mysql extension being:

Object-oriented interface

Support for Prepared Statements

Support for Multiple Statements

Support for Transactions

Enhanced debugging capabilities

Embedded server support

Note:
If you are using MySQL versions 4.1.3 or later it is strongly recommended that you use this extension.


Ho riportato molte volte $connessione perchè mysqli, a differenza di mysql, richiede che vengano passati come primo parametro di mysqli_query ed altre funzioni (come mysqli_real_escape_string) i dati di connessione per il database, quindi
PHP:
mysql_query($query); => mysqli_query($connessione,$query);
Per evitare un attacco dovuto all'SQL injection, ho utilizzato mysqli_real_escape_string: puoi divertirti a vedere come funziona lanciando questo codice e modificando le variabili :)
PHP:
<?php
$connessione = mysqli_connect("localhost","root","","db");
$variabile1 = "ciao";
echo 'Variabile1: '.mysqli_real_escape_string($connessione,$variabile1).'<br>';
$variabile2 = "sono un'altra variabile";
echo 'Variabile2: '.mysqli_real_escape_string($connessione,$variabile2).'<br>';
$variabile3 = 'Adoro il film "Tal dei tali"';
echo 'Variabile3: '.mysqli_real_escape_string($connessione,$variabile3).'<br>';
?>

Tranquillo, è un piacere :)
Buona serata anche a te :)
 

Soulfearor

Utente Attivo
16 Set 2014
54
0
6
Torino
www.serenagraficatorino.it
Fantastico :) .. no no che upgrade, preferisco partire da adesso a conoscerle e ad usarle ^^

Ho riportato molte volte $connessione perchè mysqli, a differenza di mysql, richiede che vengano passati come primo parametro di mysqli_query ed altre funzioni (come mysqli_real_escape_string) i dati di connessione per il database, quindi
PHP:
mysql_query($query); => mysqli_query($connessione,$query);
Non so ancora bene dove devono essere passati 2 parametri ma se sbaglio ci sono i messaggi di errore a bacchettarmi .. esempio per "mysqli_fetch_assoc" il parametro di connessione non gli serve.

Per evitare un attacco dovuto all'SQL injection, ho utilizzato mysqli_real_escape_string: puoi divertirti a vedere come funziona lanciando questo codice e modificando le variabili :)
PHP:
<?php
$connessione = mysqli_connect("localhost","root","","db");
$variabile1 = "ciao";
echo 'Variabile1: '.mysqli_real_escape_string($connessione,$variabile1).'<br>';
$variabile2 = "sono un'altra variabile";
echo 'Variabile2: '.mysqli_real_escape_string($connessione,$variabile2).'<br>';
$variabile3 = 'Adoro il film "Tal dei tali"';
echo 'Variabile3: '.mysqli_real_escape_string($connessione,$variabile3).'<br>';
?>
Proverò :)

Tranquillo, è un piacere :)
Lo apprezzo, è ammirevole, tanta gente non ha voglia di scrivere 2 righe come hai fatto te.

Ciau!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
il fatto che mancasse l'H non faceva trasmettere i valori quindi $_POST e altri risultavano vuoti.
impara, visto che sei agli inizi, ad usare la funzione var_dump(qualcosa) è un ottimo supporto per il debug
qualcosa = o una variabile es $pinco, o una funzione.
se tu avessi messo messo nella pagina carica.php
PHP:
<?php
//.....
mysql_select_db ('database', $connessione) or die(mysql_error());
var_dump($_POST['categoria']);
$categoria = $_POST['categoria'];

if($_REQUEST['nome'] != "") {
//....
?>
avresti ottenuto NULL quindi evidente che la variabile non viene trasmessa
una voltatrovato l'errore la togli o la commenti
 

Soulfearor

Utente Attivo
16 Set 2014
54
0
6
Torino
www.serenagraficatorino.it
ciao
il fatto che mancasse l'H non faceva trasmettere i valori quindi $_POST e altri risultavano vuoti.
impara, visto che sei agli inizi, ad usare la funzione var_dump(qualcosa) è un ottimo supporto per il debug
qualcosa = o una variabile es $pinco, o una funzione.
se tu avessi messo messo nella pagina carica.php
PHP:
<?php
//.....
mysql_select_db ('database', $connessione) or die(mysql_error());
var_dump($_POST['categoria']);
$categoria = $_POST['categoria'];

if($_REQUEST['nome'] != "") {
//....
?>
avresti ottenuto NULL quindi evidente che la variabile non viene trasmessa
una voltatrovato l'errore la togli o la commenti
Interessante come cosa!! .. grazie mille ne farò sicuramente uso :)
 

Altutto

Utente Attivo
30 Set 2013
262
0
16
stubborn.altervista.org
@Soulfearor per capire quali parametri passare puoi sempre far riferimento al manuale di php :)
Giusto per farti qualche esempio, devi passare il parametro di connessione per:
mysqli_query
mysqli_real_escape_string
mysqli_close
Mentre non devi passarlo se usi funzioni come mysqli_num_rows o mysqli_fetch_assoc

Ciao :)
 
Discussioni simili
Autore Titolo Forum Risposte Data
nim salvare in una tabella i nomi dei file contenuti in cartella PHP 2
P C# Salvare una colonna del DataGridView XML 0
E fpdf salvare e aprire il file PHP 4
I salvare testo chat PHP 4
B Selezionare un'immagine e salvare la selezione Photoshop 3
Stex1967 Salvare una immagine che si trova su porta TCP 8080 di altro sito PHP 7
L salvare una immagine elaborata in canvas Javascript 1
L salvare una immagine elaborata in canvas Javascript 1
E Salvare immagini PHP 0
L salvare codice html in mysql PHP 3
L salvare somma con sottrazione PHP 1
M Salvare coordinate Maps nel DB PHP 2
D SALVARE "MASCHERA" + "ALLEGATO PDF" IN UN UNICO PDF MS Access 0
A Twitter aggiungere tweet a campagna esistente o salvare pubblico Social Media Marketing 0
D Salvare in diversi campi mysql con diversi ID PHP 0
D [Javascript] salvare immagine canvas - paypal Javascript 0
M Salvare JSONObject in Shared Preference Sviluppo app per Android 0
M [PHP] Salvare campo di una tabella in una variabile PHP 14
S [ASP] SALVARE VALORE SELECT OPTION SU CAMPO TABELLA ACCESS Classic ASP 9
M [PHP] FPDF Salvare su disco C locale Windows PHP 3
C Photoshop CS 6 salvare una modifica Photoshop 0
L [PHP] Salvare csv da form dati PHP 5
A Salvare immagine ridimensionata in MySql con GD PHP 12
G php salvare file in campo blob mysql: massimo 4MB PHP 1
M Salvare pagine web come segnalibro con istruzioni javascript Javascript 0
L Salvare posizione maps Sviluppo app per Android 0
G [PHP] SALVARE RECORD ESTRATTI DA DATABASE PHP 6
D Come salvare scelta della select "dinamica" ajax-php? Come dato php o attributo value tag option? Ajax 5
P [SOLVED] salvare il TCPDF output in mysql e rivisualizzarlo PHP 3
M Salvare i dati nel db e aprire altra pagina php PHP 7
M Form ASP su MsSQL salvare 2 campi in 1 Classic ASP 4
V [PHP] Salvare campo radio in db e leggerlo PHP 15
S [PHP] Salvare dati tabella in formato exel PHP 0
Benix89 Come salvare radio button selezionato Magento 1
Benix89 Salvare radio button selezionato PHP 2
P Come salvare il proprio diario di fb Discussioni Varie 0
P Salvare i dati restituiti dopo autenticazione OAuth2 Javascript 0
M Salvare in tabella link file importato PHP 1
F Cliccare e salvare src immagine HTML e CSS 2
M Cartella predefinita dove salvare i backup PHP 0
P dove si va a salvare il dbase phpmyadm una volta creato ???? Database 0
P dove si va a salvare il dbase phpmyadm una volta creato ???? Database 7
C Salvare il click su di un Button Sviluppo app per Android 9
Emix Salvare documenti in DB PHP 3
D salvare righe dinamicamente PHP 3
R Mettere la possibilità di Salvare in un gioco =) Come si fa? Java 2
C Salvare dati form in un file di testo PHP 1
M Salvare select con cookie PHP 1
IImanuII Salvare/recuperare html da un db PHP 5
M salvare una activity e richiamarla Sviluppo app per Android 6

Discussioni simili