Passare una variabile da una pagina all'altra

WottaFacca

Utente Attivo
20 Mar 2015
134
0
0
Desenzano d/G
Salve a tutti, vi scrivo questo post perchè ho un lavoro da fare e mi sono bloccato.

Praticamente ho questa pagina http://antoninofoti.altervista.org/Lavoro/index.html

Compilando il form e schiacciando su invia i dati selezionati verranno inviati in una tabella e verranno poi visualizzati nell'iframe, solo che io non devo visualizzare tutti i dati, ho bisogno di far vedere i dati, inseriti dagli altri utenti, che si riferiscono agli stessi che sto per inserire io. Faccio un esempio che è meglio xD

Quando io seleziono nei menù a tendina la folder (110) la capsule (001) e l'eventuale report (001) devo visualizzare nella schermata sulla destra tutti quelli che hanno già inserito i miei stessi dati, in modo che possano "comparare" le descrizioni.

Spero di aver spiegato tutto bene, so che è un bel casino xD se serve qualche parte di codice ditemelo che lo posto
Grazie a tutti quelli che proveranno ad aiutarmi xD
 
Non riesco ancora a capire esattamente cosa tu debba fare :P

Gli utenti dell'azienda in cui lavoro dovranno inserire la descrizione dei report che utilizzano in modo da sapere bene a cosa servono.

Il mio capo vuole praticamente che quando un utente seleziona i dati, può visualizzare nella finestra quello che è già stato inserito da qualcun'altro, quindi, se tu sei un nuovo utente e selezioni 110 - 001 - 001 (per inserire la tua descrizione), puoi contemporanemante vedere le descrizioni degli altri utenti sui dati che hai selezionato

Quindi devo passare le varibili della pagina che mi crea i menu a tendina, alla pagina che viene visualizzata nell'iframe

Spero di essere stato più chiaro xD
 
Ultima modifica:
Un'idea potrebbe essere questa.. Non so se hai mai osservato una directory es DMOZ, crei un select dinamico che si concretizza in base a ciò che hai selezionato nel primo form a sx ( es descrittivo: select database WHERE dato1 = $_POST["dato1"] AND dato2= $_POST["dato2"] ecc.. ), una volta che sei in questa pagina generata dal risultato del primo form, hai ancora in memoria le variabili passate tramite post quindi a questo punto avrai l'elenco generato dal select delle sole persone che hanno scelto quelle caratteristiche, e ti basterà inserire solamente la descrizione e schiacciare su invia (gli altri dati li passi nel form come campi hidden) sempre $_POST["dato1"] ecc..
Questa soluzione potrebbe darti dei problemi se per una ragione o per un'altra l'utente refresha la pag..
Oppure dovresti usare ( forse la soluzione più consona ) i Cookies ( forse la scelta che farei ) o le Sessioni..
 
Ultima modifica:
Non voglio utilizzare il select dinamico perchè punto ad evitare i vari problemi che vengono fuori

Quindi penso di dover usare le sessioni per forza, anche se non so bene come, vedrò di trovare una qualche guida in modo da riuscire nel mio intento xD

Grazie per la risposta
 
Ho un piccolo problema, la pagina non funziona più correttamente, praticamente mi forza l'inserimento dei menù a tendina con i dati che ho insierito all'inizio e quindi non mi fa più selezionare nulla.

E comunque il problema principale è che non funziona in "tempo reale", quindi non riesco a fare quello che mi serve
 
Non voglio utilizzare il select dinamico perchè punto ad evitare i vari problemi che vengono fuori.

Sia che usi cookies, sessioni, query string o post, si tratta comunque di istruire in qualche modo le queries lato server con dati provenienti da input utente. Ogni metodo di trasporto ti comporta gli stessi problemi di sicurezza, di conseguenza non eviti nulla scegliendo una strada anziché un altra.

Per pagine che mostrano un contenuto differente a seconda dei dati input e che non eseguano con questi procedure particolari di trattamento dati (come un eliminazione, un aggiornamento o un inserimento) ti suggerisco di usare il metodo GET.

Per mostrarlo in "tempo reale" puoi realizzare una funzione javascript da collegare all'evento onchange delle tre select coinvolte così che ogni volta che un utente sceglie un dato dai menù la pagina venga ricaricata nell'iframe con i nuovi input.

