Διαχείριση 2 drop down lists σε φόρμα

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
lon3prog
Δημοσιεύσεις: 14
Εγγραφή: 24 Φεβ 2010 22:59

Διαχείριση 2 drop down lists σε φόρμα

Δημοσίευση από lon3prog » 24 Φεβ 2010 23:18

Καλησπέρα, θα ήθελα να με βοηθήσετε στο παρακάτω καθώς ψάχνω και γράφω κώδικα μέρες..

Έχω μία φόρμα αγοράς προϊόντων όπου ο χρήστης πρέπει να εισάγει το όνομα του προμηθευτή, το όνομα του προϊόντος και τον αριθμό των τεμαχίων.
Το όνομα του προμηθευτή και το όνομα του προϊόντος είναι drop down lists.
Στο πρώτο μπαίνουν τα ονόματα από την βάση δεδομένων και στο δεύτερο ΘΕΛΩ (αλλά δεν μπορώ) να εμφανίζονται τα προϊόντα μόνο του εκάστοτε προμηθευτή, όχι όλα!
Επίσης, θα ήθελα να υπάρχει ένα add button στο τέλος κάθε σειράς σε περίπτωση που θέλει να παραγγείλει από τον ίδιο προμηθευτή παραπάνω του ενός προϊόντα.

Θα με βοηθούσε έστω αν είχατε κάποια ιδέα καθώς είμαι καινούργια στην php και δεν έχω ιδέα από javascripts.
Ευχαριστώ εκ των προτέρων..

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

Διαχείριση 2 drop down lists σε φόρμα

Δημοσίευση από _Invisible_ » 24 Φεβ 2010 23:59

Ας υποθέσουμε ότι έχεις έναν πίνακα products (προϊόντα) και έναν πίνακα suppliers (προμηθευτές) με τα ακόλουθα στοιχεία (βέβαια εσύ μπορεί να έχεις και άλλα πεδία, αυτό είναι παράδειγμα):
products: product_ID, product_name, supplier_ID
suppliers: supplier_ID, supplier_name...

Στον πίνακα products το πεδίο supplier_ID θα περιέχει το ID του προμηθευτή, με βάση το οποίο θα εμφανίζεις τα προϊόντα.

Δηλαδή, θα πεις: Εμφάνισε όλα τα πεδία του πίνακα products με supplier_ID = 'Χ'

To supplier_ID είναι και στους δύο πίνακες και στον πίνακα products χρησιμοποιείται με σκοπό να δημιουργήσεις έναν σύνδεσμο, έτσι ώστε να μπορείς να πάρεις τα δεδομένα από τον πίνακα.

Ένα παράδειγμα κώδικα:

Κώδικας: Επιλογή όλων

<?php

// Emfanizei ta proionta
// xrisi&#58; 
// - display_proionta&#40;&#41; &#40;epistrefei ena array me ola ta proionta&#41;
// - display_proionta&#40;'<ID_promitheuti>'&#41; &#40;epistrefei ena array me ola ta proionta tou promitheuti pou oristike&#41;
function display_proionta&#40;$promitheutis = false&#41; &#123;
	$eggrafes = array&#40;&#41;;

	if &#40;$promithetus === true&#41; &#123;
		$sql = "SELECT *
				FROM proionta
				WHERE supplier_ID = '".&#40;int&#41; $promitheutis."'";
	&#125;
	else &#123;
		$sql = "SELECT * FROM proionta";
	&#125;

	if &#40; ! &#40; $result = mysql_query&#40;$sql&#41; &#41; &#41; &#123;
		die&#40;'Could not execute MySQL query&#58; '.mysql_error&#40;&#41;&#41;;
	&#125;

	// eggrafes pou brike
	$rows = mysql_num_rows&#40;$result&#41;;

	if &#40;$rows == 0&#41; &#123;
		// den bre8ikan eggrafes
		return array&#40;&#41;;
	&#125;
	else &#123;
		// product_ID = A/A proiontos &#40;8a to xreiastoume gia tin HTML lista&#41;
		// product_name = onoma proiontos 
		$eggrafes&#91;&#93; = array&#40;'product_ID' => $row&#91;'product_ID'&#93;, 'product_name' => $row&#91;'product_name'&#93;&#41;;
	&#125;
	return $eggrafes;
&#125;

