Query al DB con php (INSERT)

Laskot

Nuovo Utente
5 Giu 2017
15
0
1
29
Ciao a tutti, come esercizio devo fare una biblioteca online. Un dipendente si logga e da li può aggiungere libri al DB della biblio.
Allora ho scritto questo codice :

Codice:
$isbn = trim($_POST['isbn']);
$titolo = trim($_POST['dtitolo']);
$casa = trim($_POST['dcasa']);
$lingua = trim($_POST['dlingua']);
$anno= trim($_POST['danno']);
$sezione = trim($_POST['dsezione']);
$scaffale = trim($_POST['dscaffale']);

$query = "INSERT INTO libro (isbn,titolo,casaeditrice,lingua, annopubblicazione,sezione,scaffale) VALUES ($isbn, '$titolo', '$casa', '$lingua', $anno, '$sezione', $scaffale)";
$result = pg_query($query);

(ISBN, anno e scaffale sono valori numerici)
Ma non funziona, non mi crea un nuovo record nella tabella libri.
Allora ho cercato e ho trovato anche questo metodo

Codice:
<?php

$query = pg_query("INSERT INTO autore (codice,nome,cognome,nomearte,datanascita,luogonascita) VALUES('".$_POST["acodice"]."','".$_POST["anome"]."','".$_POST["acognome"]."','".$_POST["anomearte"]."','".$_POST["adatanascita"]."','".$_POST["aluogonascita"]."') ");
    ?>

Innanzitutto, qual è la differenza tra i due modi di scriverlo ? Sono entrambi validi?
Ma comunque non riesco a capire l'errore per il quale non mi salva niente nel DB.

Chiedo aiuto disperatamente!
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
perchè non funziona è sempre difficile da capire, se non viene riportato l'errore
potrebbe essere un banale errore di sintassi, o qialcosa di peggio tipo,
.) aver sbagliato i parametri di connessione al db, quindi non esiste la connessione
.) sbagliare il nome di una colonna
.) inserire caratteri in una colonna definita numerica
....

verifica l'anno, potrebbe essere definito numerico e non volere gli apici

leggendo il manuale,
http://php.net/manual/en/function.pg-query.php

si trova,
If an error occurs, and FALSE is returned, details of the error can be retrieved using the pg_last_error() function if the connection is valid.

continuando, per meglio capire,
http://php.net/manual/en/function.pg-last-error.php

quindi proverei il codice in questa forma,
PHP:
<?php

$_POST['isbn']      = 123456789;
$_POST['dtitolo']   = "titolo";
$_POST['dcasa']     = "casaeditrice";
$_POST['dlingua']   = "lingua";
$_POST['danno']     = "2015";
$_POST['dsezione']  = "sezione";
$_POST['dscaffale'] = 987654321;

$isbn     = trim($_POST['isbn']);
$titolo   = trim($_POST['dtitolo']);
$casa     = trim($_POST['dcasa']);
$lingua   = trim($_POST['dlingua']);
$anno     = trim($_POST['danno']);
$sezione  = trim($_POST['dsezione']);
$scaffale = trim($_POST['dscaffale']);

$query = "INSERT INTO libro (isbn,titolo,casaeditrice,lingua,annopubblicazione,sezione,scaffale) VALUES ("
.$isbn
.",'"
.$titolo
."','"
.$casa
."','"
.$lingua
."','"
.$anno
."','"
.$sezione
."',"
.$scaffale
.")";

echo $query;

$result = pg_query($query);
if ($result === false) { echo pg_last_error(); die; }
?>

perchè NON usare direttamente le variabili $_POST nella query,

SQL injection è una tecnica di code injection, usata per attaccare applicazioni di gestione dati, con la quale vengono inserite delle stringhe di codice SQL malevole all'interno di campi di input in modo che queste ultime vengano poi eseguite (ad esempio per fare inviare il contenuto del database all'attaccante).

i campi di input devono quindi essere validati per ripulirli di ciò che può essere dannoso
hai usato trim per eliminare gli spazi non utili, ma dovresti anche validare i contenuti

