valori nella tabella non riconosciuti da javascript se provengono da data base.

giuseppeI

Utente Attivo
25 Giu 2012
41
0
0
HTML:
<div style="height: 400px; overflow: scroll;"><table id='tabella'></br><thead></thead><tbody><tr><td>0++</td><td>(v.)</td><td>badare</td><td>perché 0</td></tr><tr><td>1++</td><td>
( v.)</td><td>
abitare</td><td>perché 1</td></tr><tr><td>2++</td><td>
(v. t.)</td><td>
distendere</td><td>perché 2</td></tr><tr><td>3++</td><td>
(v.)</td><td>
distendersi</td><td>perché 3</td></tr><tr><td>4++</td><td>

Questo codice è generato da:

PHP:
$conta=0;           
                    foreach($grico as $col_rigo){
                      
                                   echo "<tr><td>$conta++</td><td>$tipo[$conta]</td><td>$italiano[$conta]</td><td>perché $conta</td></tr>";                   
                                   $conta++; 
                      }

che genera una tabella di quattro colonne di cui quelle esterne sono popolate con valori "interni", mentre quelle esterne con valori estratti da un data base.

Il risultato nell'apparenza è quello che ci si aspetta: la costruzione della tabella con i relativi valori. Tuttavia se si va a guardare il codice html generato si nota che tranne per il primo record (riga) i valori prelevati dal data base non si trovano tra i tag <td> </td> (dopo <td> il codice va a capo).
Il problema è il seguente: i valori delle celle intercettate con java script:

HTML:
 var table = document.getElementById(id_table);
	var n_colonne = table.getElementsByTagName('th').length;
	var celle = table.getElementsByTagName('td');

se si trovano tra i tag "<td>perché 1</td>" vengono riconosciuti, se invece si trovano tra i tag "... td>
( v.)</td><td>
abitare</td> ..."
i valori delle celle non vengono riconosciuti.
Come si può ovviare? ovvero come posso risolvere questo problema?
Chiedo aiuto!!
Grazie
 
Ciao,
devi mettere gli apici nel modo corretto
prova cosi
PHP:
echo "<tr><td>" . ($conta++) . "</td><td>" . $tipo[$conta] . "</td><td>" . $italiano[$conta] . "</td><td>perché $conta</td></tr>";
ti sposto in php
 
Niente da fare, il risultato è lo stesso, ovvero funziona soltanto con il primo record.
 
allora non ho capito il tuo problema
ho provato la tua tabella in questo modo
HTML:
<table id='tabella'>
    <thead>

    </thead>
    <tbody>
        <tr>
            <td>0++</td>
            <td>(v.)</td>
            <td>badare</td>
            <td>perché 0</td>
        </tr>
        <tr>
            <td>1++</td>
            <td>
                ( v.)</td><td>
                abitare</td><td>perché 1</td>
        </tr><tr>
            <td>2++</td><td>
                (v. t.)</td><td>
                distendere</td><td>perché 2</td></tr>
        <tr><td>3++</td><td>
                (v.)</td><td>
                distendersi</td><td>perché 3</td></tr>
        <tr><td>4++</td><td></tr>
</table>
<script>
    var table = document.getElementById("tabella");
    var n_colonne = table.getElementsByTagName('th').length;
    var celle = table.getElementsByTagName('td');
    for(var i=0; i<celle.length;i++) {
        alert(celle[i].innerHTML);
    }
</script>
nel ciclo accedo a tutti i valori delle td
 
Premetto che il codice js di 'cercaInTable2.js' l'ho recuperata in rete.
Questa la funzione che ricerca il valore:

HTML:
FUNZIONE PER RICERCA IN SINGOLA COLONNA DI TABELLA
function ricercaInCol(id_table,colonna){
	ripristinaTable(id_table);
	var valore = document.ricerca.campo.value;
	var table = document.getElementById(id_table);
	var n_colonne = table.getElementsByTagName('th').length;
	var celle = table.getElementsByTagName('td');
	var contatore = 0;
	for(var j=(colonna-1); j<celle.length; j=(j+n_colonne)){
//document.write(celle[j].innerHTML + " - " + valore);
		if(celle[j].innerHTML == valore){
			celle[j].className='trovato';
			contatore++;
		}
	}
	document.getElementById('responso').innerHTML='Trovati: '+contatore;
}


