Προς το περιεχόμενο

Πέρασμα μεταβλητής από μία php σελίδα σε άλλη χωρίς refresh


christomar

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια,

 

φτιάχνω μία εφαρμογή όπου έχω μία σελίδα php στην οποία έχω 3 drop down lists που είναι ιεραρχικά μεταξύ τους, είναι γενική κατηγορία, κατηγορία και υπο-κατηγορία. Επιλέγω πρώτα απ'το πρώτο drop down και ανάλογα τι επιλέγω μετά εμφανίζονται οι δυνατές επιλογές του δεύτερου drop down και ανάλογα την επιλογή μου στο δεύτερο drop down εμφανίζονται οι επιλογές του τρίτου drop down.

Στη σελίδα αυτή, μόλις επιλέξω αυτά που θέλω απ'τα 3 drop down lists μου, έχω ένα submit κουμπί μέσα απ'το οποίο γράφω τις επιλογές μου σ'ένα table στη βάση δεδομένων μου..

 

ο κώδικας είναι:

 

><?php
echo "<form method=post name=roadForm action=record_added.php>";
?>
	<tr>       
	<td valign="top">
<?php
echo "Επιλέξτε Γενική Κατηγορία: <br>";
?>
<select name="country" onChange="getState(this.value)"><option value=''>Όλες οι γεν. κατηγορίες...</option>
<?php
while($row_state = mysql_fetch_array($result_state)) { 

echo  "<option  value='$row_state[gencatid]'>$row_state[gname]</option>";
}
?>
</select>
<?php
echo "</p>";

echo "<p>";
echo "Επιλέξτε Κατηγορία: <br>";
?>
<div id="statediv"><select name="state">
<option>Πρώτα επιλέξτε γενικότερη κατηγορία</option>
       </select></div>
<?php


echo "</p>";

echo "<p>";
echo "Επιλέξτε Υποκατηγορία: <br>";
?>
<div id="citydiv"><select name="city">
<option>Πρώτα επιλέξτε κατηγορία</option>
       </select></div>

 

για να μπορέσω τα drop down lists να τα φτιάξω χωρίς refresh, έφτιαξα κάποια functions και 2 αντίστοιχες php σελίδες..

Τα functions είναι:

>function getXMLHTTP() { //fuction to return the xml http object
	var xmlhttp=false;	
	try{
		xmlhttp=new XMLHttpRequest();
	}
	catch(e)	{		
		try{			
			xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
		}
		catch(e){
			try{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch(e1){
				xmlhttp=false;
			}
		}
	}
	 	
	return xmlhttp;
   }

function getState(countryId) {		
	
	var strURL="findState2.php?country="+countryId;
	var req = getXMLHTTP();
	
	if (req) {
		
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				// only if "OK"
				if (req.status == 200) {						
					document.getElementById('statediv').innerHTML=req.responseText;	
								
				} else {
					alert("There was a problem while using XMLHTTP:\n" + req.statusText);
				}
			}
					
		}			
		req.open("GET", strURL, true);
		req.send(null);
	}
	

}


function getCity(countryId,stateId) {		
	var strURL="findCity2.php?country="+countryId+"&state="+stateId;
	var req = getXMLHTTP();
	
	if (req) {
		
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				// only if "OK"
				if (req.status == 200) {						
					document.getElementById('citydiv').innerHTML=req.responseText;						
				} else {
					alert("There was a problem while using XMLHTTP:\n" + req.statusText);
				}
			}				
		}			
		req.open("GET", strURL, true);
		req.send(null);
	}
			
}

 

και οι δύο Php σελίδες:

1. findState2.php

><?php
include 'connect.php';


$country=intval($_GET['country']);

$query="SELECT catid,catname FROM categ WHERE gencatid='$country'";
$result=mysql_query($query) or die (mysql_error());
echo $country;
?>
<select name="state" onchange="getCity(<?=$country?>,this.value)">
<option>Επιλέξτε κατηγορία</option>
<?php while($row=mysql_fetch_array($result)) { 
?>
<option value=<?=$row['catid']?>><?=$row['catname']?></option>
<?php
} 
?>
</select>

 

2. findCity2.php

><?php
include 'connect.php';
include("login/include/session.php");

$countryId=intval($_GET['country']);

$stateId=intval($_GET['state']);
echo $stateId;
$query = "SELECT DISTINCT subkatid,catid,scname FROM subcat where catid='$stateId'";
$result=mysql_query($query);

