Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [php & mysql] riusare un valore cancellato

    Salve, sto cercando di realizzare una cosa in php ma non ci riesco e non so neanche darci un titolo, se qualcuno ha un titolo migliore, lo modifico.

    Allora parto dicendo che conosco un pò di php e di mysql (le cose fondamentali e qualcosina in più)

    Allora inserisco dei dati in una tabella:

    id: 1
    utente: Pippo
    concorso:16
    prezzo: 5.01

    id: 2
    utente: Paperino
    concorso:16
    prezzo: 5.02

    id: 3
    utente: Topolino
    concorso:16
    prezzo: 5.03


    Ora cancello l'id2.
    Ora mettiamo che inserisco altri dati

    id: 4
    utente: Paperone
    concorso:16
    prezzo: 5.02

    Quindi la domanda è: Come posso fare in modo che cancellando un id all'inserimento successivo il campo prezzo sia quello cancellato? ora aggiungendo ancora un'altro id il prezzo dovrebbe partire da 5.04 in quanto il 5.03 è già usato nel database.
    Grazie a tutti! spero di essere stato abbastanza chiaro!
    Ciao!

  2. #2
    con l'autoincrement vai sempre avanti. Puoi inserire il sostituto di un id cancellato solo immettendone esplicitamente il valore. Quindi dovresti prima leggere/conoscere l'id da cancellare, cancellare il record e quindi eseguire l'insert dichiarando come id il valore dell'id rimosso.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Ciao quello che voglio fare io è che:
    Prima mi connetto alla tabella, leggo tutti i valori del campo "prezzo".
    Dopo di chè verifico il primo valore libero, nell'esempio che avevo fatto è 5.02.
    Fatto questo dovrei recuperare il valore 5.02 e inserirlo nel prossimo insert!
    Non so se avete capito esattamente cosa devo fare.

    A me serve per questa situazione:
    Gestisco un sito di concorsi fotografici, alcuni concorsi sono a pagamento.
    Tra le varie forme di pagamento accetto anche postepay però non ha causale, quindi non so chi ha inviato il pagamento.
    Avevo pensato di usare i centesimi di euro per riconoscere chi ha inviato il pagamento.(veloce e comodo)
    Quindi al signor Pippo gli dico pagare 5,02 €. Controllando i movimenti sulla postepay trovando un accredito di 5,02 € so che è di Pippo.
    Quindi volevo realizzare questo script che un utente va sulla pagina fa richiesta di pagamento con postepay e in automatico gli dico il valore (chiaramente non deve essere doppio ma unico in tutta la tabella). Fino qui posso farlo tranquillamento(l'ho già fatto a dire la verità)

    Ora però vorrei che quando cancello un pagamento per esempio quello di 5,02 € di Pippo, al primo utente che fa richiesta di pagamento gli venga dato di nuovo 5,02 € (tanto Pippo ha pagato)

    Mi sono spiegato meglio così?

  4. #4
    bell'originale che sei... non c'e che dire.

    metti una flag, un campo 0/1 libero/occupato, quando paga cambi la flag da 1 a 0 e cosi' risultera' libera per il prossimo...




    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    Ciao grazie per la risposta.
    A prima vista potrebbe sembrare una veloce soluzione la tua (che comunque proverò), però il problema è sempre quello, come faccio a reinserire un valore già usato anche se il flag (come hai consigliato) è impostato su 0/libero?
    bho, più penso a come trovare una soluzione e più ci divento scemo
    Avevo pensato di usare qualche ciclo, che parte da 5,01 e fa dei controlli fino a quando non incontra un valore libero.
    L'unico che penso funziona con gli array da una query mysql è il foreach, ma nel foreach riesco anche a infilarci un ciclo for?
    Ho fatto delle prove ma chiaramente non funzionavano a causa della mia poca esperienza!
    Che consigli?
    Grazie e ciao!

    Originariamente inviato da piero.mac
    bell'originale che sei... non c'e che dire.

    metti una flag, un campo 0/1 libero/occupato, quando paga cambi la flag da 1 a 0 e cosi' risultera' libera per il prossimo...




  6. #6
    se metti un campo flag con 0 = libero e 1= occupato...

    UPDATE TABELLA SET
    campo_buffo = 'quelchetipare'
    where flag = 0
    limit 1

    se vuoi sapere quali sono i dati del record aggiornato...

    select * from tabella
    where campo_buffo = 'quelchetipare'


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Originariamente inviato da piero.mac
    se metti un campo flag con 0 = libero e 1= occupato...

    UPDATE TABELLA SET
    campo_buffo = 'quelchetipare'
    where flag = 0
    limit 1

    se vuoi sapere quali sono i dati del record aggiornato...

    select * from tabella
    where campo_buffo = 'quelchetipare'

    Stamattina a lavoro ci ho ripensato ed effettivamente hai ragione!
    Ora mi metto all'opera e ti mostrerò i risultati!

    Ciao!

  8. #8
    Codice PHP:
    $query "SELECT * FROM postepay WHERE pagato = '0' ";
    $result mysql_query($query$db);


    if (
    mysql_num_rows($result)){ 
    //se ci sono pagamenti liberi faccio update
    $queryUPDATE="UPDATE postepay SET userid = '$idutente' , nickname='$nickname',contestid='$idconcorso', email='$email' WHERE pagato = '0' ORDER BY data  LIMIT 1";
    $resultUPDATE mysql_query($queryUPDATE$db);
    // controllo l'esito   
    if (!$resultUPDATE) {   
        die(
    "Errore nella query $queryUPDATE: " mysql_error());   
    }   


    } else {
    //se non ci sono pagamenti liberi faccio insert
    $queryINSERT "SELECT * FROM postepay";
    $resultINSERT mysql_query($queryINSERT$db);
    $totidINSERTmysql_num_rows($resultINSERT);
    $cent=$totidINSERT+1;
    $prezzo='500+$cent';

    $queryINSERT2 "INSERT INTO postepay (id,userid,nickname,contestid,email,data,prezzo )  VALUES ('NULL','$idutente','$nickname','$idconcorso','$email','$data','$prezzo')";
    if (
    mysql_query($queryINSERT2$db))
    echo  
    " record inserito"
    else  echo 
    "errore";




    }
    mysql_close($db); 
    Funziona! Grazie mille!
    Questo è il codice che ho fatto, adesso non è leggibile perchè ho messo nomi improvvisati e neanche qualche commento. Chiaramento poi lo aggiusto!

    Volevo chiederti, se posso abusare della tua disponibilità, come si fanno a inserire numeri decimali nel database mysql.
    Ora se inserisco un numero decimale lo spezza e non mostra il decimale.
    Oppure se esiste qualche sistema per fare in modo che dopo il 5 metto una virgola così risolvo il problema dei decimale!
    Ciao!

  9. #9
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165
    Originariamente inviato da misotropici
    Codice PHP:
    $query "SELECT * FROM postepay WHERE pagato = '0' ";
    $result mysql_query($query$db);


    if (
    mysql_num_rows($result)){ 
    //se ci sono pagamenti liberi faccio update
    $queryUPDATE="UPDATE postepay SET userid = '$idutente' , nickname='$nickname',contestid='$idconcorso', email='$email' WHERE pagato = '0' ORDER BY data  LIMIT 1";
    $resultUPDATE mysql_query($queryUPDATE$db);
    // controllo l'esito   
    if (!$resultUPDATE) {   
        die(
    "Errore nella query $queryUPDATE: " mysql_error());   
    }   


    } else {
    //se non ci sono pagamenti liberi faccio insert
    $queryINSERT "SELECT * FROM postepay";
    $resultINSERT mysql_query($queryINSERT$db);
    $totidINSERTmysql_num_rows($resultINSERT);
    $cent=$totidINSERT+1;
    $prezzo='500+$cent';

    $queryINSERT2 "INSERT INTO postepay (id,userid,nickname,contestid,email,data,prezzo )  VALUES ('NULL','$idutente','$nickname','$idconcorso','$email','$data','$prezzo')";
    if (
    mysql_query($queryINSERT2$db))
    echo  
    " record inserito"
    else  echo 
    "errore";




    }
    mysql_close($db); 
    Funziona! Grazie mille!
    Questo è il codice che ho fatto, adesso non è leggibile perchè ho messo nomi improvvisati e neanche qualche commento. Chiaramento poi lo aggiusto!

    Volevo chiederti, se posso abusare della tua disponibilità, come si fanno a inserire numeri decimali nel database mysql.
    Ora se inserisco un numero decimale lo spezza e non mostra il decimale.
    Oppure se esiste qualche sistema per fare in modo che dopo il 5 metto una virgola così risolvo il problema dei decimale!
    Ciao!
    Come tipo della colonna scegli ad esempio DECIMAL e nel size 10,2.

  10. #10
    Utente di HTML.it L'avatar di dalang
    Registrato dal
    May 2003
    Messaggi
    252
    devi definire il tipo di campo DECIMAL o FLOAT

    credo sia meglio DECIMAL(DIMENSIONE, NUMERO DI DECIMALI)

    esempio DECIMAL(5,2)

    5 cifredi cui 2 decimali

    Ma, toglimi una curiosità...
    se hai 100 persone che ti pagano con postepay... la centesima paga 1 euro più della prima, stica...

    io ripenserei la base dati:
    fai una tabella utenti, ed ad ogni utente associ 1 id univoco
    ti fai indicare nella pagina del pagamento il numero della cartache intende usare per il pagamento e che salvi in MD5, specificando che per la privacy il numero della carta lo usi solo per verificare il pagamento e che lo memorizzi in modo HASH 8quindi non puoi ritornare al numero partendo da ciò che salvi) e che non lo userai o cederai a terzi in nessun modo.

    quando carichi i pagamenti fai l'MD5 del numero della carta che ti ha pagato e lo confronti con i numeri codificati che hai nella tabella dei pagamenti...

    bo, non so, ma non è carino far pagare di più (anche se sono solo centesimi) senza motivo...

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.