Nella pagina che carichi poi nell'iframe ti basta poi mettere un qualsiasi script di autoaggiornamento per mostrare anche eventuali cambiamenti ogni tot secondi volendo.
 
Per mostrarlo in "tempo reale" puoi realizzare una funzione javascript da collegare all'evento onchange delle tre select coinvolte così che ogni volta che un utente sceglie un dato dai menù la pagina venga ricaricata nell'iframe con i nuovi input.

Penso che questa sia la cosa più "giusta" da fare, nel senso che è quello che vuole il capo. Il mio problema è che non so come farlo, nel senso ho bisogno di un controllo sui dati inseriti nelle tre select e visualizzare nell'iframe i dati "simili" già inseriti da altri. Il problema principale è che non so come farlo xD
 
Scusami, mi sono lasciato fuorviare dalla discussione sul passaggio dei dati e non so perché avevo erroneamente inteso altro :p
Se riesco, in serata ti mostro qualche esempio concreto che può fare al caso tuo ;)
 
Scusami, mi sono lasciato fuorviare dalla discussione sul passaggio dei dati e non so perché avevo erroneamente inteso altro :p
Se riesco, in serata ti mostro qualche esempio concreto che può fare al caso tuo ;)

Se riesci a trovare qualcosa di "simile" a quello che mi serve mi faresti un grandissimo favore ;)

Già ti ringrazio per la tua pazienza e per aver "iniziato" ad aiutarmi xD
 
Ho visto che utilizzi jquery nella pagina, di conseguenza ho buttato velocemente giù uno script sfruttando la libreria e basandomi sui nomi e le definizioni che vi ho letto.

HTML:
(function($) {
    // Base url da caricare nell'iframe
    var iFrameBaseUrl = 'estrazione.php';
    
    // Identifichiamo le select da esaminare
    var $Folder = $('select[name="IDFolder"]'),
        $Capsule = $('select[name="IDCapsule"]'),
        $Report = $('select[name="IDReport"]');
    
    // Definiamo la funzione di aggiornamento della url
    function selectOnChange() {
        var params = {
            'IDFolder'  : $Folder.val(),
            'IDCapsule' : $Capsule.val(),
            'IDReport'  : $Report.val(),
            'time'      : new Date().getTime()
        };

         $('iframe').attr('src', iFrameBaseUrl +'?'+ $.param(params));
    }
    
    // Assegnamo la funzione all'evento onchange di ciascuna select
    $Folder.change(selectOnChange);
    $Capsule.change(selectOnChange);
    $Report.change(selectOnChange);
    
})(jQuery);

La questione è abbastanza semplice: ad ogni richiamo, la funzione selectOnChange legge il valore attuale presente nelle select, compone la url da richiamare e la imposta nell'attributo src dell'iframe.

Ho poi istruito l'evento onChange di tutte e tre le select, in questo modo ogni volta che si selezionerà un valore dalla tendina una nuova url verrà prodotta e spedita all'iframe.

Questo invece..
Codice:
'time'      : new Date().getTime()
..è niente più che un metodo tanto barbaro quanto efficiente di evitare che le richieste finiscano in cache (situazione che con alcuni browser su alcuni dispositivi potrebbe capitare).

Penso di non aver dimenticato nulla, ma se hai ancora qualche dubbio in proposito sono qui.

Ho scritto una versione di test per verificare il funzionamento dello script, la puoi trovare qui.


Lato server invece sai già come muoverti ? Nel caso fammi sapere ;)
 
Ho provato semplicemente a fare come te, ovvero mettendo lo script e visualizzando subito il risultato, ma non fa niente.

Ho "modificato" in modo da mandare i dati all'iframe, ma anche questa volta niente.

Questo è il codice che ho in questo momento nella mia pagina principale, come faccio ad inviare all'iframe, quindi ad estrazione.php, i tre dati che mi servono?

