Generare il nome del tag ID e NAME in modo sequenziale

ypsilon86

Utente Attivo
18 Dic 2012
48
0
0
Roma
Buongiorno!
Ho un problema con la generazione del nome in modo sequenziale del tag ID e NAME.
Mi spiego meglio; partendo da un campo testo di un form, vorrei che si generi in un altra pagina, in una tabella il numero di righe esatte al cui interno avrò il campo testo con assegnato il nome + il numero.

Se inserisco nel form il numero 3, avrò nell'altra pagina tre righe, con 3 campi testo e ogni riga avrà i campi testo con assegnato il proprio name e id.

Es.
inserisco n°3:

<input type='text' id='tag' name='tag' />
<input type='text' id='tag1' name='tag1' />
<input type='text' id='tag2' name='tag2' />

Inoltre vorrei che lo script dell'head sia in grado di capire che se nel form inserisco 3, deve assegnare anche lui 3 id e 3 name, altrimenti JQuery non funziona! Forse devo modificare anche quì sopra "#tag" e "#tagid" ??? Mettendo tipo "#tag+1" e "#tagid+1"

grazie anticipatamente

Posto il codice:

prima pagina
HTML:
<body>
</form>

<form action="prova.php" method="post">
inserisci numero: <input name="testo" type="text" id="testo" size="2"/>
<input name="" type="button" value="invia"/>

</form>
</body>

seconda pagina (pagina.php)
HTML:
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/jquery-ui.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/i18n/jquery.ui.datepicker-it.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/themes/base/jquery-ui.css" type="text/css" />
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.5/themes/redmond/jquery-ui.css" type="text/css" />

<script type="text/javascript">
    $(document).ready(function() {
        $("#tag").autocomplete({
            source: "data.php",
            minLength: 2,
            focus: function( event, ui ) {
                $(this).val(ui.item.label);
                return false;
            },
            change: function(event, ui) {
                if (!ui.item) {     
                    $(this).val('');
                    $('#tagid').val('');
                    return false;
                }
            },
            select: function(event, ui) {
                $(this).val(ui.item.label);
                $('#tagid').val(ui.item.value);                
                return false;
            }
        });
	});
</script>

</head>

<body>

  <?php 
   for ($t = 0; $t < (int) $_POST['testo']; $t++) { 
    echo "<tr>"; 
    echo "<td>" . ($t+1) . "°</td>";
	echo "<td>
	<input type='text' id='tag' name='tag' /> 
              <input type='hidden' id='tagid' name='tagid' /></td>";
	echo "</tr>";
	}
  ?> 
</body>
 
ciao
se non ho capito male
PHP:
<?php 
   for ($t = 0; $t < (int) $_POST['testo']; $t++) { 
    $tag="tag".$t;//o se vuuoi partire da uno: $tag="tag".($t+1);
	echo "<tr>"; 
    echo "<td>" . ($t+1) . "°</td>";
	echo "<td>
	<input type='text' id='$tag' name='$tag' /> 
              <input type='hidden' id='tagid' name='tagid' /></td>";
	echo "</tr>";
	}
?>
poi un piccolo dubbio: con l'input type hidden si dovrebbe tramettere un valore nascosto (altrimenti a che serve), ti sei per caso dimenticato il value?
ed anche all'hidden dovresti cambiare nome perche se metti es. 3 hai sempre tre hidden che si chiamano nella stessa maniera
forse dovresti fare così
PHP:
<?php 
   for ($t = 0; $t < (int) $_POST['testo']; $t++) { 
    $tag="tag".$t;//o se vuoi partire da uno: $tag="tag".($t+1);
	$tagid=$tag="tagid".$t;//c.s.
	echo "<tr>"; 
    echo "<td>" . ($t+1) . "°</td>";
	echo "<td>
	<input type='text' id='$tag' name='$tag' /> 
              <input type='hidden' id='$tagid' name='$tagid' value='".($t+1)."'/></td>";
	echo "</tr>";
	}
?>
 
Ciao Borgo,

Secondo te devo cambiare anche lo script contenuto nell'head?? altrimenti mi funziona solo nel primo campo testo e non in quelli sotto

(il type hidden serve per l'Accordion jQuery che fa riferimento a una pagina "data.php" che non si vede

data.php ->

PHP:
<?php
//creo un array vuoto
$return_arr = array();

//dati di accesso
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$dbname = 'db_sito';

//connessione a mysql
$conn = mysql_connect($dbhost, $dbuser, $dbpass)
or die ('Impossibile connettersi a Mysql');
//selezione ddb
mysql_select_db($dbname);

//se connesso
if ($conn) {
    //se è presente il valore term
    if (isset($_GET) && isset($_GET['term']) && !empty($_GET['term'])) {
        $term = $_GET['term'];
        //eseguo la query
        $query = "SELECT * FROM clienti WHERE nome LIKE '%{$term}%' ";
        $query .= "ORDER BY nome ASC ";
        $fetch = mysql_query($query);
        //mi costruisco l'array
        while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
            $row_array['label'] = $row['nome'];
            $row_array['value'] = $row['id_cliente'];
            array_push($return_arr, $row_array);
        }
    }
}
//chiudo la connessione a mysql
mysql_close($conn);

//restituisco l'array in formato json
echo json_encode($return_arr);
?>
 
ciao
non sono molto esperto in js (quindi ajax, jquerry e similaria) però ad occhio e croce qui
$("#tag")...
operi sull'id chiamato tag ma dovresti (penso) operare su
$("#tag0")
$("#tag1")
$("#tag2")....
non so esattamente come tu possa fare, me nel poco di js che adopero, quendo serve, lo rendo dinamico facendolo stampare da php

a titolo di esempio (ma non so se funzia)

