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

    La query è stranissima e il codice non va

    Il titolo di questo topic è stato molto difficile da scegliere..

    Il mio problema è semplice..

    Ho creato uno script per una chat di un gdr che deve mostrare in chat oltre al nome i simboli, la data, e il nome del PG (e naturalmente il messaggio).

    Lo script non restituisce errori.

    Ho provato su phpMyAdmin ad eseguire la query e funzia..

    Però quando lo mando in esecuzione non restituisce nessun messaggio.. pikkè?

    Grazie.. vi posto il codice..


    Codice PHP:
    <?
    session_start
    ();

    include(
    '../inc/db.php');
    include(
    '../inc/sessioni.php');
    include(
    '../inc/refresh.php');

    $_SESSION['Luogo'] = $_GET['stanza'];
    ?>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <meta HTTP-EQUIV="Refresh" CONTENT="10" >
    <link rel="stylesheet" href="../stile.css" type="text/css">
    <title>ChatMainFrame</title>
    </head>

    <body topmargin="5" bottommargin="5" leftmargin="5" rightmargin="5">
    <table width="90%" height="100%"  border="0" align="center" cellpadding="1" cellspacing="0">
      <tr>
        <td valign="top">
            <table width='100%'  border='0' cellspacing='0' cellpadding='0'><tr>
        <?
        $sql 
    mysql_query("SELECT Personaggio.Anno AS Y, Personaggio.Casa AS Casata, Personaggio.Ruolo AS Ruo, Personaggio.Razza, Personaggio.Sesso, Chat.* FROM Chat INNER JOIN Personaggio ON Chat.Username = Personaggio.Username WHERE Chat.Stanza = '$_POST[stanza]' ORDER BY Chat.ID DESC;") or die("Errore MySQL. Avvisare il Preside con il seguente testo: -> ".mysql_error()); //Capienza messaggi
            
    while ($row=mysql_fetch_array($sql))
            {
            
            
    $ID $row["Chat.ID"];
            
    $username $row["Chat.Username"];
            
    $mess $row["Chat.Messaggio"];
            
    $data $row["Chat.Data"];
            
    $sesso $row["Sex"];
            
    $tipo $row["Chat.Tipo"];
            
    $ruo $row["Ruo"];
            
    $anno $row["Y"];
            
    $casa $row["Casata"];
            
            if (
    $tipo=="Messaggio"){
            
    ?>
          <?
            
            
    switch($casa)
            {
                case 
    1$cassa "Grifondoro"$immac "../img/All/Grifondoro.gif"; break;
                case 
    2$cassa "Tassorosso"$immac "../img/All/Tassorosso.gif"; break;
                case 
    3$cassa "Corvonero"$immac "../img/All/Corvonero.gif"; break;
                case 
    4$cassa "Serpeverde"$immac "../img/All/Serpeverde.gif"; break;
            }
            
            switch(
    $ruo)
              {
            
    //Preside Vice_Preside Docente Supplente Caposcuola Prefetto Studente
                
    case 1$im "Preside.gif"; break;
                case 
    2$im ""; break;
                case 
    3: if($_SESSION['Sesso']=='M'$im "Professore.gif"; else $im "Professore.gif"; break;
                case 
    4$im ""; break;
                case 
    5$im "Prefetto.gif"; break;
                case 
    6: if($_SESSION['Sesso']=='M'$im "Prefetto.gif"; else $im "Prefetta.gif"; break;
                case 
    7: if($_SESSION['Sesso']=='M'$im "Studente.gif"; else $im "Studentessa.gif"; break;
                case 
    8$im "Quidditch.jpg"; break;
              }
            
          switch(
    $anno)
          {
                case 
    1$col "Stile14"; break;
                case 
    2$col "Stile15"; break;
                case 
    3$col "Stile16"; break;
                case 
    4$col "Stile17"; break;
                case 
    5$col "Stile18"; break;
                case 
    6$col "Stile19"; break;
                case 
    7$col "Stile20"; break;
          }
            
            
    ?>
            <td valign='top' class='ChatMsgB'><?=$username?></td>
            <? if($sesso 'M') { ?>
            <td valign='top' class='ChatMsgB'>[img]../img/All/Maschi.gif[/img] : [img]<?=$imgc?>[/img]'> : [img]<?=$im?>[/img] : <div align="center" class="<?=$col?>"><?=$anno?></div></td>
            <? }else{ ?>
            <td valign='top' class='ChatMsgB'>[img]../img/All/Femmine.gif[/img] : [img]<?=$imgc?>[/img]'> : [img]<?=$im?>[/img] : <div align="center" class="<?=$col?>"><?=$anno?></div></td>
            <? ?>
            <td valign='top' class='ChatMsgB'><?=$data?>:</td>
            <td width='100%' valign='top' class='ChatMsg'><?=$messaggio?></td> <? ?>
            </tr>
            </table>
     <? ?>
        </td>
      </tr>
    </table>
    </body>
    </html>

  2. #2
    premetto che non ci sono problemi di connessione..

    o di inclusione file.

  3. #3
    nel result set che scorri con il while non esiste il riferimento alle tabelle.

    quindi: $row['ID'] e non $row['Chat.ID'] e gli altri a seguire.

    e occhio che l'indice associativo di $row e' case sensitive.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    ho fatto le relative modifiche ma non fnzia lo stesso

    non restituisce nulla

  5. #5
    Originariamente inviato da SergiusXP
    ho fatto le relative modifiche ma non fnzia lo stesso

    non restituisce nulla
    verifica bene il tuo script. Con tutti quegli switch dentro al while lo sai solo tu cosa dovrebbe stampare. tieni poi anche presente che $casa e' diverso da $cassa ....

    altro suggerimento: usa il tag php esteso. <?php e <?php echo

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    il fatto e' abb semplice.
    Stai usando degli alias sulla query e quindi devi usareli anche per gestire i dati nell'array.

    per sempio se fai

    select p.id as pid , p.nome as pnome from prodotti p ;

    i campi nell'array poi saranno

    [pid][pnome]
    e NON
    [id][nome]
    Quindi essendo la tua query

    SELECT Personaggio.Anno AS Y, Personaggio.Casa AS Casata, Personaggio.Ruolo AS Ruo, Personaggio.Razza, Personaggio.Sesso, Chat.* FROM Chat INNER JOIN Personaggio ON Chat.Username = Personaggio.Username WHERE Chat.Stanza = '$_POST[stanza]' ORDER BY Chat.ID DESC;


    e il codice

    $ID = $row["Chat.ID"];
    $username = $row["Chat.Username"];
    $mess = $row["Chat.Messaggio"];
    $data = $row["Chat.Data"];
    $sesso = $row["Sex"];
    $tipo = $row["Chat.Tipo"];
    $ruo = $row["Ruo"];
    $anno = $row["Y"];
    $casa = $row["Casata"];

    usando la join vai a generare una tabella dove le colonne potrebbero avere nomi ambigui.
    La soluzione e' scorrere le colonne con gli indici invece che con i nomi oppure esplicitare tutte le colonne che cerchi e assegnarli un alias univoco.

    Inoltre devi essere sicuro che la join funzioni.
    Io solitamente consiglio l'uso di join solo se nn c'e' altra soluzionie anche perche le select sono piu' veloci.

    Puoi anche evitare di usare as se nn lo metti la creazione dell'alias e' automatica se ci metti una stringa dopo.

    Cmq diamo un occhio alla query

    SELECT
    Personaggio.Anno AS Y,
    Personaggio.Casa AS Casata,
    Personaggio.Ruolo AS Ruo,
    Personaggio.Razza,
    Personaggio.Sesso,

    Chat.*
    -- discutibile perche' devi essere sicuro che i nomi delle colonne non si sovrappongano a quelli gia' usati. E' buona norma esplicitarli sopprattutto se unisci piu' tabelle diverse


    FROM Chat

    INNER JOIN Personaggio ON Chat.Username = Personaggio.Username
    -- Questa nn la capisco scusa la tabella chat ha una colonna username con lo stesso valore della colonna username della tabella personaggio? Usi come chiave primaria lo username?
    Hai la tabella chat con colonna stanza e username. Vuol dire che tutte le discussioni finiscono la dentro e vengono recuperate in base a quelle due colonne?

    WHERE Chat.Stanza = '$_POST[stanza]'

    ORDER BY Chat.ID DESC;
    Occhio al fatto che i campi sono case sensitive ID!=id


    IO cmq ti consiglio una soluzione a select

    SELECT
    p.Anno AS Y,
    p.Casa AS Casata,
    p.Ruolo AS Ruo,
    p.Razza,
    p.Sesso,
    c.*

    from
    Chat c , Personaggio p

    where
    c.Username = p.Username
    AND
    c.Stanza = '$_POST[stanza]'

    ORDER BY
    c.ID DESC;

    Questa fa la stessa estrapolazione senza join.
    Le select possono essere effettuate su tutte le tabelle che volete a patto si usare degli alias opportuni. Potete anche usare sottoselect per filtrare i risultati.

    Ultima nota

    while ($row=mysql_fetch_array($sql))
    {
    /*prova a fare questo per debug*/
    echo var_dump($row);
    }

  7. #7
    Grazie mille a tutti. Ho riscritto il codice seguendo gli importanti suggerimenti Virus_101 ed ora funziona!!

    Grazie ancora,

    Sergio

  8. #8
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    ^_^ bella li !!!

    Ora vai a scassa tutto

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 © 2024 vBulletin Solutions, Inc. All rights reserved.