Codice:
<!DOCTYPE html>
<html>
<head>
  
  <meta charset="utf-8">
  <meta name="generator" content="AlterVista - Editor HTML"/>
  <title></title>
   <title>Report Board</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
        
        <style type="text/css">
        #pagina{	
		width: 100%;
		height: 100%;	 
		}
		
		#centro{
		width: 1000px;
		height: auto;
		margin: 0 auto;
		}
			
		.testo{
		font-size: 18px; 
		}
			
		#ricerca{
		margin-left: 60px;
		width: 510px;
		float: left;	
		}
		
		#sposta{
		float: left;	
		}
		
        </style>
   
        <script type="text/javascript">
            $(document).ready(function(){
                comuni();
                $("select").change(function(){
                    comuni();
                })
            })
            function comuni() {                
                $.ajax({
                    type: "POST",
                    url: "prova.php",
                    data: $("#ricerca").serialize(),
                    success: function(response){
                        eval(response);
                    }
                }); 
            }
        </script>
		
		<script>
		
		(function($) {
    // Base url da caricare nell'iframe
    var iFrameBaseUrl = 'estrazione.php';
    
    // Identifichiamo le select da esaminare
    var $folder = $('select[name="IDFolder"]'),
        $capsule = $('select[name="IDCapsule"]'),
        $report = $('select[name="IDReport"]');
    
    // Definiamo la funzione di aggiornamento della url
    function selectOnChange() {
        var params = {
            'IDFolder'  : $folder.val(),
            'IDCapsule' : $capsule.val(),
            'IDReport'  : $report.val(),
            'time'      : new Date().getTime()
        };
        /*
        // Chiaramente è un esempio per mostrare a video la url prodotta
        $('#src-iframe').html(iFrameBaseUrl +'?'+ $.param(params));
        */
        
        //Questo potrebbe essere il codice che cambia 
        // sul serio la url di un iframe
             
         $('iframe').attr('src', iFrameBaseUrl +'?'+ $.param(params));
             
    }
    
    // Assegnamo la funzione all'evento onchange di ciascuna select
    $folder.change(selectOnChange);
    $capsule.change(selectOnChange);
    $report.change(selectOnChange);
    
	})(jQuery);

	</script>
    
</head>
<body>
        	<div id="pagina">
				<div id="centro"> 
				
				
					<form id="ricerca" method="post" action="invio.php">
						
					<p class="testo"> Selezionare il proprio nome : </p>
					<select name="IDUtente">
						<option value=""></option>
					</select>
					
					<p class="testo"> Seleziona la Folder : </p>
					<select name="IDFolder">
						<option value=""></option>
					</select>
					
					<p class="testo"> Selezionare la Capsule : </p>
					<select name="IDCapsule">
						<option value=""></option>
					</select>
					
					<p class="testo"> Selezionare il Report : </p>
					<select name="IDReport">
						<option value=""></option>
					</select>
					
					<p class="testo"> Inserire la descrizione del report </p>
					
					<textarea name="Descrizione"></textarea>
					
					<br><br>
					
					<input type="submit" value="Invia">

				</form>		
				
				<br> <br>	
				
				<div id="sposta">
				<iframe width="400" height="500"></iframe>
				</div>
		  </div>
        </div>
</body>
</html>
 
Ho dato un occhiata, per qualche motivo non sembra assegnare correttamente la funzione all'evento onChange delle select.
Prova a spostare tutto il blocco di codice nel $(document).ready():

HTML:
        <script type="text/javascript">
            $(document).ready(function(){
                comuni();
                
                $("select").change(function(){
                    comuni();
                });
                var iFrameBaseUrl = 'estrazione.php';
    
                // Identifichiamo le select da esaminare
                var $folder = $('select[name="IDFolder"]'),
                    $capsule = $('select[name="IDCapsule"]'),
                    $report = $('select[name="IDReport"]');
                        
                // Definiamo la funzione di aggiornamento della url
                function selectOnChange() {
                    var params = {
                        'IDFolder'  : $folder.val(),
                        'IDCapsule' : $capsule.val(),
                        'IDReport'  : $report.val(),
                        'time'      : new Date().getTime()
                    };
                    
                     $('iframe').attr('src', iFrameBaseUrl +'?'+ $.param(params));
                        
                }
                
                // Assegnamo la funzione all'evento onchange di ciascuna select
                $folder.change(selectOnChange);
                $capsule.change(selectOnChange);
                $report.change(selectOnChange);
            });
            function comuni() {
                $.ajax({
                    type: "POST",
                    url: "prova.php",
                    data: $("#ricerca").serialize(),
                    success: function(response){
                        eval(response);
                    }
                }); 
            }
        </script>
 
Perfetto, sono riuscito a fare tutto.

Adesso funziona perfettamente come vuole il capo, quindi posso anche andare in ferie hahahaha

Grazie mille flameseeker :D
 
Ultima modifica:
Ok, era uno scherzo, non posso andare in ferie perchè ovviamente non basta mai quello che fai hahahah c'è sempre qualcosa da aggiungere che non ti dicono mai all'inizio xD

Praticamente devo aggiungere un controllo in modo tale che se un utente ha già inviato una serie di dati: Es (110-001-001) non possa inserire nuovamente quei dati e quindi far comparire una vieata del tipo "Hai già inserito questa descrizione" o cose del genere, ma non saprei proprio come comportarmi.
 
Nella pagina che carichi nell'iframe quei dati li utilizzi già per fare la ricerca di cosa mostrare no ?
Ti basta quindi verificare se è presente anche solo un record nel database quando ricevi i dati di ricerca in input e in quel caso mostri un bell'avviso del tipo..
PHP:
// supponendo mysqli
if (mysqli_num_rows($query_result) > 0) {
    if (!empty($_GET['IDFolder']) && !empty($_GET['IDCapsule']) && !empty($_GET['IDReport'])) {
        echo '<div style="background-color:#800; padding:20px; width:90%; margin:0 auto; color:#dfdfdf;">You shall not insert this!</div>';
    }
}
 
Facendo così non funziona, sicuramente sbaglio qualcosa io del tipo che inserisco nel punto sbagliato la funzione xD

PHP:
<?php
	
	echo ' <meta charset="UTF-8">';
	
	echo ' <style> a{text-decoration: none;} .testo{max-width: 900px; border-bottom: 1px solid #000;} </style>';

//connessione al server DB
	$link_connessione = mysql_connect("localhost","root","") or die ("Connessione impossibile"); 

//Selezione del database
	$db = mysql_select_db ("db_qry_board", $link_connessione) or die ("Database inesistente!"); 

//Esecuzione della query
	
	$Folder = $_GET ['IDFolder'];
	$Capsule = $_GET ['IDCapsule'];
	$Report = $_GET ['IDReport'];

	$query= "SELECT * FROM `test` WHERE IDFolder = '$Folder' AND IDCapsule = '$Capsule' AND IDReport = '$Report'";
	$tabella= mysql_query($query, $link_connessione) or die ("Attenzione: errore nella query");
	
	
	// supponendo mysqli
if (mysqli_num_rows($query) > 0) {
    if (!empty($Folder) && !empty($Capsule) && !empty($Report)) {
        echo '<div style="background-color:#800; padding:20px; width:90%; margin:0 auto; color:#dfdfdf;">You shall not insert this!</div>';
    }
}  
    
//Visualizzazione dei record di una tabella 
 
while ($riga = mysql_fetch_array($tabella)) {
  	  
	$utente = $riga ['utente'];
	$folder = $riga ['IDFolder'];
	$capsule = $riga ['IDCapsule'];
	$report = $riga ['IDReport'];
	$descrizione = $riga ['Descrizione'];
		
	echo ' <p class="testo" name="dati">' .$utente. ' - ' .$folder. ' - ' .$capsule. ' - ' .$report. ' - ' .$descrizione.' </p> ';  	
  
  }
  

?>

Mi da questi errori

Codice:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\QryBoard\estrazione.php on line 24
 
Ultima modifica:
Stai usando il vecchio modulo di mysql nel tuo codice, di conseguenza..
PHP:
if (mysql_num_rows($tabella) > 0) {

Occhio comunque, perché questo:
PHP:
    $Folder = $_GET ['IDFolder'];
    $Capsule = $_GET ['IDCapsule'];
    $Report = $_GET ['IDReport'];

    $query= "SELECT * FROM `test` WHERE IDFolder = '$Folder' AND IDCapsule = '$Capsule' AND IDReport = '$Report'";
ti espone seriamente a sql injection.


Per il resto, se puoi, usa le funzioni mysqli.
 
Ho provato cambiando da mysqli in mysql, ma non cambia, mi da sempre gli stessi errori.

Per l'sql injection non penso ci sia da preoccuparsi, il lavoro è tutto in locale, ho messo una parte su altervista solo per fare vedere cosa devo fare e quindi "semplificare" la spiegazione
 

Discussioni simili