Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 58
  1. #1

    Connessione db per inserimento dati

    Ciao a tutti.
    Nella parte di sito che sto preparando ora, devo permettere agli utenti di registrarsi.
    Di conseguenza devo fare in modo che i dati da loro inseriti finiscano in un database.
    Il database lo sto gestendo tramite phpPgAdmin.

    Ma il mio problema riguarda il fatto che non sicura di come si faccia a connettere il database e a inserire dati tramite query.

    Per adesso ho creato un file pgconnect.php
    Codice PHP:
     <?php

    class db{
        function 
    db_open() {
            
    $this->host       $host 'localhost';
            
    $this->user     $user 'administrator';
            
    $this->password $password 'mikmik';
            
    $this->dbname     $dbname 'postgres';
            
    $this->port     $port 5432;
        }
        function 
    db_connect(){
            
    $this->DB_conn pg_connect("host=".$this->host." port=".$this->port." dbname=".$this->dbname." user=".$this->user." password=".$this->password);
        }
        function 
    db_close() {
            
    pg_close ($this->db_conn);
        }
        function 
    query($query){
            
    $result pg_query ($this->db_conn,$query);
            return 
    $result;
            
    //return pg_send_query ($this->db_conn,$query);
        
    }
        function 
    query_numrows($query){
            
    $result pg_query ($this->db_conn,$query);
            
    $numrows pg_num_rows($result);
            return 
    $numrows;
        }
        function 
    query_arrayresult($query){
            
    $result pg_send_query ($this->db_conn,$query);
            
    $res pg_get_result($this->db_conn);
            if(
    $result){
                
    $arrayresult=Array();
                while (
    $risultati pg_fetch_array ($res)){
                    
    array_push($arrayresult,$risultati) ;
                }
                return 
    $arrayresult;
            }else{
                
    $err pg_result_error_field($res,PGSQL_DIAG_MESSAGE_DETAIL);
                return 
    $err;
            }
        }
        
    /*cambia l'utente che si può connettere al database
        function set_user($user,$pass){
            $this->user = $user;
            $this->password = $pass;
        }*/
    }
    ?>
    I dati vengono memorizzati in variabili $, tramite il metodo post.
    A questo punto io avevo fatto:
    Codice PHP:
    <?php
    #DATABASE E QUERY###########################################################
    $db1 = new db_open();
    $db1->db_connect();
    $result1 $db1->query("INSERT INTO utente (login, pw, tipo_utente) VALUES ('.$login.', '.$password.', 'privato')");

    $db2 = new db_open();
    $db2->db_connect();
    $result2 $db2->query("INSERT INTO privato (codf, nome, cognome, email, tel, autorizzato, login) VALUES ('.$codfiscale.', '.$nome.', '.$email.', '.$tel.', false, '.$login.')");

    if (!
    $result1 && !$result2) {
        echo 
    "An error occured.\n" pg_last_error();
        exit;
    }else{
        echo 
    "Utente ".$usr." inserito! Ora loggati alla pagina iniziale";
        
    header('Location: index.php');
    }
    ?>
    Quando però provo a registrarmi e do l'invio, mi esce una schermata bianca e nel db non vengono memorizzati i dati.
    Ho fatto solo errori di sintassi o ho proprio sbagliato concettualmente?

  2. #2
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ciao,
    di seguito quello che io ho notato.

    Innanzitutto, siccome dici di non ricevere nessun genere di errore,
    ti consiglierei di inserire questa linea come prima linea di codice

    Codice PHP:
    error_reporting(E_ALL); 
    in questo modo attiverai la visualizzazzione degli errori.

    Per la gestione del db usi una classe che si chiama 'db' ma la istanzi come 'db_open', dovresti quindi scrivere

    Codice PHP:
    $db = new db();
    $db->db_open();
    $db->db_connect(); 
    Da questo momento saresti connessa al database.

    E' inutile istanziare la classe molteplici volte ed effettuare molteplici connessioni in quanto per la connessione usi sempre gli stess dati, dichiarati in db_open().

    Inoltre questo if

    Codice PHP:
    if (!$result1 && !$result2
    devi notare che è una casistica che avviene solo quando ENTRAMBE i result danno esito negativo, devi poi vedere tu se far succedere qualcosa o meno se solo uno dei due ha dato errore.

    In caso che la procedura abbia esito positivo, entreremmo nell'else, che prevede prima un 'echo' e quindi un 'header location', questo vuol dire che l'echo non sarà mai visualizzato, in quanto l'utente sarebbe rediretto senza visualizzare nessun genere di output, o in alternativa potresti ricevere il fatidico errore 'headers already sent'.

    Infine la sintassi del tuo codice fa trasparire che questo sia stato scritto per php4, forse sarebbe il caso di aggiornare un po...

    C'è qualche motivo sulla scelta di postgres rispetto a mysql?

    Ciao

  3. #3
    Allora, ho messo l'error_reporting (a proposito, lo devo mettere prima o dopo della session_start() )?
    Ho corretto la connessione al db con il codice che mi hai detto tu:
    Codice PHP:
    #DATABASE E QUERY###########################################################
    $db1 = new db();
    $db1->db_open();
    $db1->db_connect();
    $result1 $db1->query("INSERT INTO utente (login, pw, tipo_utente) VALUES ('.$login.', '.$password.', 'privato')");

    $db2 = new db();
    $db2->db_open();
    $db2->db_connect();
    $result2 $db2->query("INSERT INTO privato (codf, nome, cognome, email, tel, autorizzato, login) VALUES ('.$codfiscale.', '.$nome.', '.$email.', '.$tel.', false, '.$login.')");

    if (!
    $result1 && !$result2) {
        echo 
    "An error occured.\n" pg_last_error();
        exit;
    }else{
        echo 
    "Utente ".$usr." inserito! Ora loggati alla pagina iniziale";
        
    header('Location: index.php');

    e perlomeno questa volta, anche se non funziona l'inserimento di dati, mi esce un errore a schemo:
    An error occured.
    Che credo derivi da qui:
    Codice PHP:
    if (!$result1 && !$result2) {
        echo 
    "An error occured.\n" pg_last_error();
        exit; 

    Uso Postgres perché il prof ci ha obbligato ad usare questo, e non so perché dal momento che tutto il resto del mondo usa MySql!

    Per quanto riguarda PHP4, non è che non voglia aggiornare il codice, è che non ne sono proprio capace, non avevo mai usato php prima d'ora, quindi non conosco le differenze tra le varie versioni!

    Ti ringrazio per avermi dato una mano! Ma adesso cosa pensi che causi l'errore? Forse ho sbagliato la sintassi per l'inserimento con la query?

  4. #4
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    credo che il problema sia il secondo insert, nel campo autorizzato mancano le virgoletta a false........

  5. #5
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ciao,
    rileggendo il codice ho notato altre cose

    primo, modifica il tuo metodo db_open

    Codice PHP:
        function db_open() {
            
    $this->host       $host 'localhost';
            
    $this->user     $user 'administrator';
            
    $this->password $password 'mikmik';
            
    $this->dbname     $dbname 'postgres';
            
    $this->port     $port 5432;
        } 
    in questo modo

    Codice PHP:
        function db_open() {
            
    $this->host       'localhost';
            
    $this->user     'administrator';
            
    $this->password 'mikmik';
            
    $this->dbname     'postgres';
            
    $this->port     5432;
        } 
    Secondo, cerca di procedere un passo per volta, esegui solo la prima query, commenta tutto il resto, ad esempio, prova questo codice

    Codice PHP:

    $login 
    'my_user';
    $password 'my_password';

    $db1 = new db();
    $db1->db_open();
    $db1->db_connect();
    $result1 $db1->query("INSERT INTO utente (login, pw, tipo_utente) VALUES ('".$login."', '".$password."', 'privato')");

    if (!
    $result1) {
        echo 
    "An error occured.\n" pg_last_error();
        exit;
    }else{
        echo 
    "Utente ".$login." inserito! Ora loggati alla pagina iniziale";
        
    //header('Location: index.php');

    Non so se hai solo dimenticato di postarle o proprio le hai dimenticate, ma le variabili $login, $password e $usr non sono mai state definite.

    Inoltre nella prima query hai inserito solo apici singoli, nell'esempio che ti ho postato cìè la versione corretta, con apici singoli e doppi .

    Facci sapere

    Ciao

  6. #6
    Ho modificato la parte del db e gli apici e ho provato a fare una sola query, ma mi esce sempre
    An error occured.

  7. #7
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Altro possibile problema:

    in db_connect() usi la proprietà 'DB_conn', quando effettui le query passi 'db_conn' ( nota le maiuscole/minuscole ).

    Ti consiglio di inizializzare tutte le proprietà utilizzate

    Codice PHP:
    class db
      public 
    $host;
      public 
    $user;
      public 
    $password;
      public 
    $dbname;
      public 
    $port;
      public 
    $db_conn;

      [.. 
    il resto della classe ..] 
    cambia qualcosa?

    Ciao

  8. #8
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    fai un echo della query e provala in phpmyadmin

  9. #9
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Originariamente inviato da bstefano79
    fai un echo della query e provala in phpmyadmin
    corretto, però nel suo caso è phpPGadmin

  10. #10
    @razorblase... adesso mi confondi! non so cosa voglia dire inizializzare la classe!
    @bstefano, cosa intendi fare la query dell'echo?
    Lo so, sembro stupida! Ma certe cose le sto imparando

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.