$products = display_proionta&#40;'nikos'&#41;; // emfanisi proionton tou promitheuti 'nikos'

echo '<select name="proionta_promitheuti">';
// Metrame poses eggrafes epestrepse to function. An den einai 0,
// tote emfanise mia HTML lista...
if &#40;count&#40;$products&#41; != 0&#41; &#123;
	foreach&#40;$products as $product&#41; &#123;
		echo '<option value="'.$product&#91;'product_ID'&#93;.'">'.$product&#91;'product_name'&#93;.'</option>';
	&#125;
&#125;
echo '</select>';

?>
Το παραπάνω script θα το προσαρμόσεις στις ανάγκες σου και θα βάλεις τα κατάλληλα ονόματα στους πίνακες και στα πεδία.

Η όλη ιστορία γίνεται στον πίνακα προϊόντων που βάζεις ένα extra πεδίο, στο οποίο θα αποθηκεύεις τον Α/Α (Αύξων Αριθμό) του Προμηθευτή, με σκοπό να μπορέσεις να πάρεις τα προϊόντα που ανήκουν μόνο σε αυτόν, και όχι όλα τα προϊόντα.

Ελπίζω να βοήθησα.

lon3prog
Δημοσιεύσεις: 14
Εγγραφή: 24 Φεβ 2010 22:59

Διαχείριση 2 drop down lists σε φόρμα

Δημοσίευση από lon3prog » 25 Φεβ 2010 05:09

Αρχικά ευχαριστώ για την άμεση απάντηση..
Με κάποιες αλλαγές δουλεύει αλλά μόνο όταν βάζω εγώ το όνομα του προμηθευτή.Εννοώντας οτι δεν λειτουργεί δυναμικά.
Στόχος είναι μόλις επιλέγω τον προμηθευτή απο τη λίστα η επόμενη λίστα των προϊόντων να προσαρμόζεται ανάλογα με το όνομα προμηθευτή.
Ίσως αν καλέσω από κάπου συγκεκριμένα την display_proionta να δουλέψει.
Δίνω τον κώδικα αν υπάρχει κάποια γνώμη

Κώδικας: Επιλογή όλων

<?php


function display_proionta&#40;$promitheutis&#41; &#123;


   $eggrafes = array&#40;&#41;;
   $query="SELECT * FROM suppliers WHERE supplier_name='".$promitheutis."'";
   $name=mysql_query&#40;$query&#41;;


if&#40;mysql_num_rows&#40;$name&#41;&#41; 
&#123; 
							
	$row = mysql_fetch_assoc&#40;$name&#41;;
     	 
								
		$name=$row&#91;supplier_id&#93;; 
								
     	
							 
&#125; 
else &#123;
	echo "<br>No Names Present<br>";  
&#125; 

	echo "<br><br>";
   
   $sql = "SELECT * FROM products WHERE supplier_id = '".$name."'";
   
   $result=mysql_query&#40;$sql&#41;;
echo "<select name=\"product\">";

   if&#40;mysql_num_rows&#40;$result&#41;&#41; 
   &#123; 
							
	while&#40;$row = mysql_fetch_assoc&#40;$result&#41;&#41; 
     	&#123; 
								
		echo "<option>$row&#91;product_name&#93;</option>"; 
								
     	&#125;
							 
  &#125; 
  else &#123;
	echo "<br>No Names Present<br>";  
  &#125; 
echo "</select>";	
	
     
&#125;


?>

<?php
mysql_connect &#40;"localhost", "root", "depi"&#41;;
mysql_select_db &#40;"shopping"&#41;;

$query=mysql_query&#40;"SELECT * FROM suppliers"&#41;;
echo "<select name=\"promitheutis\">";		//i prwti select gemizei apo ti vasi kai kapws
						//prepei na krataw tin ekastote timi gia na 
						//kanw call tis sinartisis display_proionta
if&#40;mysql_num_rows&#40;$query&#41;&#41; 
   &#123; 
							
	while&#40;$row = mysql_fetch_assoc&#40;$query&#41;&#41; 
     	&#123; 
								
		echo "<option >
		$row&#91;supplier_name&#93;
	
		</option>"; 
								
     	&#125;
							 
  &#125; 
  else &#123;
	echo "<br>No Names Present<br>";  
  &#125; 
