Selezionare un campo alla volta su un ciclo while

macchiavelli.ivan

Utente Attivo
7 Dic 2012
67
0
0
Salve mi sono impantanato in questo dilemma.

Volevo sapere come si fa a richiamare il campo "nome , cognome e citta" in cui l'utente inserirà i dati in input type="text" per inserirlo nel database.
Ps: la tabella è un form e alla fine ce un imput di invio.

Mi spiego meglio:
Ho preso dei dati dal database e li ho listati in una tabella html così:

PHP:
                  <?php
                                include "config.php";
                                    connettiDb();
                $sql="select * from maestri where sesso='uomo'";
                 $dati=mysql_query($sql);
                  while($row=mysql_fetch_array($dati)) { 
                  echo '<td>' . $row [nome] . ' ' . $row [cognome] . '</br></td>
                  <td>' . $row [citta] . '<br />
                    </td>
                  <td><input type="text" name="n_lez1" maxlength="3" size="3" /><br />
                    </td>
                    <td><a href="modify.php?id=' . $row['id'] . '">[modifica]</a></td>
					<td><a href="delete.php?id=' . $row['id'] . '">[cancella]</a></td>
                  </tr>';
                   }
                    ?>

Se notate ho inserito anche:
HTML:
<input type="text" name="n_lez1" maxlength="3" size="3" />
Sarà li che l'utente potrà inserire i valori.
Grazie mille.
 
ciao
non so se hai postato tutto il codice, perchè visto così mi sembra un cas..o.
da quello che ho capito tu vorresti elencare l'elenco dei maestri e modificare quanto inserisci nel campo test o eliminare il record
giusto?
 
Il codice era troppo lungo da postare.

In pratica quando l'utente inserisce dei numeri in uno dei campi
HTML:
<input type="text" name="n_lez1" maxlength="3" size="3" />
che vengono generati dal ciclo, e poi clicca invio. Viene inserito quel numero in una tabella sul database.

Ma non so come richiamare i vari campi
 
ciao
quello che non capisco allora sono quei due link [modifica] e [cancella] se ci clicchi sopra vai alle relative pagine, ma non puoi trasmettere il valore del campo "n_lez1".
trasmetti solo quello che c'è nella querystringa ?id=' . $row['id']
se invece il campo è inserito in un form (come dovrebbe essere) quando dai il submit trasmetti il valore del campo ma non i valori dei link.
a mio parere dovresti ripensare il tutto
 
[modifica] e [cancella] non centrano, quelli servono a modificare il nome cognome e citta dei singoli valori in lista e tutta la tabella e inclusa in un form.

Sono d'accordo su quello che hai detto tu infatti non funziona :beer:
La mia domanda era se ce un modo tramite n_lez1 di
HTML:
<input type="text" name="n_lez1" maxlength="3" size="3" />
per poter inserire in una tabella nel db i valori che inserisce l'utente e i rispettivi campi del ciclo.
Non so se ho spiegato bene quindi inserisco tutto il codice così si capisce meglio.

PHP:
            <form name="modulo" id="modulo" method="post" action="">
              <p><br />
              </p>
              <p><br />
              </p>
              <p><br />
              </p>
              <p>Year*
                <select name="year">
                  <option>2012</option>
                  <option>2013</option>
                  <option>2014</option>
                  <option>2015</option>
                  <option>2016</option>
                  <option>2017</option>
                  <option>2018</option>
                  <option>2019</option>
                  <option>2020</option>
                  <option>2021</option>
                  <option>2022</option>
                  <option>2023</option>
                  <option>2024</option>
                  <option>2025</option>
                  <option>2026</option>
                  <option>2027</option>
                  <option>2028</option>
                  <option>2029</option>
                  <option>2030</option>
                  <option>2031</option>
                  <option>2032</option>
                  <option>2033</option>
                  <option>2034</option>
                  <option>2035</option>
                  <option>2036</option>
                  <option>2037</option>
                  <option>2038</option>
                  <option>2039</option>
                  <option>2040</option>
                  <option>2041</option>
                  <option>2042</option>
                  <option>2043</option>
                  <option>2044</option>
                  <option>2045</option>
                  <option>2046</option>
                  <option>2047</option>
                  <option>2048</option>
                  <option>2049</option>
                  <option>2050</option>
                  <option>2051</option>
                  <option>2052</option>
                  <option>2053</option>
                  <option>2054</option>
                  <option>2055</option>
                  <option>2056</option>
                  <option>2057</option>
                  <option>2058</option>
                  <option>2059</option>
                  <option>2060</option>
                  <option>2061</option>
                  <option>2062</option>
                  <option>2063</option>
                  <option>2064</option>
                  <option></option>
                </select>
                *** *** *** *** Week N°
                <select name="week">
                  <option>1</option>
                  <option>2</option>
                  <option>3</option>
                  <option>4</option>
                  <option>5</option>
                  <option>6</option>
                  <option>7</option>
                  <option>8</option>
                  <option>9</option>
                  <option>10</option>
                  <option>11</option>
                  <option>12</option>
                  <option>13</option>
                  <option>14</option>
                  <option>15</option>
                  <option>16</option>
                  <option>17</option>
                  <option>18</option>
                  <option>19</option>
                  <option>20</option>
                  <option>21</option>
                  <option>22</option>
                  <option>23</option>
                  <option>24</option>
                  <option>25</option>
                  <option>26</option>
                  <option>27</option>
                  <option>28</option>
                  <option>29</option>
                  <option>30</option>
                  <option>31</option>
                  <option>32</option>
                  <option>33</option>
                  <option>34</option>
                  <option>35</option>
                  <option>36</option>
                  <option>37</option>
                  <option>38</option>
                  <option>39</option>
                  <option>40</option>
                  <option>41</option>
                  <option>42</option>
                  <option>43</option>
                  <option>44</option>
                  <option>45</option>
                  <option>46</option>
                  <option>47</option>
                  <option>48</option>
                  <option>49</option>
                  <option>50</option>
                  <option>51</option>
                  <option>52</option>
                  <option>53</option>
                  <option></option>
                </select>
              </p>
              <p></p>
              <table width="100%" height="100%" border="1">
                <tbody>
                  <tr align="center">
                  <td rowspan="1" colspan="5"><address><h2><b>Uomini</b></h2></address></td>
                  </tr>
                  <tr>
                    <td><i><b>Nome</b></i></td>
                    <td><i><b>Scuola</b></i><br />
                    </td>
                    <td><i><b>N°</b></i><br />
                    </td>
                    <td><i><b>Mod.</b></i><br />
                    </td>
                    <td><i><b>Canc.</b></i><br />
                    </td>
                    </tr>
                  <tr>
                  <?php
                                include "config.php";
                                    connettiDb();
                $sql="select * from maestri where sesso='uomo'";
                 $dati=mysql_query($sql);
                  while($row=mysql_fetch_array($dati)) { 
                  echo '<td>' . $row [nome] . ' ' . $row [cognome] . '</br></td>
                  <td>' . $row [citta] . '<br />
                    </td>
                  <td><input type="text" name="n_lez1" maxlength="3" size="3" /><br />
                    </td>
                    <td><a href="modify.php?id=' . $row['id'] . '" alt="Modifica" title="Modifica">[Mod.]</a></td>
					<td><a href="delete.php?id=' . $row['id'] . '" alt="Cancella" title="Cancella">[Canc.]</a></td>
                  </tr>';
                   }
                    ?>
                </tbody>
              </table>
              <p></p>
              <p><br />
              </p>
              <p><br />
              </p>
              <table width="100%" height="100%" border="1">
                <tbody>
                  <tr align="center">
                    <td rowspan="1" colspan="5"><address><h2><b>Donne</b></h2></address></td>
                  </tr>
                  <tr>
                    <td><i><b>Nome</b></i></td>
                    <td><i><b>Scuola</b></i><br />
                    </td>
                    <td><i><b>N°</b></i><br />
                    </td>
                    <td><i><b>Mod.</b></i><br />
                    </td>
                    <td><i><b>Canc.</b></i><br />
                    </td>
                    </tr>
                  <tr>
                  <?php
                $sql="select * from maestri where sesso='donna'";
                 $dati=mysql_query($sql);
                  while($row=mysql_fetch_array($dati)) { 
                  echo '<td>' . $row [nome] . ' ' . $row [cognome] . '</br></td>
                  <td>' . $row [citta] . '<br />
                    </td>
                  <td><input type="text" name="n_lez2" maxlength="3" size="3" /><br />
                    </td>
                    <td><a href="modify.php?id=' . $row['id'] . '" alt="Modifica" title="Modifica">[Mod.]</a></td>
					<td><a href="delete.php?id=' . $row['id'] . '" alt="Cancella" title="Cancella">[Canc.]</a></td>
                  </tr>';
                   }
                   ?>
                </tbody>
              </table>
              <br />
              <p><input type="submit" name="Aggiungi" value="Aggiungi" /></p>
              <p></p>
            </form>
            <?php
            /* QUESTO è SOLO UN TENTATIVO...

if($_POST ['aggiungi'])
            {
            	if ($lez_u = $_POST ['n_lez1'] >= 0)
            	{
            		mysql_query ("INSERT INTO lezioni (nome , cognome, citta, week, anno, lez) VALUES ('$nome' , '$cognome' , '$scuola' , '$sesso') ");
        	echo '....';
            		}
            	}*/
            ?>
 
Ultima modifica:
ciao
scusa una cosa vedo dove dici "questo è un tentativo" dove immagino che tu voglia inserire nel db i dati dal form
1)
if ($lez_u = $_POST ['n_lez1'] >= 0) ?? è un controllo che non vale nulla prova queste righe
PHP:
<?php
$str="AA";
if($str >= 0){
	echo "valore maggiore di zero<br>";//nel tuo caso sbagliato
}else{
	echo "valore minore di zero<br>";
}
//quello giusto è
if(is_int($str)){
	echo "valore è un numero intero<br>";
}else{
	echo "valore NON è un numero intero<br>";
}
?>

2)
fai (tenti di fare) la query
PHP:
mysql_query ("INSERT INTO lezioni (nome , cognome, citta, week, anno, lez) VALUES ('$nome' , '$cognome' , '$scuola' , '$sesso') ");
ma le variabili '$nome' , '$cognome' , '$scuola' , '$sesso' da dove saltano fuori?
poi dichiari 6 nomi di campi e inserisci solo 4 valori?
 
Ultima modifica:
Si infatti è proprio li che mi sono impantanato. non riesco a costruire un condizione per la quale l'utente, inserendo i valori nelle varie righe dell'
HTML:
<input type="text" name="n_lez2" maxlength="3" size="3" /><br />
possa permettere di inserire nel db i dati corrispondenti alla riga in qui ha digitato il valore.
 
ciao
comincio a capire cosa stai cercando di fare, provo a dirlo
hai una tabella docenti col nome...ecc dei docenti e vorresti che il docente "pinco" cliccando sul suo nome (o tu) possa modificare (o eliminare) il/i sui/suoi record nella tabella lezioni
è così?
se è così stai sbagliando strada e spero che nella tabella lezioni tu abbia il campo id_docente (o come l'hai chiamato) che collega il/i record della tabella lezioni al docente
 
:) non precisamente.

Allora: I link [Modifica][Cancella] Toglili. Non servono a nulla. O meglio servono ad altro.

Schermata 12-2456269 alle 19.41.47.jpg

Ecco come si presenta la tabella e come vedi ce un campo dove si può digitare qualcosa. quel campo serve ad inserire il numero di lezioni settimanali del docente in questione. Più in giù ce un pulsante aggiungi.
L'idea è che quando la persona scrive il numero di lezioni che hanno fatto i vari insegnanti e poi prema invio, venga registrato tutto nel database: nome , cognome, citta, week, anno e ovviamente il famoso numero di lezioni.
Solo che, come faccio a dirgli tizio caio di firenze nel 2012 alla settimana numero 50 ha fatto 80 lezioni? Ecco dove sono impantanato.

Si capisce meglio adesso?
 
ciao
viste.
però non vedo nella tabella lezioni cosa la lega a maestri, come fai a modificare/eliminare un record di pinco se non c'è un legame tra le due?
posta il dump di lezioni (nell'mp cosa è il dump)
 
-- Struttura della tabella `lezioni`
--

CREATE TABLE IF NOT EXISTS `lezioni` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`week` int(2) NOT NULL,
`anno` year(4) NOT NULL,
`lez` int(3) NOT NULL,
`citta` varchar(30) NOT NULL,
`nome` varchar(20) NOT NULL,
`cognome` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------
Per modificare o eliminare lo si fa dalla tabella maestri. [Modifica] [Elimina] sono riferiti a alla tabella maestri. Invece la tabella lezioni serve da contenitore di numero di lezioni, associati da chi la fatte e quando.
 
ciao
la tabella è ridondante. metti l'id dell'insegnante
Codice:
CREATE TABLE IF NOT EXISTS `lezioni` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`id_ins` int(10) NOT NULL,
`week` int(2) NOT NULL,
`anno` year(4) NOT NULL,
`lez` int(3) NOT NULL,
`citta` varchar(30) NOT NULL,
`nome` varchar(20) NOT NULL,
`cognome` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
in quanto l'id_ins sarà quello che trasmetti dal form
poi per evitare la ridondanza elimina citta, nome e cognome si possono ricavare con una join dalla tabella insegnanti

p.s.
gli id sono univoci mentre nome e cognome può essere di no (es hai due mario rossi)
 
-- Struttura della tabella `lezioni`
--

CREATE TABLE IF NOT EXISTS `lezioni` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`week` int(2) NOT NULL,
`anno` year(4) NOT NULL,
`lez` int(3) NOT NULL,
`id_ins` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
Ok ho sistemato non avevo considerato questo aspetto del database anche se avevo impostato l'inserimento dei nomi degli insegnanti con nomi diversi visto che è rara l'assegnazione di omonimi. Ma adesso come mi consigli di impostare il tutto?
 
ciao
ok, ci faccio un paio di ragionamenti e ti so dire (spero)

edit: dimenticavo

tu scrivi [modifica] e [cancella] , tralasciamo per ora cancella.
dici modifica e poi usi l'insert per inserire un nuovo record quindi intendi "inserisci"?
es il maestro pinco nel 2012 settimana 33 ha fatto 3 lezioni quindi inserisci il record
oppure modofica
es il maestro pinco nel 2012 settimana 33 NON ha fatto 3 lezioni ma 4 quindi vado a modificare il record portando le lezioni da tre a 4?
capisci che sono due cose diverse
 
Ultima modifica:
Ciao
Modifica e cancella si riferisce solo al nome cognome sesso e città del record. Per inserire invece il numero di lezioni lo si fa attraverso il pulsante inserisci posto alla fine del form...

Ecco:

Schermata 12-2456270 alle 14.45.35.png
 
ciao
ora penso di aver capito un po' meglio
se clicchi es su modifica ti appare una pag con il form contenente i dati del maestro con cui poi puoi modificarli, se [cancella] elimini il maestro dal database (attento dovresti eliminare anche i suoi dati da "lezioni")
mentre se scrivi un numero sulla casella di testo e dai il submit per quell'anno e settimana aggiungi (vorresti) un record (per quel maestro) un record
si può fare, ma ti do un consiglio:
ricordati la legge di murphy "se qualcosa può andar male, lo farà.", quindi terrei separate le due cose.
non per spaventarti, ma secondo me la parte più complesa sarà quella di verificare i dati immessi.
ti faccio un esempio:
il maestro pinco nel 2012 set 33 ha fatto 3 lezioni
ora nella settimana 35 ne ha fatte 4
tu (o un tuo collaboratore) inserisci i dati (ma per la legge di murphy) sbagli e invece di selezionare 35 selezioni 33
ti ritovi (te ne accorgi a mesi di distanza) due record diversi: a quel punto quale è quello giusto?
seconda ipotesi
da quello che ho visto l'elenco dei docenti ha almeno 50 nominativi quindi non lo vedi tutto a monitor (devi scorrerlo) e per sbaglio riempi due caselle?
da quello che ho capito lo script ti servirà per lavoro e nel lavoro gli script devono essere a prova di stupido.
comunque provo a buttari giu qualcosa, poi ci ragioniamo meglio.

edit
piccola curiosità sei emiliano?
 
Ultima modifica:
Effettivamente ci sono un po di parametri di sicurezza da inserire. Questo è un gestionale per lavoro che servirà a organizzare tutto l'aspetto lezioni settimanali che gli insegnanti di ballo, sparsi in tutta Italia insegneranno ai loro allievi. Quindi come hai detto tu, deve essere a prova di stupido, infatti ci sto lavorando da un paio di settimane più con la testa che manualmente.

Comunque sono di Firenze ma mi sono trasferito a Vicenza da poco :) Tu invece?
 
