Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    PHP PDO - la query non viene eseguita

    Buongiorno a tutti,
    ho un problema che mi sta facendo impazzire da giorni.
    In pratica per la creazione di una funzione di Registrazione utente ho creato una pagina con un form che invia i dati di registrazione dell'utente ad un'altra pagina contenente il codice PHP per i controlli e per la scrittura nel DB dei dati inviati se i controlli hanno avuto esito positivo.

    Di seguito il sistema adottato:

    Ho creato una classe USER con un metodo runquery() seguenti:

    class USER
    {
    private $conn;

    public function __construct()
    {
    $database = new Database();
    $db = $database->dbConnection();
    $this->conn = $db;
    }

    public function runQuery($sql)
    {
    $stmt = $this->conn->prepare($sql);
    return $stmt;
    }
    }

    e la pagina che riceve i dati dal modulo,.
    La procedura deve controllare che l'email non sia gia' presente nella tabella table_users del DB
    Se non e' presente deve inserire nella stessa tabella i dati di registrazione.
    Ecco il codice creato:

    <?php
    session_start();
    require_once 'class.user.php';

    $reg_user = new USER();

    if(isset($_POST['btn-signup']))
    {
    ******** i dati ricevuti dal modulo *********
    $uname = trim($_POST['txtuname']);
    $email = trim($_POST['txtemail']);
    $upass = trim($_POST['txtpass']);
    $code = md5(uniqid(rand()));

    ******** richiamo il metodo runQuery ed invio la query **********


    $stmt = $reg_user->runQuery('SELECT * FROM tbl_users WHERE useremail = :email_id');

    ******* effettuo il binding sulla query *************
    $stmt->bindParam(":email_id", $email);

    ********** eseguo la query *************
    $stmt->execute();
    ........

    a questo punto del codice l'applicazione si blocca e il comando execute() non viene eseguito. Non ricevo alcun messaggio di errore. Solo la pagina vuota, nessun codice sorgente... niente di niente.

    Ho provato a mettere vari echo verificando che il modulo ha effettivamente inviato i dati inseriti in modo corretto. C'e' un'anima buona che potrebbe dirmi se la sequenza di istruzioni e' corretta e se l'errore e' di sintassi o di passaggio dati?

    Ho provato a cercare su google informazioni senza trovarne. La sintassi mi sembra corretta, pertanto penso sia un problema legato al binding dei dati (forse non li invia alla query)...

    Se qualcuno ha qualche indicazione puo' cortesemente aiutarmi?
    Anche solamente come verificare se un'istruzione execute() sia effettivamente eseguita o no e che tipo di dati sono stati effettivamente passati alla query dall'operazione di binding.
    Grazie a tutti in anticipo
    Marco

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Perché hai creato una classe USER ? Visto il suo codice potresti fare a meno di usarla.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    La classe USER contiene ulteriori metodi. Per semplificare ho inviato solo i metodi il cui uso mi bloccano l'applicativo.
    Il problema è, come ho detto, quando la query deve essere eseguita riga: $stmt->execute().
    Dopo l'istruzione ritorna la pagina bianca, senza alcun messaggio di errore.
    Mi sembra non esistano errori di sintassi nel codice. Potrebbe essere qualcosa nel binding a livello di passaggio dati, che blocca l'esecuzione della query?
    Io non riesco proprio a capire quello che accade...

  4. #4
    nella bindParam non devi specificare anche il tipo di variabile? http://php.net/manual/en/pdostatement.bindparam.php

  5. #5
    Grazie a tutti!.... Ho risolto parzialmente il problema!
    Era solo una questione di permessi sullo user!!
    Purtroppo PostgreSQL non presenta alcun errore se non in un file di log a cui non avevo pensato di guardare.
    Ho risolto utilizzando lo user "postgres" (come amminstratore) e tutto ha funzionato perfettamente.
    Ora devo capire che tipi di permessi dare allo user del database (voglio che abbia solo i permessi di esecuione delle query e di scrittura e lettura sulle tabelle).
    Per ora ho dato tutti i privilegi eccetto quello di superuser... e tutto sembra funzionare.
    Qualcuno sa come dare i permessi giusti tramite phppgadmin?
    Grazie a tutti per il supporto
    Marco

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.