echo "</select>";	
echo "<br><br>";
$s=display_proionta&#40;paulidis&#41;;			//edw douleuei opws prepei,alla oxi dinamika
echo $s;
?> 

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

Διαχείριση 2 drop down lists σε φόρμα

Δημοσίευση από korgr » 25 Φεβ 2010 10:03

Χρειαζεσαι ajax για αυτο που θες να κανεις.
Να επικοινωνει η javascript με το php, καθε φορα που συμβαινει το onchange στους προμηθευτες drop down list.
Δες τον κωδικα μου στο http://www.yournextcar.gr/ στα δυο συνεργαζομενα drop down lists

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

Διαχείριση 2 drop down lists σε φόρμα

Δημοσίευση από _Invisible_ » 25 Φεβ 2010 18:38

Για αρχή, θα σε βοηθήσω με τον εξής τρόπο: Θα σου δείξω πώς μπορείς να αλλάζεις αυτόματα τα δεδομένα ενός dropdown list βασισμένο στην τιμή του πρώτου.

Για να γίνω πιο σαφής, σου έχω ετοιμάσει ένα παράδειγμα:

Κώδικας: Επιλογή όλων

<html>
<head>
	<title>test</title>
<script type="text/javascript" src="./general.js"></script>
<script type="text/javascript">
<!--
var lista_proionton = new Array;

//lista_proionton&#91;<ID_PROIONTOS>&#93; = new Array &#40;'<ID_PROMITHEUTI>', '<ID_PROIONTOS>', '<ONOMA_PROIONTOS>'&#41;;
//lista_proionton&#91;<ID_PROIONTOS>&#93; = new Array &#40;'<ID_PROMITHEUTI>', '<ID_PROIONTOS>', '<ONOMA_PROIONTOS>'&#41;;

lista_proionton&#91;1&#93; = new Array &#40;'1', '1', 'Proion Nikou #1'&#41;;
lista_proionton&#91;6&#93; = new Array &#40;'1', '6', 'Proion Nikou #2'&#41;;

lista_proionton&#91;2&#93; = new Array &#40;'2', '2', 'Proion Giorgou #1'&#41;;
lista_proionton&#91;5&#93; = new Array &#40;'2', '5', 'Proion Giorgou #2'&#41;;

lista_proionton&#91;3&#93; = new Array &#40;'3', '3', 'Proion Mariou #1'&#41;;
lista_proionton&#91;4&#93; = new Array &#40;'3', '4', 'Proion Mariou #2'&#41;;


//-->
</script>
</head>
<body>

<form method="post" action="php_selida" name="Form">
<table>
<tr>
<td>Προμηθευτής&#58;</td>
<td><select name="supplier" id="promitheutis" onchange="changeDynaList&#40;'proionta', lista_proionton, document.Form.promitheutis.options&#91;document.Form.promitheutis.selectedIndex&#93;.value, 0, 0&#41;;" style="width&#58;200px;">
	<option value="-1" id="-1">---- Επιλέξτε Προμηθευτή ----</option>
	<option value="1" id="1">Νίκος</option>
	<option value="2" id="2">Γιώργος</option>
	<option value="3" id="3">Μάριος</option>
</select>
</td>
</tr>
<tr>
	<td>Προϊόντα&#58;</td>
	<td>
<select name="proionta">
	<option value="-1" id="-1">----</option>
</select>
</td>
</tr>
</table>
</form>

</body>
</html>
Αποθήκευσε τον παραπάνω κώδικα και δες τον στον browser σου και δες πώς δουλεύει. Κάνε δοκιμές/αλλαγές και μετά τροποποίησέ το πάλι για να δουλεύει για σένα.

Στο σημείο που έγραψα:

Κώδικας: Επιλογή όλων

	<option value="1" id="1">Νίκος</option>
	<option value="2" id="2">Γιώργος</option>
	<option value="3" id="3">Μάριος</option>
Δημιούργησε με PHP κώδικα μια δυναμική λίστα προμηθευτών με τα στοιχεία που έχεις στον πίνακα προμηθευτών στην Βάση Δεδομένων σου. Παρατήρησε ότι το 1,2,3 είναι το ID του προμηθευτή στη Βάση. Το χρειαζόμαστε, γιατί βάση αυτού θα εμφανιστούν τα προϊόντα στο δεύτερο drop down box.

Στο σημείο που έγραψα:

Κώδικας: Επιλογή όλων

lista_proionton&#91;1&#93; = new Array &#40;'1', '1', 'Proion Nikou #1'&#41;;
lista_proionton&#91;6&#93; = new Array &#40;'1', '6', 'Proion Nikou #2'&#41;;

lista_proionton&#91;2&#93; = new Array &#40;'2', '2', 'Proion Giorgou #1'&#41;;
lista_proionton&#91;5&#93; = new Array &#40;'2', '5', 'Proion Giorgou #2'&#41;;

lista_proionton&#91;3&#93; = new Array &#40;'3', '3', 'Proion Mariou #1'&#41;;
lista_proionton&#91;4&#93; = new Array &#40;'3', '4', 'Proion Mariou #2'&#41;;
Χρησιμοποιώ αυτή τη μορφή:

Κώδικας: Επιλογή όλων

lista_proionton&#91;<ID_PROIONTOS>&#93; = new Array &#40;'<ID_PROMITHEUTI>', '<ID_PROIONTOS>', '<ONOMA_PROIONTOS>'&#41;;
Αυτό είναι ένα Javascript Array που θα πρέπει να δημιουργήσεις (θα το κάνεις και αυτό δυναμικά), με σκοπό να πεις στην Javascript ποια προϊόντα να εμφανίσει και να τα κάνει επιλογές στην λίστα.

Για να δημιουργήσεις τα απαιτούμενα Javascript Array και να δουλεύει σωστά η φόρμα, θα πρέπει να κάνεις ένα query στον πίνακα Προϊόντα, από τον οποίο θα παίρνεις τα ακόλουθα στοιχεία:
- ID προϊόντος
- όνομα προϊόντος
- ID προμηθευτή στον οποίο ανήκει

Και μετά θα χρησιμοποιήσεις την PHP μέσα στο while loop (επανάληψη) με σκοπό να εμφανίσεις το ακόλουθο:

Κώδικας: Επιλογή όλων

echo "lista_proionton&#91;".$row&#91;'supplier_ID'&#93;."&#93; = new Array &#40;'".$row&#91;'supplier_ID'&#93;."', '".$row&#91;'product_ID'&#93;."', '".$row&#91;'product_name'&#93;."'&#41;;";
Φυσικά, για ακόμα μία φορά θα κάνεις τις κατάλληλες αλλαγές για να δουλέψει.

Επίσης, για να δουλέψουν τα παραπάνω χρειάζεσαι και ένα αρχείο με όνομα general.js με τον παρακάτω κώδικα (αν θυμάμαι καλά είναι από Joomla!):

Κώδικας: Επιλογή όλων

<!--
/**
* Changes a dynamically generated list
* @param string The name of the list to change
* @param array A javascript array of list options in the form &#91;key,value,text&#93;
* @param string The key to display
* @param string The original key that was selected
* @param string The original item value that was selected
*/
function changeDynaList&#40; listname, source, key, orig_key, orig_val &#41; &#123;
	var list = eval&#40; 'document.Form.' + listname &#41;;

	// empty the list
	for &#40;i in list.options.length&#41; &#123;
		list.options&#91;i&#93; = null;
	&#125;
	i = 0;
	for &#40;x in source&#41; &#123;
		if &#40;source&#91;x&#93;&#91;0&#93; == key&#41; &#123;
			opt = new Option&#40;&#41;;
			opt.value = source&#91;x&#93;&#91;1&#93;;
			opt.text = source&#91;x&#93;&#91;2&#93;;

			if &#40;&#40;orig_key == key && orig_val == opt.value&#41; || i == 0&#41; &#123;
				opt.selected = true;
			&#125;
			list.options&#91;i++&#93; = opt;
		&#125;
	&#125;
	list.length = i;
&#125;
//-->

lon3prog
Δημοσιεύσεις: 14
Εγγραφή: 24 Φεβ 2010 22:59

Διαχείριση 2 drop down lists σε φόρμα

Δημοσίευση από lon3prog » 25 Φεβ 2010 23:54

Σε ευχαριστώ πάρα πολύ..
Θα έπρεπε να πω ότι τα καταφέρες (κι όχι ότι τα κατάφερα) και επίσης πρέπει να σε ευχαριστήσω που με έκανες να τα καταλάβω,που είναι ακόμα πιο σημαντικό..

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης