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
    Guest

    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 AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    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
    Guest

    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
    Guest

    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 AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    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
    Guest

    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 AlterGuru
    Data registrazione
    29-12-2015
    Messaggi
    1,954

    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
    Guest

    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 AlterGuru 2500
    Data registrazione
    24-04-2011
    Messaggi
    2,894

    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
    Guest

    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
  •