[OOP + transazioni] Dubbio implementativo

Shinji89

Nuovo Utente
24 Gen 2010
2
0
0
Salve a tutti avrei un dubbio implementativo, stò aggiornando un mio script in OOP e mi sorge un problema con le transazioni. Io vorrei fare in modo che quando creo un'istanza della classe (passando l'id dell'utente) questa nel costruttore mi blocchi l'id dell'utente da eventuali richieste al DB e che nel distruttore me la sblocchi. Ecco un esempio di codice così rendo meglio l'idea:

codice PHP:
PHP:
<?php
class user
{
    private $_id;
    private $_soldi;
    public  $DB;
    
    function __construct($id, $DB)
    {
        $this->_id    = (int) $id;
        //Uso una classe esterna per manipolare il DB
        $this->DB     = $DB;
        //Blocco l'utente qui'
        $data         = $DB->row("SELECT soldi FROM user WHERE id = '".$id."' LIMIT 1");
        //Se l'utente non esiste blocco tutto ovviamente
        $this->_soldi = $data['soldi'];
    }
    
    function getSoldi()
    {
        return $this->_soldi;
    }
    
    function setSoldi($amount)
    {
        if($this->getSoldi >= $amount)
        {
            //Faccio l'update
            $update = $this->DB->update("user",array('soldi' => 'soldi -'.$amount),"id = '".$this->_id."'");
            //Se va tutto bene aggiorno
            $this->_soldi -= $amount;
        }
    }
    
    function __destructor()
    {
        //Sblocco l'utente qui
    }
}

$objUser = new User(1,$db);

echo "L'utente ha ora ".$objUser->getSoldi();

$tolgo_soldi = $objUser->setSoldi(100);

echo " ed ora dopo avergli tolto 100 sacchi ".$objUser->getSoldi();
?>

Qualche idea ?
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Non ho capito bene quello che vuoi fare. Vuoi fare in modo che, se è esiste un'istanza dell'utente pincopallino, nessuno possa eseguire query al database che siano relative a lui, tranne la sua classe? In questo caso penso che dovresti direttamente modificare la classe che usi per manipolare i dati del database. Controlli con una regex se la query è relativa a quell'utente e, in caso, ti rifiuti di eseguirla. Però è una cosa abbastanza macchinosa... a che cosa ti serve?
 

Shinji89

Nuovo Utente
24 Gen 2010
2
0
0
regex ? Cosa sarebbe ?

Mi serve perchè aime mi è capitato che vi siano doppie scritture e valori negativi, nel senso che mi sono ritrovato con due decrementi di "soldi" anche se il secondo non poteva avvenire, in sostanza il motivo per cui servono le transizioni in mysql:
1 - "vedi" la risorsa (la select del mio esempio)
2 - La blocchi così nel frattempo nessuno la può usare (e quindi ad esempio decrementare)
3 - La manipoli (e quindi la decrementi se il suo valore te lo permette, come nell'esempio da me scritto)
4 - La sblocchi e permetti ad eventuali altre istanze della classe di nascere e manipolare nuovamente l'utente
Se questo non avviene cosa può succedere (e cosa mi è successo, facendomi letteralmente impazzire negli ultimi 6 mesi) che viene eseguita una query che fa andare il valore a meno zero e siccome il campo è unsigned mi ritrovavo il valore massimo rappresentabile nel campo. Se ti interessa approfondire:
http://bugs.mysql.com/bug.php?id=14543
 
Discussioni simili
Autore Titolo Forum Risposte Data
T con oop creare un ciclo per una pagina dinamica html con php PHP 3
D [PHP] Query in OOP class PHP 0
P PHP OOP Brute Attack Class PHP 8
Drago73 [PHP] collegamento DB con OOP PHP 1
asevenx [PHP] Dubbio teorico sui metodi e costruttore OOP PHP 1
marcoWEBM Videocorso di OOP in Java Ajax 0
V [PHP] [OOP]Gestione errori connessione db PHP 5
A OOP è necessario mentre si studia PHP PHP 1
E passaggio da procedurale a oop PHP 0
Marco_88 Autenticazione PHP/OOP campi vuoti PHP 26
S aiuto per script PHP/OOP PHP 2
M Function - Class + OOP Javascript 1
L [risolto] Undefined variable: in programmazione oop PHP 12
P OOP:Abstract e interfaces PHP 3
criric Mysqli funzioni . approccio OOP Snippet PHP 0
S un consiglio database class OOP PHP 1
L Imparare oop PHP 16
alessandro1997 "Best practice" e OOP PHP 0
D studiare la OOP Programmazione 2
M OOP e autenticazione PHP 4
U array in una classe OOP? PHP 4
U tutorial per OOP in php? PHP 4
J Make a JavaScript Countdown Timer in OOP Javascript 0
J JavaScript Countdown Timer solution in OOP Javascript 0
P aiuto con OOP PHP 2
emanuelevt problema oop parent:: PHP 4
S [VB.net 2005] Schema OOP Programmazione 2
K Transazioni durante lo scroll della home page Javascript 2
T Uso DB Remoto e transazioni con Pay Pal Sviluppo app per Android 0
K Supporto - consigli e chiarimenti per utilizzo transazioni ... PHP 6
T [Microsoft SQL Server 2008 (SP3)] log delle transazioni è pieno Database 1
M e-commerce, transazioni economiche, carte di credito, pagamenti e programmazione php PHP 1
open-think transazioni Database 5
S Transazioni MYSQL Database 1
peppoweb Transazioni online e email fasulle Sicurezza e Virus 0
E DUBBIO da principiante IP Cam e Videosorveglianza 0
D Dubbio intestazione dominio Domini 0
J Un piccolo dubbio su Mailchimp Posta Elettronica 1
S Dubbio su Git Programmazione 0
Z PayPal dubbio PHP 0
S Dubbio sulla desaturazione parziale in photoshop Photoshop 0
T Dubbio su costante ROOT, che rappresenti la base directory del sito PHP 4
stefanomessina [MySQL] Dubbio sulle PROCEDURE MySQL 0
G Cambio server dubbio ns Server Dedicati e VPS 3
M [PHP] Dubbio controllo IF PHP 15
paloppa [PHP] Dubbio print variabile PHP 27
paloppa [PHP] Dubbio valore variabile PHP 16
paloppa [PHP] Invio mail da form dubbio PHP 17
B Dubbio compressione gzip su server di giga.it Hosting 1
federicofacchini Aiutatemi con questo dubbio sui video YouTube e Facebook Social Media Marketing 1

Discussioni simili