Visualizzazione risultati 1 fino 16 di 16

Discussione: La situazione paradossale

  1. #1
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito La situazione paradossale

    Mi scuso per il titolo molto poetico, ma veramente non so come spiegare questa situazione che mi è capitata...

    Allora, sto realizzando da zero (fatemi gli auguri...!) un forum per il mio sito e (mi?) sono leggermente impappinato sul passaggio del login: ecco cosa succede...

    - provate ad accedere all'indirizzo di test http://theboard.dementialsite.altervista.org/
    - loggatevi con nome utente "test" e password "test"
    - si aprirà la pagina del login, che vi darà il benvenuto e vi reindirizzerà nuovamente alla home page del forum

    Adesso iniziano le stranezze: la sessione "login" viene correttamente riconosciuta, perché compare la tabellina con scritto "Accesso effettuato". Quello che non va è che non viene stampato il nome dell'utente e il numero di messaggi privati che ha archiviato, perché la query (che ho stampato, ovviamente in via provvisoria) non dà nessun risultato. Ma ancora più strano è che la stessa query (leggi: copiata e incollata) sull'interfaccia di phpMyAdmin fornisce correttamente i dati richiesti: Nome utente e numero di messaggi privati.

    EDIT: ho tolto il controllo sul ban spostandolo all'accesso...

    Perché 'sta cosa...?

    Se ci fosse bisogno di ulteriori chiarimenti, sono a disposizione.

    Grazie a chi risponde... statemi bene...

    P.S. Il logout adesso l'ho realizzato e funziona pure quello... Altra cosa: ho usato Firefox, non so perché ma con Explorer è il forum è inguardabile...
    Ultima modifica di dementialsite : 17-12-2005 alle ore 12.28.59
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  2. #2
    Guest

    Predefinito

    io vedo anche un:

    La query non ha fornito nessun risultato!
    NR. UTENTE: 3
    QUERY: SELECT UTENTI.NomeUtente AS u_id, COUNT (MESS_PRIVATI.LettoD) AS pm_nonletti FROM UTENTI LEFT JOIN MESS_PRIVATI ON (UTENTI.NrRegistrazione = MESS_PRIVATI.Destinatario AND MESS_PRIVATI.LettoD = 0) WHERE UTENTI.NrRegistrazione = 3 GROUP BY u_id

  3. #3
    L'avatar di funcool
    funcool non è connesso Utente storico
    Data registrazione
    05-02-2004
    Residenza
    Qui... Non lì, qui!
    Messaggi
    15,433

    Predefinito

    Ma sulla versione che c'è su AlterVista il join non funziona.
    Mattia vi manda a FunCool - Matriz - Directory Gogol - Sfondo rosso per la Birmania
    «Tu mi dai fastidio perché ti credi tanto un Dio!» «Bè, dovrò pur prendere un modello a cui ispirarmi, no?» Woody Allen

  4. #4
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    [4 markoxaser] Quella roba avevo detto che l'ho stampata in via provvisoria per vedere la query che è stata eseguita. Nella versione definitiva ovviamente la toglierò...!

    [4 funcool] Le join funzionano (almeno INNER, LEFT e NATURAL), visto che le ho usate anche su altre query e non mi hanno dato nessun problema...

    Continuo a dire che è veramente strano che dalle pagine PHP la query non fornisca nessun risultato, mentre da amministratore (phpMyAdmin) viene dato correttamente Nome utente e numero di messaggi privati...

    Altre idee? Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  5. #5
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    posta il codice che usi per la query...

    fai un mysql_num_rows() e stampi il numero di messaggi??

    /edit... vedo che fai un count direttamente nella query...

    l'errore "La query non ha fornito nessun risultato!" te lo da direttamente mysql_error()???

    oppure lo stampi tu?

    in base a che criteri?

    PS: il tuo sito è difficilmente navigabile con firefox... certe pagine hanno layout incompresibili... mentre con IE ok...
    Ultima modifica di Evcz : 17-12-2005 alle ore 14.18.58
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  6. #6
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da Evcz
    ... l'errore "La query non ha fornito nessun risultato!" te lo da direttamente mysql_error()??? oppure lo stampi tu? in base a che criteri?
    L'errore lo stampo io sulla base del risultato di mysql_fetch_array, come puoi vedere dal codice che uso:
    Codice PHP:
    <?php
    // controlla se è impostato il valore di accesso
    if (!isset($_SESSION["login"])) { ?>

    <!-- stampa il modulo per il login -->

    <?php } else {
    $user = $_SESSION["login"];

    $query = "SELECT UTENTI.NomeUtente AS u_id, COUNT (MESS_PRIVATI.LettoD) AS pm_nonletti FROM UTENTI LEFT JOIN MESS_PRIVATI ON (UTENTI.NrRegistrazione = MESS_PRIVATI.Destinatario AND MESS_PRIVATI.LettoD = 0) WHERE UTENTI.NrRegistrazione = $user GROUP BY u_id";

    $result = mysql_query ($query, $db);
    $line;
    if (
    $line = mysql_fetch_array ($result)) {}
    else
    echo (
    "<B>La query non ha fornito nessun risultato!</B><BR>");

    $ret_user = $line["u_id"];
    $ret_pm = $line["pm_nonletti"];

    // questa è la famosa stampa query provvisoria
    echo ("<B>NR. UTENTE:</B> $user<BR><B>QUERY:</B> $query<BR><B>RISULTATO:</B> $ret_user - $ret_pm<BR>");
    ?>
    <TABLE WIDTH="100%">
    <TR>
    <TH>ACCESSO EFFETTUATO</TH>
    </TR>
    <TR>
    <TD><P>Benvenuto in THE BO4RD, <B><?php echo ($ret_user); ?></B>!</P>
    <P><B><A HREF="#">Messaggi privati</A>: </B><?php echo ($ret_pm); ?> non letti</P>
    <FORM NAME="login" METHOD="post" ACTION="logout.php">
    <P><INPUT TYPE="submit" VALUE="Esci da THE BO4RD"></P>
    </FORM>
    </TABLE>
    <?php } ?>
    Citazione Originalmente inviato da Evcz
    PS: il tuo sito è difficilmente navigabile con firefox... certe pagine hanno layout incompresibili... mentre con IE ok...
    Ma sono io che ho Firefox tarocco? Da me si vede benissimo... è con Explorer che è inguardabile (la tabella con l'elenco delle stanze va oltre la pubblicità...)

    Statemi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  7. #7
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    hai provato con

    $line = mysql_fetch_row($result);

    ?

    per quanto riguarda il sito:
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  8. #8
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Ehm.. non posso dire di essere un espertone in php,
    ma personalmente avrei scritto queste righe di codice del fetch in altro modo:
    Codice PHP:
    $line;
    if (
    $line = mysql_fetch_array ($result)) {}
    else
    echo (
    "<B>La query non ha fornito nessun risultato!</B><BR>");
    molto probabilmente non è affatto questo il problem.. però avrei fatto qualcosa del genere per essere sicuro di non imboccare in "stranezze":
    Codice PHP:
    $line = mysql_fetch_array ($result);
    if (
    $line === FALSE)
    echo (
    "<B>La query non ha fornito nessun risultato!</B><BR>");
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  9. #9
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito Niente da fare...

    Né cambiando funzione né rifacendo il test arrivo a sapere quei strafot* dati! Anzi, riscrivendo il test (false va minuscolo, almeno secondo Dreamweaver) non compare l'avviso di errore ma il risultato manca comunque!
    Qual è il bello? Che a parte quello, tutto il resto funziona: potreste persino prendere una discussione aperta e inserirci un nuovo messaggio [se volete farlo NON METTETE TAG HTML grazie...!], e verrebbe correttamente riconosciuto...

    Statemi bene...

    P.S. Sarò delirato io, ma io il sito lo vedo così con Firefox http://dementialsite.altervista.org/...refox-shot.jpg: meglio di così si muore! Questo invece è quello che ottengo dopo una scrollata di pagina con Explorer: http://dementialsite.altervista.org/...lorer-shot.jpg.
    Ultima modifica di dementialsite : 17-12-2005 alle ore 15.28.36
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  10. #10
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    allora... fai così... fai un pagina singola e testa solo quella query....

    senza fare il controllo fai solo il fetch rows e poi un print_r() del risultato... e vedi cosa succede...

    già che ci sei metti pure un echo mysql_error();

    Per il layout del sito: non so che dirti... firefox 1.5 build ufficilae me lo mostra come ti ho postato sopra :)
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  11. #11
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Citazione Originalmente inviato da dementialsite
    (false va minuscolo, almeno secondo Dreamweaver)
    http://it.php.net/manual/it/language.types.boolean.php
    Per pignoleria si dovrebbero indicare i valori booleani in maiuscolo FALSE e TRUE come indicato nel manuale, ma essendo comunque un po' tutto case insensitive il php si può benissimo scrivere true/false minuscolo come sono comunque abituato anche io soprattutto con Java. Anche se scrivi un orribile "False" con F maiuscola funziona sempre.

    Tornando al problem, intanto modificando quella riga non appare il messaggio che non ha trovato risultati, giusto? ed è già un bel passo perché allora vuol dire che lo trova il record. A questo punto penso potrebbe essere un problema nell'identificare il nome del campo nell'array di risultati $line..
    segui i consigli di Evcz.

    Edit:
    il layout invece lo vedo bene con Mozilla 1.6 (non firefox) non come la capture di evcz
    Ultima modifica di heracleum : 17-12-2005 alle ore 17.04.53
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  12. #12
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Ho fatto queste modifiche:
    - la pagina di login la faccio reindirizzare a logbox.php e non più a index.php, così viene eseguita solo la parte della tabella
    - il file logbox.php ha ora questo codice, almeno, spero di aver capito bene il suggerimento:
    Codice PHP:
    $user = $_SESSION["login"];

    $query = "SELECT UTENTI.NomeUtente AS u_id, COUNT (MESS_PRIVATI.LettoD) AS pm_nonletti FROM UTENTI LEFT JOIN MESS_PRIVATI ON UTENTI.NrRegistrazione = MESS_PRIVATI.Destinatario WHERE UTENTI.NrRegistrazione = $user AND MESS_PRIVATI.LettoD = 0 AND MESS_PRIVATI.ArchiviatoD = 1 GROUP BY u_id";

    $result = mysql_query ($query, $db);

    $line = mysql_fetch_array ($result);
    /* il codice precedente
    if ($line === false)
    echo ("<B>La query non ha fornito nessun risultato!</B><BR>");

    $ret_user = $line["u_id"];
    $ret_pm = $line["pm_nonletti"];

    echo ("<B>NR. UTENTE:</B> $user<BR><B>QUERY:</B> $query<BR><B>RISULTATO:</B> $ret_user - $ret_pm<BR>");
    */
    echo ('Qui dovrebbe essere stampato print_r ($line)...<BR>');
    print_r ($line);
    Non ho capito dove devo inserire mysql_error()... ad ogni modo, l'ultima riga di codice è come se non ci fosse...

    Una cosa però ho notato: se un utente NON ha messaggi privati non letti, allora nemmeno phpMyAdmin è in grado di darmi risultati (o meglio, mi scrive che la query ha restituito un insieme vuoto: com'è possibile, visto che la LEFT JOIN mi dovrebbe garantire almeno un record?). Adesso ho creato un messaggio privato non letto con "test" destinatario, vediamo cosa succede...

    EDIT: nemmeno così funziona...
    EDIT #2: le condizioni Letto e Archiviato le devo mettere nella JOIN... così c'è sempre un risultato...

    Statemi bene...
    Ultima modifica di dementialsite : 17-12-2005 alle ore 17.27.23
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  13. #13
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    (o meglio, mi scrive che la query ha restituito un insieme vuoto: com'è possibile, visto che la LEFT JOIN mi dovrebbe garantire almeno un record?)
    uhm...

    OUTER o INNER non influscono?

    /edit no niente.. specificare OUTER a parte non serve

    posta la struttura delle tabella in questione... vediamo di fare la query da zero :)
    Ultima modifica di Evcz : 17-12-2005 alle ore 17.47.22
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  14. #14
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Mi hai cambiato il messaggio mentre stavo per risponderti...

    Allora se scrivo UTENTI LEFT [OUTER] JOIN MESS_PRIVATI ON (UTENTI.NrRegistrazione = MESS_PRIVATI.Destinatario AND MESS_PRIVATI.LettoD = 0 AND MESS_PRIVATI.ArchiviatoD = 1) quello che ottengo dovrebbe essere una tabella che ha tutti i dati di UTENTI, se ci sono MESS_PRIVATI non letti (LettoD = 0) e archiviati (ArchiviatoD = 1) per un dato UTENTE vengono giustapposti, in caso contrario si riempie di valori nulli. Avessi messo INNER JOIN, invece, non avrei avuto risultati nel caso un UTENTE non avesse in archivio MESS_PRIVATI non letti. (per la cronaca, LEFT INNER JOIN non esiste).

    EDIT: Struttura delle tabelle:
    UTENTI (NrRegistrazione PRIMARY KEY, NomeUtente UNIQUE, DataRegistrazione, MessaggiInviati, Firma, TipoTag, Tag, RipristinoAccesso)
    MESS_PRIVATI (Codice PRIMARY KEY, Titolo, Testo, Invio, FirmaVisibile, Mittente REFERENCES UTENTI, ArchiviatoM, Destinatario REFERENCES UTENTI, ArchiviatoD, LettoD)

    Stammi bene...
    Ultima modifica di dementialsite : 17-12-2005 alle ore 17.54.55
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  15. #15
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    per il mysql_error() basta printarlo subito dopo una funzione mysql che si sospetta possa non andar bene, per es:

    Codice PHP:
    $result = mysql_query ($query, $db);
    echo
    "Errore numero: " . mysql_errno() . "<br/>Messaggio: " . mysql_error() . "<br/>";
    Così solo perché sospettiamo che la query non vada..
    Altrimenti lo fai condizionale, come di consueto:
    Codice PHP:
    $result = mysql_query($query, $db) or mysql_error();
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  16. #16
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Messo nella seconda maniera... nessun errore!

    Statemi bene...

    EDIT: ho risolto così, avrei preferito i gruppi di SQL ma a quanto pare gli stanno un po' indigesti...
    Codice PHP:
    $user = $_SESSION["login"];

    $query = "SELECT UTENTI.NomeUtente AS u_id, MESS_PRIVATI.Codice AS mp_codice FROM UTENTI LEFT JOIN MESS_PRIVATI ON (UTENTI.NrRegistrazione = MESS_PRIVATI.Destinatario AND MESS_PRIVATI.LettoD = 0 AND MESS_PRIVATI.ArchiviatoD = 1) WHERE UTENTI.NrRegistrazione = $user";

    $result = mysql_query ($query, $db);

    $line = mysql_fetch_array ($result);
    $ret_pm = $line["mp_codice"] == NULL ? 0 : mysql_num_rows ($result);
    $ret_user = $line["u_id"];
    Il nome utente riesco sempre a recuperarlo: ecco il perché della LEFT JOIN. Quanto al numero di messaggi, ho ripensato sempre alle specifiche della LEFT JOIN: se non ci sono messaggi rispondenti ai requisiti, allora a destra troverò NULL, altrimenti troverò per ogni utente (qui uno solo) tante righe quanti sono i messaggi privati!

    Ci sentiamo alla prossima...!
    Ultima modifica di dementialsite : 17-12-2005 alle ore 21.45.55
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

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