Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Insert con PHP da GET

  1. #1
    Utente di HTML.it L'avatar di Fayble
    Registrato dal
    May 2002
    Messaggi
    141

    Insert con PHP da GET

    Devo inserire dei dati anagrafici che provengono da un form (GET method) in una tabella (people, 3 campi).

    La query (INSERT) è questa:
    codice:
    $insert = mysql_query("INSERT INTO people VALUES ($_GET[ID], $_GET[Nome], $_GET[Cognome]");
    if (!$insert) {
    	echo mysql_errno() . ": " . mysql_error(). "\n";
    }
    1. Ottengo un errore di sintassi nella riga di $insert. Qual è?!?

    2. Ma se il numero di parametri da inserire in una tabella corrisponde al numero di campi che la stessa ha, bisogna per forza passare per l'inserimento singolo delle variabli superglobali di $_GET?


  2. #2

    Re: Insert con PHP da GET

    Prova così:

    codice:
    $insert = mysql_query("INSERT INTO people VALUES (\"".$_GET["ID"]."\", \"".$_GET["Nome"]."\", \"".$_GET["Cognome"]."\");
    Per la seconda domanda non credo affatto di avere capito cosa intendi dire; in ogni caso ti consiglio di controllare bene inl contenuto di $_GET prima di inserirlo nella query, altrimenti sai quante SQL injections che si possono fare?
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  3. #3

    Re: Insert con PHP da GET

    [supersaibal]Originariamente inviato da Fayble
    1. Ottengo un errore di sintassi nella riga di $insert. Qual è?!?
    [/supersaibal]
    in tal caso conviene mettere

    die("INSERT INTO people VALUES ($_GET[ID], $_GET[Nome], $_GET[Cognome]");


    per vedere se per esempio le variabili get vengono sostituite con i valori, ecc

  4. #4
    Utente di HTML.it L'avatar di Fayble
    Registrato dal
    May 2002
    Messaggi
    141

    Re: Re: Insert con PHP da GET

    [supersaibal]Originariamente inviato da Shores
    Prova così:

    codice:
    $insert = mysql_query("INSERT INTO people VALUES (\"".$_GET["ID"]."\", \"".$_GET["Nome"]."\", \"".$_GET["Cognome"]."\");
    [/supersaibal]
    Ok, risolto con una leggera modifica, senza mettere il doppio apice all'interno dei vari campi di $_GET, ovvero:
    codice:
    $insert = mysql_query("INSERT INTO people (ID, Nome, Cognome) VALUES (\"$_GET[ID]\", \"$_GET[Nome]\", \"$_GET[Cognome]\")");
    Mettendo gli apici (singoli o doppi) ottengo:
    codice:
    Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING' in... on line...
    Chi mi spiega perché funziona così?
    [supersaibal]Originariamente inviato da Shores
    Per la seconda domanda non credo affatto di avere capito cosa intendi dire; in ogni caso ti consiglio di controllare bene inl contenuto di $_GET prima di inserirlo nella query, altrimenti sai quante SQL injections che si possono fare?[/supersaibal]
    Mi spiego meglio: se inseriamo tre campi in una tabella (people) che ha tre campi, possiamo passare direttamente $_get a people, senza passare per INSERT INTO people (A,B,C) VALUES (a,b,c)?

    Per quanto riguarda la SQL injection mi sto documentando.

    Grazie!

  5. #5
    Utente di HTML.it L'avatar di Fayble
    Registrato dal
    May 2002
    Messaggi
    141
    Inoltre perché prima di $_GET è opportuno mettere il punto?

  6. #6
    Utente di HTML.it L'avatar di Inoki
    Registrato dal
    Oct 2001
    Messaggi
    788
    [supersaibal]Originariamente inviato da Fayble
    Inoltre perché prima di $_GET è opportuno mettere il punto? [/supersaibal]
    Secondo me il sistema che stai sviluppando è piuttosto pericoloso..

    Un utente malintenzionato, può passare via GET qualsiasi tipo di dato, che tu non controlli facendo:

    INSERTO INTO taballa (campo, campo1, campo2) VALUES ('$_GET[var]');

    Rispondendo in ordine, il punto non è altro che il il concatenatore (non mi viene parola più adatta) delle stringe..

    Cioè:
    $var="ciao";
    $var2="mondo";

    $str=$var ." ".$var2;
    echo $str;

    L'output sarà: ciao mondo

    In ogni caso, secondo me fai diverse inesattezze..
    Prima di tutto perchè le variabili passate via get, senza essere controllate, possono essere molto pericolose (anche per le sql injection).
    Seconda cosa, anceh scrivere $_GET[var] invece di $_GET['var], non è del tutto corretto.
    GUARDA QUI
    Mi riferisco a questo stralcio:
    [...]
    I messaggi di tipo NOTICE segnalano il codice scritto con un cattivo stile. Ad esempio, $arr[item] è meglio che sia scritto come $arr['item'] poichè il PHP tenta di trattare "item" come costante. Se non esiste una simile costante, il PHP presume che si tratti dell'indice di una matrice.
    [...]
    Inoltre se l'uetnte carica una pagina in cui una varibile non esiste lo script va in errore perchè il tuo insert non è completo...

    Quindi dovresti innanzitutto controllare l'esistenza della varibile $_GET, secondo dovresti controllare ceh questa abbia i valori che ti interessano, che non abbia nulla di pericolo.
    Dopodichè salvi tutto in una varibile e puoi passare al tuo insert in questo modo:

    ISNERTO INTO tabella (campo1, campo2, campo3) VALUES ('$var1', '$var2', '$var3');
    in cui:
    $var1=$_GET['var1']; //e tutti i suoi controlli
    ecc ecc,

    "La teoria è quando si sa tutto e niente funziona. La pratica è quando
    tutto funziona e nessuno sa il perché. In questo caso, abbiamo messo
    insieme la teoria e la pratica: non c'è niente che funziona... e nessuno sa
    il perché!" (Albert Einstein)

  7. #7
    Utente di HTML.it L'avatar di Fayble
    Registrato dal
    May 2002
    Messaggi
    141
    Grazie mille Inoki, .

    Questa è solo una implementazione di base, in realtà nel seguito utilizzerò (grazie anche ai tuoi suggerimenti):

    1. Metodo POST per il passaggio delle variabili;
    2. Controllo esistenza delle variabili;
    3. Controllo espressioni regolari;
    4. Casting delle variabili;
    5. Passaggio a variabili intermedie prima dell'INSERT.

    Basterà per scrivere codice robusto ed evitare SQL injection?


  8. #8
    Utente di HTML.it L'avatar di Inoki
    Registrato dal
    Oct 2001
    Messaggi
    788
    Bhe direi che sei un bel passo avanti..
    Andrebbero utilizzati tanti accorgimenti per creare pagine protette e sicure...

    Ma così sei già un bel pezzo avanti..
    "La teoria è quando si sa tutto e niente funziona. La pratica è quando
    tutto funziona e nessuno sa il perché. In questo caso, abbiamo messo
    insieme la teoria e la pratica: non c'è niente che funziona... e nessuno sa
    il perché!" (Albert Einstein)

  9. #9
    Utente di HTML.it L'avatar di Fayble
    Registrato dal
    May 2002
    Messaggi
    141
    Ehm... dimenticavo:

    6. Utilizzo delle sessioni (autenticazione + permessi).


  10. #10
    Utente di HTML.it L'avatar di Inoki
    Registrato dal
    Oct 2001
    Messaggi
    788
    [supersaibal]Originariamente inviato da Fayble
    Ehm... dimenticavo:

    6. Utilizzo delle sessioni (autenticazione + permessi).

    [/supersaibal]
    Sono accorgimenti più o meno utili.. ma devi sempre cmq pensare alla soluzione migliore in base a quello ceh devi realizzare non c'è sempre IL METODO, ma il modo migliore per questo caso...
    "La teoria è quando si sa tutto e niente funziona. La pratica è quando
    tutto funziona e nessuno sa il perché. In questo caso, abbiamo messo
    insieme la teoria e la pratica: non c'è niente che funziona... e nessuno sa
    il perché!" (Albert Einstein)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.