Visualizzazione risultati 1 fino 8 di 8

Discussione: Sottrarre valori a campo DB

  1. #1
    senettone non è connesso Neofita
    Data registrazione
    10-10-2010
    Messaggi
    12

    Predefinito Sottrarre valori a campo DB

    Salve ragazzi sto provando a sottrarre un numero da un campo di una tabella precisa ma non ci riesco. Sbaglio la sintassi o la logica, non so....
    vi posto il mio codice sperando in un aiuto :)

    Codice PHP:
    /* mi connetto al db...*/
    mysql_connect($dbhost,$username,$password);

    @
    mysql_select_db($database)
    or die(
    "Impossibile selezionare il database.");

    /* definisco la tabella...*/
    $table = "verifica";


    /* poi dovrei sottrarre 1 (numero) all'ultimo campo della tabella per l'id postato da un form
    MA NON SO COME FARE!!! i campi della tabella sono 8 ... non riesco a capire come effettuare lo scarico numerico ad un campo preciso del DB
    */
    $query = "INSERT INTO $table ('','','','','','','',-1) WHERE id_verifica = {$_POST['id']}";

    if (
    mysql_query ($query, $db))
    echo (
    "Inserimento riuscito!");
    else
    echo (
    "Errore nell'inserimento :-(");


    mysql_close();
    per voi sarà sicuramente una stupidaggine

  2. #2
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,253

    Predefinito

    Per sottrarre un numero in un record già presente nel database, devi usare la update:

    Codice:
    UPDATE nomeTabella SET campo=campo-1 WHERE condizioni
    Altrimenti, se devi inserire il valore decrementato di 1, puoi fare:

    Codice:
    INSERT INTO nomeTabella (campo1,... campo_da_sottrarre) VALUES (valore,... valore-1)
    Oppure:
    Codice:
    INSERT INTO nomeTabella (valore,... valore-1)
    Se stampi soltanto -1, salva il -1 ma non decrementa nulla.

    Se spieghi meglio, scrivi il codice completo e vediamo di sistemarlo, se non sei riuscito :)

    Ciao!
    Ultima modifica di alemoppo : 08-02-2013 alle ore 20.12.53

  3. #3
    senettone non è connesso Neofita
    Data registrazione
    10-10-2010
    Messaggi
    12

    Predefinito

    Grazie mille, domani farò le prove e ti dico...
    Ti spiego comunque cosa sto combinando...
    In una prima pagina cerco un record, al click di un pulsante di un form posto l'id del record alla seconda pagina (quella che ho postato il codice), per scalare di uno il campo "valore", per poi ritornare alla prima pagina visualizzando nuovamente il record con il campo "valore" scalato di 1, chiaramente questo decremento deve essere definitivo nel DB.
    Sto optando per questa soluzione altrimenti (leggendo un po' in giro) avrei dovuto utilizzare Ajax per assegnare questa funzione direttamente al pulsante, ma è già tanto che utilizzo un po' di php :-p

    Hai qualche consiglio a tal proposito?

  4. #4
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,253

    Predefinito

    Beh, ajax in realtà non serve: serve soltanto per non far ricaricare la pagina. Si può benissimo far senza.

    Quindi mi pare che ti serva la UPDATE (per decrementare, definitivamente), e la SELECT per leggere il nuovo dato.

    Aggiornaci domani, o quando avrai fatto le prove .

    Ciao!

  5. #5
    senettone non è connesso Neofita
    Data registrazione
    10-10-2010
    Messaggi
    12

    Predefinito

    allora, ho provato il codice, non mi restituisce nessun errore, ma non scarica il campo "valore" dalla tabella definita del record definito... perchè?

    il campo "valore" inizialmente era impostato su varchar, ma pensando fosse questo il problema l'ho cambiato in bigint, ma non lo decrementa ugualmente.
    Riposto il codice, magari commetto qualche errore:

    Codice PHP:
    /* mi connetto al db...*/
    mysql_connect($dbhost,$username,$password);

    @
    mysql_select_db($database)
    or die(
    "Impossibile selezionare il database.");

    /* definisco la tabella...*/
    $table = "verifica";


    /* definisco l'id del record da modificare*/
    $id = $_POST['id'];

    /* valore è il nome del campo che devo modificare e id_verifica è il nome del campo dell'id */
    $query = "UPDATE $table SET valore=valore-1 WHERE id_verifica = $id";

    mysql_close();

  6. #6
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,253

    Predefinito

    Perché hai messo la @ davanti alla mysql_select_db?
    -----
    il campo "valore" inizialmente era impostato su varchar, ma pensando fosse questo il problema l'ho cambiato in bigint
    Se è un numero, perché usare varchar? bigint va bene, anche se io userei int unsigned.
    -----
    ma non lo decrementa ugualmente.
    La query sembra corretta. Il problema è che non la esegui . Infatti prepari la stringa per la query, ma poi non fai la
    Codice PHP:
    mysql_query($query);
    -----
    Infine, per evitare sql injection, ti consiglio di sostituire:
    Codice PHP:
    $id = $_POST['id'];
    con:
    Codice PHP:
    $id = mysql_real_escape_string($_POST['id']);
    Ciao!
    Ultima modifica di alemoppo : 09-02-2013 alle ore 14.38.14

  7. #7
    senettone non è connesso Neofita
    Data registrazione
    10-10-2010
    Messaggi
    12

    Predefinito

    Il problema è che non la esegui

    Eheheh è da poco che mi sono messo sul php Eheheh
    Mi piace come linguaggio, soprattutto per le sue molteplici applicazioni.
    Non potrò mettermi al pc prima di domani quindi poi ti farò sapere, soprattutto perché a questo punto vorrei chiederti il motivo di un errore che mi restituisce la pagina visualizzandola sul pc (con diversi browser) mentre dai telefonini questo errore non lo restituisce (sia iOS che android).
    Comunque intanto ti ringrazio tanto e soprattuto per la dritta del SQL injection.
    A lunedì ciao ;)

  8. #8
    senettone non è connesso Neofita
    Data registrazione
    10-10-2010
    Messaggi
    12

    Predefinito

    Perfetto tutto funziona!!! Grazie mille

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •