Variabile fissa per tutto lo script(è ora delle sessioni?)

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Buongiorno,

più che un problema sarebbe una curiosità

ho una tabella semplice con ID e Nome ora con una select box dove all'interno estraggo i nomi permetto all'utente di fare una scelta .

Questa scelta diciamo $nome la richiamo nelle pagine successive con
PHP:
$nome=$_POST['nome'];

fin qui ci siamo, penso che parliamo delle basi.

Però avrei la necessità di portarmi dietro tutte le pagine dello script anche l'ID. ID che non potrei richiamare nelle pagine successive in quanto al momento della scelta devo recuperare il suo ID che lo rende univoco, perchè poi alcuni dati inerenti a $nome devo upparli in altre tabella dove potrebbero esserci $nome uguali.

Ora fermo restando che sapre come associare L'ID alla scelta con un array associativo come facio però a poratrlo dietro?

Ovviamente nella select box devono vedere solo i nomi non l'ID.

Grazie a chi mi aiuta
 
Facevo una prova per evitare la sessione che comunque mi sa cambierebbe poco il problema:

questo il codice della select

PHP:
<select class="select" name="nome" onchange="submit();">
<option value="<? echo $nome;?>">Seleziona</option>
<?php

mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");
@mysql_select_db("$DBName") or die("Impossibile connettersi al database $DBName");
    $query = "SELECT * FROM tabella ORDER by Soprannome ASC,Cognome ASC";
    $secondorisultato = mysql_query($query) or die("Query fallita: " . mysql_error() );
while( $linea = mysql_fetch_array($secondorisultato, MYSQL_ASSOC)){
		

   						if($linea['Soprannome']==''){
										
		            echo "<option>".$linea['Cognome']."&nbsp;".$linea['Nome']."</option>";
			
					}else{
													
					echo "<option>".$linea['Soprannome']."</option>";
									}

					}

					}
					

?>
</select>

ora io vorrei portarmi dietro l'id del nome scelto

ho provato con
PHP:
<select class="select" name="nome" onchange="submit();">
<option value="<? echo $nome;?>">Seleziona</option>
<?php

mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile collegarsi al server");
@mysql_select_db("$DBName") or die("Impossibile connettersi al database $DBName");
    $query = "SELECT * FROM tabella ORDER by Soprannome ASC,Cognome ASC";
    $secondorisultato = mysql_query($query) or die("Query fallita: " . mysql_error() );
while( $linea = mysql_fetch_array($secondorisultato, MYSQL_ASSOC)){
		

   						if($linea['Soprannome']==''){
										
		            echo "<option>".$linea['Cognome']."&nbsp;".$linea['Nome']."</option>";
			[B]	$idname=$linea['ID'];
							echo "<form method=\"post\" action=\"pagina.php\">\n";
		echo "<input type=\"hidden\" name=\"idname\" value=\"$idname\">\n";[/B]
					}else{
													
					echo "<option>".$linea['Soprannome']."</option>";
		[B]	$idname=$linea['ID'];
							echo "<form method=\"post\" action=\"pagina.php\">\n";
		echo "<input type=\"hidden\" name=\"idname\" value=\"$idname\">\n";[/B]
									}

					}

					}
					

?>
</select>

che mi apreva la più logica, così dopo avrei richiamato $_POST['ID'] ma mi estrae i dati fuori dalla select box
mi scuso se ho fatto una prova che denota la mia ignoranza su certi particolari
 
Dipende da come è strutturato lo script. Se le pagine in cui devi usare la variabile impostata precedentemente sono comunque form (ad esempio nel caso di un'azione che richiede più passaggi) allora puoi usare gli input nascosti come avevi provato a fare tu. Se sono pagine comuni allora è il caso di usare le sessioni.
 
Dipende da come è strutturato lo script. Se le pagine in cui devi usare la variabile impostata precedentemente sono comunque form (ad esempio nel caso di un'azione che richiede più passaggi) allora puoi usare gli input nascosti come avevi provato a fare tu. Se sono pagine comuni allora è il caso di usare le sessioni.

non necessariamente, comquneu ho rpvato ad inviare l'id come ho psotato su ma non lo prende, c'è maniera di inviarlo senza usare le sessioni? questo erpchp lo script è finito ed è un pò lunghetto.

visto che si tratta solo di mofiifcare quella porzione mi scocciava irepdnere tutto o script
 
Niene da fare roba da impazzire

e nemmeno con le sessioni risolverei sto problema che dopo attenta esaminazione posso specificare:

ho una tabella nomi del tipo questa
ID|NOMI
1 | Mario_Phptiodioavolte
2 | Giovanni Nuncelafaccio

come si vede a volte ho un _ che stacca nome e cognome ed a volte no, e questo deve necessariamente restare così.

ora nella select box del tipo
PHP:
<?
<select class=\"select\" name=\"nome\">
$sqlquery = "SELECT * FROM $tabella ORDER BY Nome ";
$result = mysql_query($sqlquery);
}   
while( $linea = mysql_fetch_array($result, MYSQL_ASSOC)){
$thename=$linea['Nome'];        
		$idname=$linea['ID'];
      
    $thename=str_replace("_"," ",$thename);                
echo  "<option>$thename</option>";

}

ho usato str_replace per nonf ar vedere l'odiato_ però quando vado a recuperare la variabile ad esempiodell'id 1 mi risulta Mario Phptiodioavolte e se faccio il apsso idnietro cioè

$thename=str_replace(" ","_",$thename);
e putacaso è sattos elezionato l'ID2 mi risulta
Giovanni_Nuncelafaccio

quindi mi saltano le successive query

ora io non voelvo modificare il database mi basterebbe inviare inseieme al nome l'ID così risolverei tutti i problemi perchè nelle varie tabelle ogni nome è identificato dallo stesso ID

isnerendo il campo nascosto all'interno del while e dell'option mi fa saltare appunto la select

ci deve essere un sistema per trascinarmi dietro l'ID
 
iao
perche non trasmetti direttamente $linea['Nome'] come valore e non usi $thename solo come visualizzazione

PHP:
<?php
//...
$thename=str_replace("_"," ",$linea['Nome']);
echo  "<option value=\"".$linea['Nome']."\">$thename</option>";
//...
?>
in questo caso l'html diventa

HTML:
<option value="Mario_Phptiodioavolte">Mario Phptiodioavolte</option>
<option value="Giovanni Nuncelafaccio">Giovanni Nuncelafaccio</option>
cioè vedi come ti piacerebbe vedere, ma trasmetti il nome come è scritto nella tabella, quindi non ti sballano le successive query.
fai il replace solo quando ti serve visualizzare il nome
 

Ciao, prova questo script, se ti può servire
PHP:
for($a = 0; $a < mysql_num_rows($query);$a++)
{
$rec=mysql_fetch_assoc($query);
echo"
<option value='".intval($rec['id'])."'>
".$rec['nome']."
</option>";
}

Ciao
 
Nel caso della soluzione di Minatore passere $rec['nome'] per stripslashes(), non si sa mai che il lista ci sia qualche "Tommaso d'Aquino".
 
Nel caso della soluzione di Minatore passere $rec['nome'] per stripslashes(), non si sa mai che il lista ci sia qualche "Tommaso d'Aquino".


Ciao Eliox, a proposito dell'apostrofo, ho inserito stripslashes davanti, ma non ho notato differenze, invece ho rilevato un errore in un campo text dove prelevo dal db un nome con l'apostrofo e quando lo vado a recuperare sono rimasto come un fessacchiotto, allora
nel db ho un campo nome con dentro Tommaso d'Aquino
lo recupero così
PHP:
<input type='text' name='nome' class='text' value='" . stripslashes($rec_estr['nome']) . "'>
come risultato ho
Codice:
Tommaso d
mi tronca tutto quello che ho dopo l'apostrofo, come mai sta cosa

Ciao

Apro un altro post perchè la cosa sembra interessante
 
Ultima modifica:
ciao
nel db non ci possono essere stringhe del tipo
Tommaso d'Aquino
ma (nel db) la stringa deve essere scritta
Tommaso d\'Aquino
eliox intendeva che quando la leggi e la visualizzi devi usare stripslashes
se pensi a come è scritta una query ti rendi conto del perchè
INSERT INTO tabella(campo) VALUES ('parola')
se invece dovessi insetire tommaso
INSERT INTO tabella(campo) VALUES ('Tommaso d'Aquino')
mysql e/o php non capisce dove è la fine della stringa
per cui devo adslaslacciare
INSERT INTO tabella(campo) VALUES ('Tommaso d\'Aquino')
cosi mysql/php capiscono che è un apostrofo e non la fine della stringa

dimenticavo: per inserire nel db addslashes("Tommaso d'Aquino")
 
Ultima modifica:
ciao
nel db non ci possono essere stringhe del tipo
Tommaso d'Aquino
ma (nel db) la stringa deve essere scritta
Tommaso d\'Aquino
eliox intendeva che quando la leggi e la visualizzi devi usare stripslashes
se pensi a come è scritta una query ti rendi conto del perchè
INSERT INTO tabella(campo) VALUES ('parola')
se invece dovessi insetire tommaso
INSERT INTO tabella(campo) VALUES ('Tommaso d'Aquino')
mysql e/o php non capisce dove è la fine della stringa
per cui devo adslaslacciare
INSERT INTO tabella(campo) VALUES ('Tommaso d\'Aquino')
cosi mysql/php capiscono che è un apostrofo e non la fine della stringa

dimenticavo: per inserire nel db addslashes("Tommaso d'Aquino")


Ciao e grazie borgo, quando faccio l'inserimento io uso addslashes, ecco perchè non notavo nessuna differenza
Ciao
 
iao
perche non trasmetti direttamente $linea['Nome'] come valore e non usi $thename solo come visualizzazione

PHP:
<?php
//...
$thename=str_replace("_"," ",$linea['Nome']);
echo  "<option value=\"".$linea['Nome']."\">$thename</option>";
//...
?>
in questo caso l'html diventa

HTML:
<option value="Mario_Phptiodioavolte">Mario Phptiodioavolte</option>
<option value="Giovanni Nuncelafaccio">Giovanni Nuncelafaccio</option>
cioè vedi come ti piacerebbe vedere, ma trasmetti il nome come è scritto nella tabella, quindi non ti sballano le successive query.
fai il replace solo quando ti serve visualizzare il nome

Signore onnipotente, La sapevo pure sta cosa del valure che pirla :hammer::hammer::hammer::hammer:

Ieri mi era passata pure per la mente sta cosa del value poi preso da altre cose mi son dimenticato. Che stupido.tutto eprfetto Graie Utilissimo e gentilissimo come sempre.
 

Discussioni simili