qui trovi informazioni,
https://it.wikipedia.org/wiki/SQL_injection


come vedi dal mio esempio, ho preferito elencare i valori nel modo "completo"
credo che spendendo qualche attimo in fase di stesura del codice, migliora la portabilità dello stesso con versioni di php diverse ed addirittura linguaggi diversi
la query scritta in quel modo può essere portata con copia/incolla senza modifiche in un VBscript (per esempio)
nella forma originale non sarebbe accettata

sufficiente ???
 

Laskot

Nuovo Utente
5 Giu 2017
15
0
1
29
Ciao marino51, grazie per la bellissima risposta!
Allora ho provato il tuo codice, grazie a echo pg_last_error() ho capito il mio errore ( la INSERT o l'UPDATE sulla tabella "libro" viola il vincolo di chiave esterna "libro_casaeditrice_fkey" DETAIL: La chiave (casaeditrice)=(casa) non è presente nella tabella "casaeditrice". ) più chiaro di così non si può, non ci avevo pensato stupida io.

Riguardo al SQL injection ti ringrazio, risolvo questo problema e vado subito ad approfondire, grazie :)
 
Discussioni simili
Autore Titolo Forum Risposte Data
M [PHP] Problema con query select PHP 2
M [PHP] Problemi con query unione PHP 11
L [PHP] IF con risultato query PHP 7
P [PHP] Query con variabile PHP 2
G [PHP] FORM INVIO VALORI A QUERY CON TRE CONDIZIONI PHP 2
S [PHP] Più fetch_array con unica query... PHP 9
sandropochi [PHP] Query per estrarre record con data successiva a quella odierna PHP 2
D Problema con query in php PHP 5
M [PHP] Problema con query PHP 17
elpirata [PHP] Paginazione dati estratti da una query con più condizioni PHP 17
M query con php "dinamica" PHP 2
D Raggruppare dati query con php PHP 1
L query complessa con php e visualizzazione risultati PHP 4
L PHP: problema con query mysql. PHP 3
A Indicizzare i risultati di una query Mysql con php PHP 0
S Autocompletamente con jQuery, PHP e MySQL - Problema con le query PHP 7
I Riga tabella HTML creata con cicli PHP e Query Sql che restituisca un campo se si clicca la Riga PHP 4
neo996sps Modifica query PHP con menu a tendina PHP 1
D query con mysql, checkbox e php PHP 8
neo996sps Problema con query e script PHP PHP 4
L [PHP & MySQL]Query con funzioni matematiche PHP 12
A query con like in php almeno credo PHP 3
C Problemi con query Php PHP 1
J query con php su mysql PHP 1
A Query in RAM con PHP ? PHP 12
S [PHP] Riempire una casella select con query SQL PHP 11
S PHP - ACCESS --> problemi con query PHP 0
M sintassi query sql (con php) PHP 2
T Query con date MS Access 1
L Query e selezione DB con $_POST PHP 2
O problema con query PHP 4
G Query con i giorni della settimana MySQL 10
T Query su due tabelle con totali Database 4
M Riportare in tabella HTML dati estratti con query SQL MySQL 0
G Menù a tendina di ricerca con query PHP 1
L problema con query select PHP 2
R Problema query con ricerca id numerico PHP 2
R Aiuto con le query MS Access 2
M Problemi con query a più tabelle PHP 3
F query e form con select multipla PHP 17
G Problema ------- con Query PHP 1
G Problema con Query PHP 1
O query con date in formato stringa PHP 3
D [Visual Basic] [MS Access] query con parametro di testo Visual Basic 4
V [MySQL] problema query con date su server MySQL 5
P Query Mysql con Join PHP 2
G [MS Access] Query mese corrente con conteggio [RISOLTO] MS Access 2
D [MySQL] Tabelle "molti a molti", SELECT con troppe QUERY MySQL 7
P [MYSQL] Query su tabelle con clausola "essenziale" MySQL 10
A Query mssql su mysql con linked server Database 0

Discussioni simili