Visualizzazione risultati 1 fino 10 di 10
Like Tree2Likes
  • 1 Post By mzanella
  • 1 Post By mzanella

Discussione: Richiesta al DB con PDO

  1. #1
    Data registrazione
    09-03-2017
    Messaggi
    15

    Predefinito Richiesta al DB con PDO

    Buondì a tutti!

    Oggi avrei bisogno di qualcuno un po più esperto di me con la richiesta al DB tramite PDO.
    Vi allego subito il codice PHP e poi vi spiego :emoji_slight_smile:
    Codice PHP:
    <?php

    class Premio

    {

      protected 
    $pdo;



      function 
    __construct($pdo)

      {

        
    $this->pdo $pdo;

      }

        public function 
    ritiraPremio()

        {

            
    $querypremio $this->pdo->prepare('SELECT * from codes WHERE code=:codereward');

            
    $querypremio->execute(array(':codereward'=>htmlspecialchars($_POST['codereward'])));

            
    $premio $querypremio->fetch(PDO::FETCH_ASSOC);

            if(
    $querypremio->rowCount() > 0)

            {

                if(
    $premio['code'] == $_POST['codereward'])

                {

                   
    $_SESSION['premio'] = $premio['id'];

                    
    header('Refresh: 2; url=/premio.php');

                    return 
    true

                }

                else

                {

                    return 
    false;

                } 

            }

            else

            {

        
    #    echo '<div style="text-align: center; color: #fff;background-color: #D3020C; min-height: 25px; width: 100%;">Codice inesistente!</div>';
     
    }

        }

       
        public function 
    fetchCODE($table)

        {         

          
    $queryfetch $this->pdo->prepare('SELECT * from codes WHERE id=:session LIMIT 1');

          
    $queryfetch->execute(array(':session'=> $_SESSION['premio']));

          
    $fetch $queryfetch->fetch(PDO::FETCH_ASSOC);

          return 
    $fetch[$table];

        }

        public function 
    sessionEnabled()

        {

            if(isset(
    $_SESSION['premio']) == '')

            {

                return 
    false;

            }

            else

            {

                return 
    true;

            }

        }

        public function 
    destroySession()

        {

            unset(
    $_SESSION['premio']);

            
    session_destroy();

            
    header('Location: index.php?#');

            return 
    true;

        }

        public function 
    deleteKey()

        {


                  
    $querydelete $this->pdo->prepare('DELETE FROM codes WHERE code=:coderow');

                if(
    $querydelete->execute(array(':coderow'=>$this->fetchCODE('code'))))

                {

                    
    $this->destroySession();

                }

                return 
    $querydelete;

        }

    }
    Al momento questo codice, in teoria, non fa altro che verificare se il codice immesso è presente o meno nel DB e stampare il premio correlato; ho un database chiamato codes con due tabelle(code,premio)

    Ok, io adesso vorrei far un'altra richiesta, ovvero verificare se quel codice ha un premio correlato che si chiama "PERDENTE", se questo funzione è vera allora potrà stampare "Il codice inserito risulta non vincente!"

    Se non capite qualcosa nel caso vi farei vedere con Teamviewer un po meglio la situazione o comunque vi farei qualche screen.

    Thanks : )

  2. #2
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    862

    Predefinito

    ho un database chiamato codes con due tabelle(code,premio)
    Più verosimilmente hai una tabella chiamata codes con due colonne denominate code e premio. In questo caso interroga la base di dati cercando righe con quel codice e il valore di premio uguale a "PERDENTE".
    Codice PHP:
    $stm $this->pdo->prepare('SELECT * FROM codes WHERE code=:codereward AND premio="PERDENTE"');
    $stm->execute(array(':codereward'=>htmlspecialchars($_POST['codereward'])));
    $premio $querypremio->fetch(PDO::FETCH_ASSOC); 
    if (
    $stm->rowCount() != 0) {
        echo 
    "Il codice inserito risulta non vincente!";

    Se, invece, hai proprio due tabelle distinte, molto probabilmente dovrai effettuare una JOIN, la cui sintassi dipende dalla relazione tra le due entità.

  3. #3
    Data registrazione
    09-03-2017
    Messaggi
    15

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Più verosimilmente hai una tabella chiamata codes con due colonne denominate code e premio. In questo caso interroga la base di dati cercando righe con quel codice e il valore di premio uguale a "PERDENTE".
    Codice PHP:
    $stm $this->pdo->prepare('SELECT * FROM codes WHERE code=:codereward AND premio="PERDENTE"');
    $stm->execute(array(':codereward'=>htmlspecialchars($_POST['codereward'])));
    $premio $querypremio->fetch(PDO::FETCH_ASSOC); 
    if (
    $stm->rowCount() != 0) {
        echo 
    "Il codice inserito risulta non vincente!";

    Se, invece, hai proprio due tabelle distinte, molto probabilmente dovrai effettuare una JOIN, la cui sintassi dipende dalla relazione tra le due entità.
    Nono esatto, forse mi ero espresso male....ho 2 colonne non due tabelle

    Adesso provo subito e ti aggiorno! Grazie mille ;)

  4. #4
    Data registrazione
    09-03-2017
    Messaggi
    15

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Più verosimilmente hai una tabella chiamata codes con due colonne denominate code e premio. In questo caso interroga la base di dati cercando righe con quel codice e il valore di premio uguale a "PERDENTE".
    Codice PHP:
    $stm $this->pdo->prepare('SELECT * FROM codes WHERE code=:codereward AND premio="PERDENTE"');
    $stm->execute(array(':codereward'=>htmlspecialchars($_POST['codereward'])));
    $premio $querypremio->fetch(PDO::FETCH_ASSOC); 
    if (
    $stm->rowCount() != 0) {
        echo 
    "Il codice inserito risulta non vincente!";

    Se, invece, hai proprio due tabelle distinte, molto probabilmente dovrai effettuare una JOIN, la cui sintassi dipende dalla relazione tra le due entità.
    ma per caso riusciresti ad aiutarmi con teamviewer? ahahah sto impazzendo :S

  5. #5
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    862

    Predefinito

    Temo di non utilizzare TeamViewer... in ogni caso non c'è bisogno di scomodarlo per un paio di righe di codice .
    Qual'è il problema?

  6. #6
    Data registrazione
    09-03-2017
    Messaggi
    15

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Temo di non utilizzare TeamViewer... in ogni caso non c'è bisogno di scomodarlo per un paio di righe di codice .
    Qual'è il problema?
    Questo pezzo di codice lo devo inserire prima o dopo questa stringa?:
    public function ritiraPremio()


    Mi da schermata bianca con errore su una linea

  7. #7
    mzanella non è connesso AlterVistiano
    Data registrazione
    29-12-2015
    Messaggi
    862

    Predefinito

    Dipende da come lo vuoi impostare.
    Io creerei un nuovo metodo premioVincente che restituisce false se il codice corrisponde a PERDENTE, true altrimenti:
    Codice PHP:
    class Premio
    {
        protected 
    $pdo;

        function 
    __construct($pdo)
        {
            
    $this->pdo $pdo
        } 


        
    /**
         * Restituisce true se il codice è vincente, false altrimenti.
         * @param string $codice Codice da controllare
         * @return bool True se e solo se il codice è vincente
         */
        
    protected function premioVincente($codice) {
            
    $stm $this->pdo->prepare('SELECT * FROM codes WHERE code=:codereward AND premio="PERDENTE"');
            
    $stm->execute(array(':codereward' => $codice));

            return 
    $stm->rowCount() === 0);
        }



        public function 
    ritiraPremio() 
        { 
            
    $querypremio $this->pdo->prepare('SELECT * from codes WHERE code=:codereward'); 
            
    $querypremio->execute(array(':codereward'=>htmlspecialchars($_POST['codereward']))); 
            
    $premio $querypremio->fetch(PDO::FETCH_ASSOC); 
            if(
    $querypremio->rowCount() > 0
            { 
                if(
    $premio['code'] == $_POST['codereward']) 
                { 
                   
    $_SESSION['premio'] = $premio['id']; 
                    
    header('Refresh: 2; url=/premio.php'); 
                    return 
    true;  
                } 
                else 
                { 
                    return 
    false
                }  
            } 
            else 
            { 
            
    #    echo '<div style="text-align: center; color: #fff;background-color: #D3020C; min-height: 25px; width: 100%;">Codice inesistente!</div>'; 
             

        }

        
    // ...e poi il resto del codice 
    così puoi richiamare il metodo per controllare se il codice è vincente dove e quando vuoi, passandogli $_POST['codereward'].

  8. #8
    Data registrazione
    09-03-2017
    Messaggi
    15

    Predefinito

    Citazione Originalmente inviato da mzanella Visualizza messaggio
    Dipende da come lo vuoi impostare.
    Io creerei un nuovo metodo premioVincente che restituisce false se il codice corrisponde a PERDENTE, true altrimenti:
    Codice PHP:
    class Premio
    {
        protected 
    $pdo;

        function 
    __construct($pdo)
        {
            
    $this->pdo $pdo
        } 


        
    /**
         * Restituisce true se il codice è vincente, false altrimenti.
         * @param string $codice Codice da controllare
         * @return bool True se e solo se il codice è vincente
         */
        
    protected function premioVincente($codice) {
            
    $stm $this->pdo->prepare('SELECT * FROM codes WHERE code=:codereward AND premio="PERDENTE"');
            
    $stm->execute(array(':codereward' => $codice));

            return 
    $stm->rowCount() === 0);
        }



        public function 
    ritiraPremio() 
        { 
            
    $querypremio $this->pdo->prepare('SELECT * from codes WHERE code=:codereward'); 
            
    $querypremio->execute(array(':codereward'=>htmlspecialchars($_POST['codereward']))); 
            
    $premio $querypremio->fetch(PDO::FETCH_ASSOC); 
            if(
    $querypremio->rowCount() > 0
            { 
                if(
    $premio['code'] == $_POST['codereward']) 
                { 
                   
    $_SESSION['premio'] = $premio['id']; 
                    
    header('Refresh: 2; url=/premio.php'); 
                    return 
    true;  
                } 
                else 
                { 
                    return 
    false
                }  
            } 
            else 
            { 
            
    #    echo '<div style="text-align: center; color: #fff;background-color: #D3020C; min-height: 25px; width: 100%;">Codice inesistente!</div>'; 
             

        }

        
    // ...e poi il resto del codice 
    così puoi richiamare il metodo per controllare se il codice è vincente dove e quando vuoi, passandogli $_POST['codereward'].
    Per quanto riguarda $_POST['codereward'] l'ho già inserito in questa pagina qui: http://scommesseonlinetest.altervist...index-test.php

    Se volessi invece indirizzare alla pagina1.php nel caso di numero vincente ed alla pagina2.php nel caso in cui il codice risultasse perdente come dovrei fare?...o meglio i redirect in che posizione devo inserirli all'interno di quel codice

  9. #9
    darbula non è connesso Altervistiano Junior
    Data registrazione
    24-04-2011
    Messaggi
    615

    Predefinito

    prima dei Redirect non devi produrre alcun output (codice html, echo php), Redirect pagina vincente solo se il codice è quello vincente altrimenti Redirect pagina perdente (e sempre se non è previsto una stampa del codice di errore nel caso di fallimento connessione a mysql)

  10. #10
    Data registrazione
    09-03-2017
    Messaggi
    15

    Predefinito

    Citazione Originalmente inviato da darbula Visualizza messaggio
    prima dei Redirect non devi produrre alcun output (codice html, echo php), Redirect pagina vincente solo se il codice è quello vincente altrimenti Redirect pagina perdente (e sempre se non è previsto una stampa del codice di errore nel caso di fallimento connessione a mysql)
    ok ma queste funzioni come le richiamo nella pagina dove verrà inserito il codice?
    Al momento è questo il codice:
    Codice PHP:
    <?php

    require './core1.php';

    if(isset(
    $_POST['reward']))

    {

        
    $codereward htmlspecialchars($_POST['codereward']);

        if(
    $codereward == '')

        {

            
    $codice1 '<div class="alert alert-warning"> Inserire un codice!</div>';

        }

        else

        {

            if(
    $premio->ritiraPremio())

            {

                
    $codice2 '<div class="alert alert-success">Codice valido, attendere!</div>';

            }
    else
        {

                
    $codice2 '<div class="alert alert-danger">Codice non valido!</div>';

            }

        }

    }

    ?>
    <!DOCTYPE html>
    <html class="nojs html css_verticalspacer" lang="it-IT">
     <he
    Al momento verifica solo se il codice è presente o meno nel DB e dà le relative scritte è valido e non è valido.

Regole di scrittura

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