PHP:
<script type="text/javascript">
    $(document).ready(function() {
<?php        
for ($t = 0; $t < (int) $_POST['testo']; $t++) {
		$tag="#tag".$t;
echo <<<EOD
		$("$tag").autocomplete({
            source: "data.php",
            minLength: 2,
            focus: function( event, ui ) {
                $(this).val(ui.item.label);
                return false;
            },
EOD;
}
?>
//eccc........
</script>

come detto però questo è un mio ragionamento "a lume di naso", quindi spera che qualche esperto di jq ti sappia dire qualcosa di meglio
 
Per non ripetere sempre la stessa parte di codice, potresti fare una funzione e metterla nell'evento onfocus quando stampi i campi text,e nella funzione gli passi l'id

Codice:
<script type="text/javascript">
function auto_complete(id){
    $(document).ready(function() {
        $(id).autocomplete({
            source: "data.php",
            minLength: 2,
            focus: function( event, ui ) {
                $(this).val(ui.item.label);
                return false;
            },
            change: function(event, ui) {
                if (!ui.item) {     
                    $(this).val('');
                    $('#tagid').val('');
                    return false;
                }
            },
            select: function(event, ui) {
                $(this).val(ui.item.label);
                $('#tagid').val(ui.item.value);                
                return false;
            }
        });
	});
}
</script>

PHP:
   for ($t = 0; $t < (int) $_POST['testo']; $t++) {  
    $tag="tag".$t;//o se vuuoi partire da uno: $tag="tag".($t+1); 
    echo "<tr>";  
    echo "<td>" . ($t+1) . "°</td>"; 
    echo "<td> 
    <input type='text' id='$tag' name='$tag' onfocus='auto_complete($tag)' />  
              <input type='hidden' id='tagid' name='tagid' /></td>"; 
    echo "</tr>"; 
    }

ps: non ho testato quindi non sono certo che possa andar bene
 
Grazie Nefyt, ho seguito il tuo consiglio e con l'onfocus sembra funzionare tutto! Finisco di aggiustare le ultime cose e lo riprovo ma credo sia corretto! Grazie Ancora :fonzie:
 
ciao
piccola osservazione da gnurant
non dovrebbe essere

PHP:
 echo "<td> 
    <input type='text' id='$tag' name='$tag' onfocus='auto_complete('#'.$tag)' />  
              <input type='hidden' id='tagid' name='tagid' /></td>"; 
    echo "</tr>"; 
    }
cioè aggiungere il simbolo dell'id?
 
ciao
piccola osservazione da gnurant
non dovrebbe essere

PHP:
 echo "<td> 
    <input type='text' id='$tag' name='$tag' onfocus='auto_complete('#'.$tag)' />  
              <input type='hidden' id='tagid' name='tagid' /></td>"; 
    echo "</tr>"; 
    }
cioè aggiungere il simbolo dell'id?
Si infatti, me lo ero dimenticato, ma invece di ristamparlo ogni volta basta metterlo qui

Codice:
$('#'+id).autocomplete({

all'inizio dell'autocomplete
 
Ragazzi volevo dire che l'Autocomplete mi funziona col codice postato inizialmente postato da Nefyt, vale a dire:

HTML:
<script type="text/javascript">
function auto_complete(id){
    $(document).ready(function() {
        $(id).autocomplete({
            source: "data.php",
            minLength: 2,
            focus: function( event, ui ) {
                $(this).val(ui.item.label);
                return false;
            },
            change: function(event, ui) {
                if (!ui.item) {     
                    $(this).val('');
                    $('#tagid').val('');
                    return false;
                }
            },
            select: function(event, ui) {
                $(this).val(ui.item.label);
                $('#tagid').val(ui.item.value);                
                return false;
            }
        });
	});
}
</script>

PHP:
<?php
  for ($t = 0; $t < (int) $_POST['testo']; $t++) {
  $tag="tag".$t;
    echo "<tr>"; 
    echo "<td>" . ($t+1) . "°</td>";  
    echo "<td>
    <input type='text' id='$tag' name='$tag' onfocus='auto_complete($tag)'/>
    <input type='hidden' id='tagid' name='tagid' /></td>";
    echo "<td><input type='text' name='t" . $t . "'/></td>"; 
    echo "</tr>"; 
}
?>
    <?php
  for ($c = 0; $c < (int) $_POST['testo1']; $c++) { 
    $tag="tag".$c;
    echo "<tr>"; 
    echo "<td>" . ($c+1) . "°</td>"; 
    echo "<td><input type='text' id='$tag' name='$tag' onfocus='auto_complete($tag)'/>
    <input type='hidden' id='tagid' name='tagid' /></td>";
    echo "<td><input type='text' name='c" . $c . "'/></td>"; 
    echo "</tr>"; 
}
?>

Se vado a modificare lo script inserendo "#" davanti l'id non funge più!
HTML:
$('#'+id).autocomplete({

Ho lasciato invariato anche -> onfocus='auto_complete($tag)' non ho inserito -> ('#'.$tag)'
 
Se volessi inserire un menù a tendina con dei giudizi al posto del campo testo che sta nella seconda colonna di ogni riga?

PHP:
echo "<tr>";  
    echo "<td>" . ($t+1) . "°</td>";   
    echo "<td> 
    <input type='text' id='$tag' name='$tag' onfocus='auto_complete($tag)'/> 
    <input type='hidden' id='tagid' name='tagid' /></td>"; 
    echo "<td><input type='text' name='t" . $t . "'/></td>";  
    echo "</tr>";


Ho provato a fare così:

PHP:
echo "<td><select name='valutazione'><option>eccellente</option></td>";

come aggiungo altri giudizi oltre "eccellente"?
 
Se volessi inserire un menù a tendina con dei giudizi al posto del campo testo che sta nella seconda colonna di ogni riga?

PHP:
echo "<tr>";  
    echo "<td>" . ($t+1) . "°</td>";   
    echo "<td> 
    <input type='text' id='$tag' name='$tag' onfocus='auto_complete($tag)'/> 
    <input type='hidden' id='tagid' name='tagid' /></td>"; 
    echo "<td><input type='text' name='t" . $t . "'/></td>";  
    echo "</tr>";


Ho provato a fare così:

PHP:
echo "<td><select name='valutazione'><option>eccellente</option></td>";

come aggiungo altri giudizi oltre "eccellente"?

Dovresti aggiungere altre option
Codice:
<select name='valutazione'>
<option>eccellente</option>
<option>buono</option>
<option>normale</option>
<option>pessimo</option>
</select>

Se più avanti dovrai leggere i valori inviati di questo select, setta il value nelle option
Codice:
<option value='eccellente'>eccellente</option>
 
Nefyt si può far in modo che una volta scelto il giudizio dal menù a tendina, venga stampato di un colore che scelgo io? Dovrò mettere codice php nella pagina dove stampo? Se si mi potresti suggerire come fare?
 
Nefyt si può far in modo che una volta scelto il giudizio dal menù a tendina, venga stampato di un colore che scelgo io? Dovrò mettere codice php nella pagina dove stampo? Se si mi potresti suggerire come fare?
Lo puoi fare da css tramite il tag color del testo nello style dell'elemento o creando una classe per esso nel css



Se intendi gestire il risultato, fai una cosa simile creando un div o una classe con stile del testo diverso a seconda del risultato

es.
PHP:
switch($voto){
   case 'voto1':
      $colore='red';
       break;
    case 'voto2':
       $colore='green';
        break;

//e cosi via magari aggiungendo anche un colore di default nello switch
}

echo "<div style='color:$colore;'>$voto</div>";
 
Ultima modifica:

Discussioni simili