?>
<select name="city">
<option>Επιλέξτε υπο κατηγορία..</option>
<? while($row=mysql_fetch_array($result)) { ?>
<option value=<?=$row['subkatid']?>><?=$row['scname']?></option>
<?php 
} 
?>
</select>

 

Τα drop down τα έχω κάνει να εμφανίζονται χωρίς να γίνεται refresh η σελίδα ώστε να μη χάνονται τα άλλα δεδομένα που υπάρχουν στη σελίδα.

Η εμφάνιση των δεδομένων γίνεται μια χαρά χωρίς refresh χωρίς κανένα πρόβλημα.

Όμως επειδή δε γίνεται refresh η σελίδα, τα ids του δεύτερου και του τρίτου drop down βρίσκονται σωσμένα στις σελίδες findState2.php και findCity2.php αντίστοιχα και δεν μπορώ να τα περάσω στην κεντρική μου σελίδα php όπου θέλω να κάνω το INSERT query μου στη βάση..

Μήπως ξέρει κανείς πώς μπορεί να γίνει κάτι τέτοιο?

Ευχαριστώ προκαταβολικά :-)

Δημοσ.

Αυτό γίνεται με χρήση AJAX , όπως δηλαδή το κάνεις αλλά σε ένα ακόμα επίπεδο.

 

Δηλαδή στις 2 php που έχεις φτιάξει (findState2.php , findCity2.php) ότι κάνεις echo τότε στην σελίδα που έχει τα functions και πιο συγκεκριμένα στην μεταβλητή req.responseText θα αποθηκευτούν.

 

Κάνε ένα alert για να δεις τι περνάς

 

http://www.w3schools.com/ajax/ajax_database.asp

Δημοσ.

Σ'ευχαριστώ πολύ για την απάντηση!

Η αλήθεια είναι οτι δεν έχω δουλέψει καθόλου με Ajax και δεν καταλαβαίνω ακριβώς πώς ο κώδικας που υπάρχει στο λινκ που έδωσες μπορεί να προσαρμοστεί στο δικό μου παράδειγμα..θα το κοιτάξω όμως!

 

Έκανα ένα alert για να δω τι κρατάει το responseText έτσι:

>alert("This is what I get:\n" + req.responseText);

και βγαίνει αυτό:

 

>This is what I get:


<select id="state" name="state" onchange="getCity(3,this.value)">

<option>Επιλέξτε κατηγορία...</option>

<option value=28>ΑΘΛΗΤΙΚΕΣ ΕΓΚΑΤΑΣΤΑΣΕΙΣ</option>

<option value=29>ΑΘΛ. ΟΜΟΣΠΟΝΔΙΕΣ</option>

</select>

 

Τώρα ουσιαστικά απ'το παραπάνω εγώ θέλω να αποθηκεύω κάπως στη σελίδα που έχω τα functions το selected value απ'το παραπάνω drop down list.. :fear:

Δημοσ.

Είναι φυσιολογικό αυτό που σου βγάζει, αφού ουσιαστικά περνάει στην μεταβλητή που σου είπα ότι "ΘΑ" εμφανιζότανε στην σελίδα σου.

 

Τι ακριβώς θες γιατί τώρα με μπέρδεψες..

 

Αυτό που βρήκες θα το κάνεις

 

document.getElementById('statediv').innerHTML = req.responseText;

 

και στο element που έχεις με αυτό το id θα σου βάλει τo drop down menu και με post θα πάρεις ότι δεδομένα θες

Δημοσ.

Ωραία αυτό που έγραψες τώρα ήθελα να καταλάβω κι εγώ, νομίζω μ'έκανες να καταλάβω, θα το δοκιμάσω αύριο το πρωί! Εγώ αυτό που θέλω είναι να μπορώ να έχω στη σελίδα την κύρια, εκεί που έχω τα functions, την τιμή της επιλεγμένης id απ'το drop down menu που βγάζει το alert το παραπάνω.

Θέλω το id αυτό ώστε να μπορώ να γράψω την επιλεγμένη μεταβλητή σ'ένα table της βάσης μου.

Δημοσ.

Σκέψου το εξής :

 

Εάν έχεις μία σελίδα με ένα drop down το οποίο το δημιουργείς δυναμικά από την βάση, μπορείς ανάλογα τι επέλεξε ο άλλος με βάση το

"<option value=<?=$row['subkatid']?>>" να ξέρεις και την τιμή του id.

 

Τώρα με AJAX κάνεις ακριβώς το ίδιο, δλδ δημιουργείς ένα drop down στην findCity2.php και με την βοήθεια της functions εμφανίζεις το drop down στην κύρια σελίδα σου με το innerHTML

 

