Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55

    [PHP+MySQL] Non mi ritorna valore

    Salve, vorrei chiedere un vostro aiuto riguardo uno strano errore che, sicuramente, è causato da una fesseria e molto probabilmente anche da un solo errore di battitura..Ma son talmente stanco che il cervello proprio non riesce ad individuare..

    Queste sono le 3 funzioni:

    Codice PHP:
    public function inserisci_topic($forum,$titolo,$autore,$messaggio$ip)
        {
            if(isset(
    $this->attiva))
            {
                
    $data="SELECT CURRENT_TIMESTAMP()";
                
    $query_data=mysql_query($data) or die(mysql_error());
                
    $data_inserimento=mysql_fetch_row($query_data);
                
    $inserisci_topic="INSERT INTO db_forum_topic VALUES ('','".$forum."','".$titolo."','".$data_inserimento[0]."','".$autore."','','','','','')";
                
    $IDTopic=$this->ritorna_IDTopic($forum$titolo$autore$data_inserimento[0]);
                
    $query_topic=mysql_query($inserisci_topic) or die(mysql_error());
                
    $this->inserisci_post($IDTopic[0], $forum$messaggio$autore$titolo$data_inserimento[0], $ip);
                return 
    "ok!";
                
            }
            else
                return 
    "errore inserimento topic";
        }
        
        public function 
    inserisci_post($topic$forum$messaggio$autore$titolo$data$ip)
        {
            if(isset(
    $this->attiva))
            {
                
    $inserisci_post="INSERT INTO db_forum_posts VALUES ('', '".$topic."', '".$forum."', '".$messaggio."', '".$autore."', '".$titolo."', '', '".$data."', '', '', '".$ip."')";
                
    $query_post=mysql_query($inserisci_post) or die(mysql_error());
            }
            else
                return 
    "errore inserimento post";
        }
        
        public function 
    ritorna_IDTopic($forum$titolo$autore$data)
        {
            if(isset(
    $this->attiva))
            {
                
    $istruzione="SELECT topic_id FROM db_forum_topic WHERE forum_id='".$forum."' AND topic_title='".$titolo."' AND topic_autore='".$autore."' AND topic_time='".$data."'";
                
    $topic=mysql_query($istruzione) or die(mysql_error());
                return 
    mysql_fetch_row($topic);
            }
            else
                return 
    "errore ritorno topic id";
        } 
    l'errore mi viene solo per il valore del Topic ID da inserire nella tabella db_forum_posts...Ogni volta invece di inserire il vero ID Topic, inserisce sempre il valore 0.

    Come se la query nella funzione ritorna_IDTopic non trovasse risultati..Ho provata anche a farla manualmente, inserendo i vari dati, ma ovviamente la query è giusta.
    Problemi con la variabile della data non ve ne sono, visto che nella tabella db_forum_posts la data viene registrata perfettamente, quindi ho potuto escludere qualche problema del passaggio della variabile tra le varie funzioni, e lo stesso quindi vale anche per le altre variabili.

    A questo punto la mia ignoranza e la mia stanchezza non riesce a farmi individuare l'errore..
    L'unico errore sta proprio nella variabile IDTopic che viene registrata male..

    Mi viene solo un dubbio, l'unico che potrebbe spiegare tutto questo..
    E cioè che la funzione mysql_query non fa registrare il record appena viene eseguita, ma che il record viene definitivamente registrato solo quando la funzione che utilizza mysql_query finisce di lavorare..

    Solo così mi spiegherei perchè mai ritorna_IDTopic() fa tornare un valore pari a zero..
    E' una ipotesi giusta?

    Grazie per la pazienza

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    719
    Ma nell'id ci hai messo "null" come default e un auto_increment ed è settato come primary key?

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    no, topic id è una primary key (quindi not null) ed è auto_increment..
    Quindi, per esempio, quando viene richiamata la funzione inserisci_topic, nella tabella db_forum_topic, il nuovo record ha tutti i campi giusti.
    Poi, sempre nella funzione inserisci_topic, viene chiamata prima la funzione ritorna_IDTopic che dovrebbe ricavare l'ID del nuovo topic inserito nel DB e poi chiama la funzione inserisci_post che aggiunge alla tabella db_forum_posts il nuovo record che ha anche lui tutti i dati giusti, tranne appunto l'ID del Topic che risulta essere 0 e non il reale valore che TopicID ha sul record desiderato..

    Quindi è chiaro che il problema riguardi proprio la funzione ritorna_IDTopic che, a quanto pare, non trova record..Il problema è che non riesco a spiegarmi il perchè visto che la query è giusta e infatti facendola direttamente nel DB mi ritorna il valore desiderato

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    Volevo aggiungere che ho creato una pagina di test php per provare le varie funzioni e, richiamando ritorna_IDTopic ho notato che mi stampa il valore giusto ..

    Aggiungo anche una piccola descrizione delle sole entità interessate nelle varie tabelle:

    Tabella: db_forum_topic
    topic_id int(8) UNSIGNED Not Null Primary Key auto_increment
    forum_id int(8) UNSIGNED Not Null
    topic_title varchar(255) utf8_unicode_ci Not Null
    topic_time timestamp Not Null, Default: 0000-00-00 00:00:00
    topic_autore varchar(255) utf8_unicode_ci Not Null


    Tabella: db_forum_posts
    topic_id int(8) UNSIGNED Not Null
    forum_id int(8) UNSIGNED Not Null
    post_title varchar(255) utf8_unicode_ci Not Null
    post_message mediumtext utf8_unicode_ci Not Null
    post_user varchar(255) utf8_unicode_ci Not Null
    post_time timestamp Not Null, Default: CURRENT_TIMESTAMP()

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    Ragazzi, come vi avevo detto era una "fesseria" che la stanchezza di ieri non riusciva a farmi risolvere..


    Rileggendo il codice a mente fresca ho trovato l'errore che ora vi spiego.

    Guardiamo la funzione:

    Codice PHP:

    public function inserisci_topic($forum,$titolo,$autore,$messaggio$ip)
        {
            if(isset(
    $this->attiva))
            {
                
    $data="SELECT CURRENT_TIMESTAMP()";
                
    $query_data=mysql_query($data) or die(mysql_error());
                
    $data_inserimento=mysql_fetch_row($query_data);
                
    $inserisci_topic="INSERT INTO db_forum_topic VALUES ('','".$forum."','".$titolo."','".$data_inserimento[0]."','".$autore."','','','','','')";
    ==>      
    $IDTopic=$this->ritorna_IDTopic($forum$titolo$autore$data_inserimento[0]);
    ==>      
    $query_topic=mysql_query($inserisci_topic) or die(mysql_error());
                
    $this->inserisci_post($IDTopic[0], $forum$messaggio$autore$titolo$data_inserimento[0], $ip);
                return 
    "ok!";
                
            }
            else
                return 
    "errore inserimento topic";
        } 
    la richiesta di trovare l'ID del Topic, viene PRIMA che venga registrato il record nella tabella dei Topic , indi per cui la funzione ritorna_IDTopic è chiaro che non trovi nessun "ID Topic" relativo a quei dati di ricerca


    Grazie e scusate

  6. #6
    Scusami ma:
    Codice PHP:
    $data="SELECT CURRENT_TIMESTAMP()";
    $query_data=mysql_query($data) or die(mysql_error());
    $data_inserimento=mysql_fetch_row($query_data); 
    perche' fai una query per avere il timestamp attuale? time() era troppo semplice?

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    55
    Non conoscendo bene le funzioni su data e ora di PHP per ora mi stavo concentrando sul far funzionare i comandi basilari di un forum ricostruito da zero..
    Poi una volta buttato giù lo scheletro proseguirò con le migliorie di vario tipo riguardo la sicurezza, evitare i doppi post, evitare query inutili e quindi anche usare le funzioni data-ora del php per avere un risultato compatibile con il timestamp

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.