ciao
ecco uno schema di come inserire le ore di un docente

PHP:
<?php
require_once "config.php";//usa il require
connettiDb();
if(isset($_POST['aggiungi'])){
	$anno=$_POST['year'];
	$sett=$_POST['week'];
	$id=$_POST['conf'];//essendo il campo tipo radio sei sicuro di aver dato una sola conferma
	$ore=$_POST['n_lez1'][$id];//sono sicuro che il valore sia quello a cui ho confermato (vuoto o pieno che sia
	//qui iniziamo le verifiche
	$errori="";//metto a vuoto una stringa che se non ci sono errori rimarrà vuota
	//verifico per prima cosa che il record non esista gia
	$ver=mysql_query("SELECT id FROM lezioni WHERE id_ins=$id AND week='$sett' AND year='$anno'");
	if(mysql_num_rows($ver)>0){
		$errori .= "il record è esistente<br />";
	}
	if($ore ==""){
		$errori .= "le ore immesse non possono essere vuote o la casella non coincide con la conferma<br />";
	}
	if(is_int($ore) || $ore <=0){
		$errori .= "le ore non sono un numero o non possono essere zero o negative<br />";
	}
	//fine verifiche
	if($errori !=""){//ci sono stati errori di compilazione del form, mostro quali
		echo $errori;
	}else{
		//non ci sono errori di compilazione quindi inserisco
		$ins= "INSERT INTO lezioni(week,anno,lez,id_ins) VALUES('$sett','$anno','$ore','$id'";
		if(mysql_query($ins)){
			echo "record inserito<br />";
		}else{
			echo "errore nell'inserimento<br />";
		}
	}
	//torno automaticamente al form per un altro inserimento
	echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	//contet='3; sono i secondi di attesa prima di essere reindirizzati in modo da poter legerei i mesaggi
}else{
?>
<form name="modulo" id="modulo" method="post" action="">
<p>Year*
	<select name="year">
<?php
for($anno=2012; $anno <=2064; $anno++){//sfrutta le potenzialità di php
	echo "<option>$anno</option>";
}
?>
	</select>
*** *** *** *** Week N°
	<select name="week">
<?php
for($sett=1; $sett<=54;$set++){
	echo "<option>$sett</option>";
}
?>
	</select>
</p>
<?php
//inutile fare due query maschi e femmine, anche se vuoi tenerli separati
$sql="SELECT * FROM maestri ORDER BY sesso, cognome";//ti vengono prima tutti quelli di un sesso ordinati alfabeticamente per cognome, poi quelli dell'altro
$dati=mysql_query($sql);
echo "<table>";
echo "<tr><th>nome</th><th>cognome</th><th>ore</th><th>conferma</th></tr>";
while($riga=mysql_fetch_array($dati)){//verifica che abbia messo i nomi giusti dei campi
	$id=$riga['id'];
	$nome=$riga['nome'];
	$cognome=$riga['cognome'];
	echo "<tr><td>$nome</td><td>$cognome</td><td><input type=\"text\" name=\"n_lez1[$id]\" maxlength=\"3\" size=\"3\" /></td>
	<td><input name=\"conf\" type=\"radio\" value=\"$id\"></td></tr>";
}
echo "</table>";
?>
<input type="submit" name="aggiungi" value="aggiungi">
</form>
<?php
}
?>
verifica che abbia messo giusto i nomi dei campi.
se proprio vuoi tenere le cose unite (blhaah) aggiungi alla table due colonne con dentro i link mod e canc
comunque intanto provalo così e sappimi dire se funzia, se non funzia quali errori saltano fuori
 

Discussioni simili