Μία συμβουλή : Να σταματήσεις να χρησιμοποιείς το <?= γιατί είναι PHP 4 . Το "σωστό" είναι <?php echo

Δημοσ.

Το να εμφανίζω το drop down list στην κύρια σελίδα δεν έχω πρόβλημα, εμφανίζεται κανονικά, αυτό συγκεκριμένα που θέλω είναι να μπορώ στην κύρια σελίδα να κρατήσω σε μία ξεχωριστή μεταβλητή την id της επιλεγμένης τιμής απ'το drop down list, ώστε να μπορώ να την γράψω στη βάση δεδομένων μου. Προς το παρόν η τιμή της id αυτής αποθηκεύεται μόνο στην findState2.php και στην findCity2.php αντίστοιχα, και δεν μπορώ να την τραβήξω ώστε να την έχω και στην κύρια σελίδα (main.php) όπου έχω τις δύο συναρτήσεις που έγραψα πάνω..απλά δεν καταλαβαίνω το POST πώς θα το κάνω, έχω παντελώς άγνοια από ajax συγγνώμη! Θα αλλάξω δηλαδή τα functions που έχω ήδη με κάποιον τρόπο ή θα πρέπει να προσθέσω κάποιες συγκεκριμένες εντολές ώστε να μπορέσω να πάρω την τιμή της μεταβλητής?

Δημοσ.

Την τιμή την έχεις πάρει ήδη απλώς δεν το έχεις καταλάβει..

 

Ας το πάρουμε αλλιώς, έστω ότι κάνεις τα drop down παίζουν μια χαρά.

Μετά τι θες να κάνεις??

Θα πατάς κάποιο sumbit?

Δημοσ.

Ναι πατάω ένα κουμπί που είναι type submit. Τις τιμές όλες που θέλω να τις αποθηκεύσω στη βάση τις έχω στην main.php σε μία form με method=post και action="add_record.php", οπότε μετά το submit button παίρνω όλες τις τιμές με $_POST στο add_record.php αρχείο και εκτελώ μία INSERT sql query για να τις περάσω στη βάση.

Δημοσ.

Αυτό που δεν καταλαβαίνω είναι με ποιον τρόπο θα πάρω τη συγκεκριμένη μεταβλητή απ'το drop down list. Δοκίμασα στην main.php να γράψω $new_var=$_POST['state']; αλλά μου λέει ότι δε βρίσκει τη μεταβλητή state, όπου state είναι το id του <select> στην findState2.php..εκεί έχω κολλήσει, πρέπει να είναι χαζό το ξέρω αλλά δεν μπορώ να ξεκολλήσω για να το καταλάβω!

Δημοσ.

Είσαι στην κύρια σελίδα σου.

Μετά δηιμουργείς τα drop down και μετά πατάς submit και πας σε μία άλλη php σελίδα όπου θες να κάνεις POST τα δεδομέα της κύριας σελίδας. Ουσιαστικά να τραβήξεις τις τιμές των drop down.

 

Το κάθε drop down έχει και ένα όνομα στο παράδειγμα σου <select name="city"> , άρα θα κάνεις $a = $_POST['city'] ή $b=$_POST['state'];

 

To post δεν το κάνεις στην σελίδα που είσαι αλλά δεν πας σε μία άλλη?

Έτσι δεν είπες?

Δημοσ.

Ναι αυτό ακριβώς είπα, τα post τα κάνω στην add_record.php. Στην add_record.php δοκίμασα να κάνω $new_rec=$_POST['state']; και μετά στην insert query έβαλα τη μεταβλητή $new_rec αλλά όταν είδα στη βάση είχε την τιμή μηδέν, δεν την είχε πάρει δηλαδή.

Δημοσ.

Δεν χρειάζεται να βλέπεις στην βάση εάν έχει πάρει την τιμή.

 

Αρχική κάνε ένα echo to $_POST['state']; Να δεις ότι έχει τιμή .

 

Εάν έχει τιμή τότε κάνεις λάθος το query για το insert στην βάση.

Εάν δεν έχει τιμή τότε τα δεδομένα σου δεν γίνονται post

Δημοσ.

Το έκανα echo και δεν μου βγαίνει τίποτα..άρα δεν παίρνονται μέσα απ'το post τα δεδομένα..αυτό ήταν το πρόβλημά μου εξαρχής, άρα κάτι γίνεται λάθος στα αρχικά.. :fear:

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...