Non riesco capire perché non gira in quanto "celle[j].innerHTML" contiene il valore da controllare.
e lo si può verificare con //document.write(celle[j].innerHTML + " - " + valore);


Il codice genera una tabella di quattro colonne. Nelle prime tre colonne i dati sono prelevati da un data base, la quarta è di prova (i dati non provengono dal data base). Il programma funziona soltanto con la prima riga per quanto riguarda i valori del data base, mentre funziona per tutta la quarta colonna (colonna di prova).
PHP:
<!DOCTYPE html>

<html>
<head>
   

       <script type='text/javascript' src='cercaInTable2.js'></script>
	<link rel="stylesheet" type="text/css" href="stili/stile.css" />
</head>

<body>
   <?php
            $conn=mysql_connect("localhost","root","");
            if (!$conn)
                {
                echo "(connessione fallita, riprova)";
                }
            else
            {
                if (!mysql_selectdb ("grico"))
                    {echo"connessione non riuscita, riprova!";}
                        else 
                        {
                           $sql="select * from verbi";
                           $result= mysql_query($sql);
                                    if (mysql_num_rows($result)>0)
                                      {$dati=mysql_fetch_assoc($result);
                                       $Grico=$dati["grico"];
                                       $Tipo=$dati["tipo"];
                                       $Italiano=$dati["italiano"];
                                       $Note=$dati["note"];
                                       $italiano = explode ( "\r", $Italiano);
                                       $grico=explode ( "\r", $Grico);
                                       $tipo=explode ( "\r", $Tipo);
                                       $note=explode ( "\r", $Note);         
                                   }  
                        }
         
            }
         
         //*********************************************
            echo  '<div style="height: 400px; overflow: scroll;">';
            echo  '<h1>Ricerca in tabella html</h1>';
            echo  "<table id='tabella'>";
            echo'</br>';
            echo  '<thead>';
                        echo  "<tr><th class='intestazione'>da data base</th><th class='intestazione'>da data base</th><th class='intestazione'> data base</th><th class='intestazione'>programma</th></tr>";
            echo  '</thead>';
            echo  '<tbody>';
            $conta=0;
            foreach($grico as $col_rigo){
                              
                                  echo "<tr><td>$col_rigo</td><td>$tipo[$conta]</td><td>$italiano[$conta]</td><td>perché $conta</td></tr>";
                                 
                                  $conta++; 
              }
                         
            echo  '</tbody>';
            echo  '</table>';
            echo  '</div>';
   ?>
  
<script type='text/javascript'>
ripristinaTable('tabella');
</script>

<br/><br/>

<form name='ricerca'>
Valore da cercare in tutta la tabella: <input type='text' size='10' name='campo'/>
<input type='button' value='Cerca in tabella' onClick="ricercaInTable('tabella')"/>
<input type='button' value='Cerca nella colonna italiano' onClick="ricercaInCol('tabella',3)"/>
<span id='responso'></span>
</form>

</body>
</html>


questi i valori che si ottengono con document.write in
(celle[j].innerHTML + " - " + valore);

inserendo il valore della prima riga (valore badare):
badare - badare abitare - badare distendere - badare distendersi - badare bruciare - badare ......

questo inserendo la seconda riga (abitare):
badare - abitare abitare - abitare distendere - abitare distendersi - abitare bruciare ......

Come si vede nell'apparenza non ci sono differenze, nella realtà funziona soltanto con il primo valore.
Non ci sono problemi, come detto, con la quarta colonna (valori che non provengono dal data base)

Spero di essere stato chiaro
Ti ringrazio dell'attenzione e della disponibilità
Giuseppe
 

Discussioni simili