Caricare una pagina da uno script PHP

  • Creatore Discussione Creatore Discussione M@rco
  • Data di inizio Data di inizio

M@rco

Nuovo Utente
17 Nov 2010
8
0
0
Ciao a tutti,

ho uno script scritto in php che riceve dati da un form HTML (chiamerò la pagina pagina1) tramite AJAX (uso il metodo post). Esso confronta i dati ricevuti con i rispettivi dati presenti in un DB; in pratica se non dovesse esserci una corrispondenza devo ricaricare la pagina1 e far apparire un div che in precedenza era nascosto che informa l'utente degli errori commessi in fase di inserimento dati. Il mio problema sorge all'atto del redirect su pagina1....in pratica, eseguito tutto il controllo sul DB, vorrei ricaricare pagina1 sul browser ma non ci riesco. Avete idee?

Questo è il codice che effettua il controllo sul database:

Codice:
<?php
	header("location: ../reg_user/prenota2.php?prenota=2");
	session_cache_limiter('nocache');
	session_start();
	
	//se cerco di caricare home_user.php senza essere loggato
	//reindirizzo il browser sull'index.html
	if($_SESSION['level'] != 2 && $_SESSION['level'] != 3 && $_SESSION['level'] != 4){
		header("location: ../public/home.php?alert=2");
	}
	
	include("../include/connect.php");
	
	//connessione al db
	$conn=mysql_connect($HOST, $USER, $PASSWORD) or die("IMPOSSIBILE COLLEGARSI AL SERVER");
	
	//seleziona il db
	mysql_select_db($DB,$conn) or die("Impossibile connettersi al database $DB");
	
	$prov = $_POST['prov'];
	$città = $_POST['citta'];
	
	// se cerco di accedere alla pagina dalla barra di indirizzi reindirizzo l'utente sulla home
	if($prov == "" && $città == ""){
		header("location: ../index.html");
		exit;
	}
	
	if($prov != ""){
		$sql="SELECT * FROM province WHERE sigla='$prov'";
		$result = mysql_query($sql);
		if (mysql_num_rows($result) == 0){
			// la provincia non esiste...
			// ricarico la pagina, passandogli tutti i campi riempiti in precedenza dall'utente
			// e facendo uscire un div che evidenzia gli errori fatti
			//come faccio?? ho già provato con header("location: ecc ecc..");
		}
	} elseif ($città != ""){
		//da completare
	  }
	//chiude la connesisone con il db	
	mysql_close($conn);
?>
 
Devi usare Javascript per farlo, perché non puoi usare gli header per effettuare un redirect se la pagina viene chiamata tramite AJAX. Ti consiglio di stampare 1 se c'è corrispondenza nel database, e 0 se non c'è. Poi tramite Javascript controlli la risposta della pagina. Se equivale a 0, allora esegui il refresh.

Per quanto riguarda il div nascosto con gli errori, basta semplicemente creare un div con la proprietà CSS display uguale a none. Poi fai la stessa cosa: controlli la risposta della pagina PHP. Se è uguale a 0 cambi la proprietà CSS e la fai diventare block, o quello che meglio si adatta al layout.
 
Devi usare Javascript per farlo, perché non puoi usare gli header per effettuare un redirect se la pagina viene chiamata tramite AJAX. Ti consiglio di stampare 1 se c'è corrispondenza nel database, e 0 se non c'è. Poi tramite Javascript controlli la risposta della pagina. Se equivale a 0, allora esegui il refresh.

Per quanto riguarda il div nascosto con gli errori, basta semplicemente creare un div con la proprietà CSS display uguale a none. Poi fai la stessa cosa: controlli la risposta della pagina PHP. Se è uguale a 0 cambi la proprietà CSS e la fai diventare block, o quello che meglio si adatta al layout.

Perfetto, i div li avevo già impostati...concettualmente ci sono, il mio dubbio era proprio sulla funzione header, grazie x averlo fugato. Quindi ora faccio una funzione js che chiamo alla fine dello script php che mi ricarica la pagina...giusto??
 
Ah capito...non sono molto pratico di AJAX, è la prima funzione che scrivo. Ecco il codice della funzione:

Codice:
//controlProv controlla che la provincia inserita sia corretta...
			function controlProv(prov){
				//converto l'input tutto in maiuscolo per evitare il controllo su Roma, roma o ROMA...
				prov = prov.toUpperCase();
				var myRegEx = /\d/i ;
				
				//CONTROLLO LA PROVINCIA
				if (prov != ""){
					if (prov != "ROMA")
						if (myRegEx.test(prov) == true){
							alert("Inserisci la sigla della provincia");
							return;
						}
						else
							if (prov.length != 2){
								alert("Inserisci la sigla della provincia");
								return;
							}
					
					//chiamo la funzione preleva e prelevo tutti i valori nei campi input
					var datiPrelevati = new Array();
					datiPrelevati = preleva();
					var ajax = new XMLHttpRequest();
					//var url = "../phpFunc/controlDest.php?citta="+citta+"&prov=nein";
					var url = "../phpFunc/controlDest.php";
					// inizializzo la richiesta in post
					ajax.open("post", url, true);
					// imposto il giusto header
					ajax.setRequestHeader("content-type", "application/x-www-form-urlencoded");
					//da datiPrelevati[7] a datiPrelevati[15] sono i campi dell'azienda
					// effettuo la richiesta inviando i valori dei campi input
					//DESTINATARIO PRIVATO
					ajax.send("indRit="+datiPrelevati[6]+"&Cognome="+datiPrelevati[15]+"&Nome="+datiPrelevati[16]+"&prov="+prov+"&citta="+datiPrelevati[18]+"&cap="+datiPrelevati[19]+"&indDest="+datiPrelevati[20]+"&tel="+datiPrelevati[21]+"&mail="+datiPrelevati[22]);
				} 
			}
 
Modifica in questo modo lo script PHP:
PHP:
<?php
header("Location: ../reg_user/prenota2.php?prenota=2");
session_cache_limiter('nocache');
session_start();

// se cerco di caricare home_user.php senza essere loggato
// reindirizzo il browser sull'index.html
if($_SESSION['level'] != 2 && $_SESSION['level'] != 3 && $_SESSION['level'] != 4)
	header("Location: ../public/home.php?alert=2");

include("../include/connect.php");

// connessione al db
$conn = mysql_connect($HOST, $USER, $PASSWORD) or die("IMPOSSIBILE COLLEGARSI AL SERVER");

// seleziona il db
mysql_select_db($DB,$conn) or die("Impossibile connettersi al database {$DB}");

$prov = isset($_POST['prov']) ? trim($_POST['prov']) : '';
$citta = isset($_POST['citta']) ? trim($_POST['citta']) : '';

// se cerco di accedere alla pagina dalla barra di indirizzi reindirizzo l'utente sulla home
if($prov == "" && $città == "")
{
	header("Location: ../index.html");
	exit;
}

if($prov != "")
{
	$sql = "SELECT * FROM province WHERE sigla='{$prov}'";
	$result = mysql_query($sql);
	
	if(mysql_num_rows($result) == 0)
	{
		echo '0';
	}
}
elseif($citta != "")
{
	// da completare
}

// chiude la connesisone con il db	
mysql_close($conn);
?>
E per quanto riguarda la parte Javascript c'è una cosa che mi sfugge: dov'è che controlli la risposta della pagina PHP?
 
Perfetto, lo script l'ho corretto....ora mi manca proprio la parte in JavaScript. Non so come recuperare i dati e come effettuare il controllo...attendo i tuoi preziosi consigli ;)
 
Ti consiglio di riscrivere il tuo script usando jQuery, un framework Javascript cross-browser che ti consente di effettuare richieste AJAX con grande facilità e senza problemi di compatibilità. Poi penseremo ad implementare le funzionalità che hai richiesto.

Fammi sapere se hai problemi.
 
Ok, mi cerco un manuale sul web...se ne conosci qualcuno ben fatto, anche in inglese, linka pure.
 
Si si, lì ci sono andato...chiedevo se conoscevi qualche manuale pdf consultabile offline, ma ripensandoci fa niente tanto lavoro prevalentemente quando ho una connessione disponibile.
 

Discussioni simili