Check "Any" σε search form

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

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

Απάντηση
elenaz
Δημοσιεύσεις: 5
Εγγραφή: 19 Απρ 2011 00:54

Check "Any" σε search form

Δημοσίευση από elenaz » 19 Απρ 2011 01:12

Καλησπέρα παιδιά. Προσπαθώ να κάνς μια εξελιγμένη αναζήτηση μέσω drop-down menus, check-boxes κλπ. Θα παραθέσω κώδικα και μετά θα εξηγήσω.

HTML κώδικας:
<strong>Περιοχή:</strong><br />
<select name='periohi[]' multiple="multiple">
<option value='1'>Κέντρο</option>
<option value='2'>Τούμπα</option>
<option value='3'>Χαριλάου</option>
<option value='4'>Καλαμαριά</option>
</select>
<input type="checkbox" name="periohi_adiaforo" value="periohi_adiaforo"> <strong>Αδιάφορο</strong>

PHP κώδικας:
if( count($_POST['periohi']) > 0){
$periohi = implode(',',$_POST['periohi']);
$str.= ' periohi IN ('.$periohi.')';
}
$sql = "SELECT * FROM houses WHERE ".$str;

Δηλαδή θα δίνεται η δυνατότητα στο χρήστη να πατάει το checkbox "Αδιάφορο" και με αυτόν τον τρόπο θα γίνεται search σε όλες τις περιοχές. Εχαριστώ πολύ για τον χρόνο σας.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Check "Any" σε search form

Δημοσίευση από jpk » 19 Απρ 2011 01:43

Γιατί δεν το κάνεις ανάποδα;

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

if&#40;isset&#40;$_POST&#91;"periohi_adiaforo"&#93;&#41; && $_POST&#91;"periohi_adiaforo"&#93;=="periohi_adiaforo"&#41;
&#123;
	$sql = "SELECT * FROM houses";
&#125;
else 
&#123;
	$str = "";
	if&#40; count&#40;$_POST&#91;'periohi'&#93;&#41; > 0&#41;
	&#123;
		$periohi = implode&#40;',',$_POST&#91;'periohi'&#93;&#41;;
		$str.= ' periohi IN &#40;'.$periohi.'&#41;';
	&#125;
	$sql = "SELECT * FROM houses WHERE ".$str;
&#125;

elenaz
Δημοσιεύσεις: 5
Εγγραφή: 19 Απρ 2011 00:54

Check "Any" σε search form

Δημοσίευση από elenaz » 19 Απρ 2011 02:13

Έλα ντε γιατι? Όταν είσαι όλη μέρα πάνω από κώδικα μερικά σου ξεφεύγουν.
Thanks πολύ για την απάντηση.

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Check "Any" σε search form

Δημοσίευση από cherouvim » 19 Απρ 2011 12:25

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

	$str = "";
	if&#40; count&#40;$_POST&#91;'periohi'&#93;&#41; > 0&#41;
	&#123;
		$periohi = implode&#40;',',$_POST&#91;'periohi'&#93;&#41;;
		$str.= ' periohi IN &#40;'.$periohi.'&#41;';
	&#125;
	$sql = "SELECT * FROM houses WHERE ".$str;
&#125;
Προσοχή γιατί με αυτό το τρόπο το sql query είναι τρωτό (vulnerable) σε SQL Injection.

elenaz
Δημοσιεύσεις: 5
Εγγραφή: 19 Απρ 2011 00:54

Check "Any" σε search form

Δημοσίευση από elenaz » 19 Απρ 2011 13:15

Σας ευχαριστώ πολύ για τισ απαντήσεις. Έχω και κάτι τελευταίο να ρωτήσω. Έβαλα κανονικά pagination στα αποτελέσματα αλλά μόλις πατάω Next page δεν αποθηκεύονται. Τι πρέπει να κάνω εδώ? Παραθέτω ένα μέρος του κώδικα. Ευχαριστώ πολύ.

if($_POST['submit']){
if ($periohi) {
if( count($_POST['periohi']) > 0){
$periohi = implode(',',$_POST['periohi']);
$str.= ' periohi IN ('.$periohi.')';
}

if(count($_POST['orofos']) > 0) {
$orofos = implode(',',$_POST['orofos']);
$str.= ' AND orofos IN ('.$orofos.')';
}

if ($rooms) {
$str.= ' AND rooms >= ('.$rooms.') ';
}

if ($internet){
$str.= ' AND internet > 0 ';
}

$sql = "SELECT * FROM houses WHERE ".$str;
$res = mysql_query($sql) or die(mysql_error());
$num = mysql_num_rows($res);

$per_page = 5;
//get start variable for pagination
$start = $_GET['start']; //starting at 0

if(!$start)
$start = 0;

if($num==0){
echo "Δεν βέθηκαν στοιχεία που να πληρούν τα κριτήρια αναζήτησής σας. <br /> <a href='advanced_search.php'> Προσπαθήστε ξανά </a> . ";
}
else {
echo "Βρέθηκαν συνολικά $num σπίτια που να πληρούν τα κριτήρια αναζήτησής σας. <br /><br />";
$sql1 = "SELECT * FROM houses WHERE ".$str;
$sql1.= "LIMIT $start, $per_page" ;
$sql2 = mysql_query($sql1);
while ($row = mysql_fetch_assoc($sql2)){
$user_id = $row['member_id'];
$tm = $row['tm'];
$periohi = $row['periohi'];
$i++;
echo "$i.) <a href='other_members_house.php?id=".$user_id."'> Περιοχή:$periohi Τ.μ.:$tm...</a><br /><br />";

}

$prev = $start - $per_page;
$next = $start + $per_page;
//show previous button for pagination
if (!($start<=0))
echo " <a href='advanced_search_results.php?start=$prev'><div class=\"pagination\"><span class=\"button\">« Προηγούμενο</span></div></a> ";

//show page numbers
//set variable for first page
$j=1;
for ($x=0;$x<$num;$x=$x+$per_page){
if($start!=$x)
echo " <a href='advanced_search_results.php?start=$x'><div class=\"pagination\"><span class=\"disabled\">$j</span></div></a> ";
else
echo " <a href='advanced_search_results.php?start=$x'><div class=\"pagination\"><span class=\"current\">$j</span></div></a> ";
$j++;
}

//show next button for pagination
if (!($start>=$num-$per_page))
echo " <a href='advanced_search_results.php?start=$next'><div class=\"pagination\"><span class=\"button\">Επόμενο »</span></div></a> ";

}
}
else echo "Πρέπει να επιλέξετε τουλάχιστον περιοχή αναζήτησης. <br /> <a href='advanced_search.php'> Επιστροφή </a> .";
}
else echo "Πρέπει να πατήσετε το κουμπί \"Αναζήτηση\". <br /> <a href='advanced_search.php'> Επιστροφή </a> . ";

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Check "Any" σε search form

Δημοσίευση από jpk » 19 Απρ 2011 13:46

Δεν υπάρχει $_POST['submit'] στην περίπτωση του link επόμενο &#8211; προηγούμενο. Πάντως ο cherouvim έχει δίκιο, ρίξε μια ματιά στο PDO μια φορά μαθαίνεις να το χρησιμοποιείς και σου λύνει τα χέρια για πάντα.

elenaz
Δημοσιεύσεις: 5
Εγγραφή: 19 Απρ 2011 00:54

Check "Any" σε search form

Δημοσίευση από elenaz » 19 Απρ 2011 13:54

Ναι δεν υπάρχει $_POST['submit'] . Απλά πως να αποθηκεύσω τα αποτελέσματα για να εμφανίζονται και στο link επόμενο-προηγουμενο?

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

Check "Any" σε search form

Δημοσίευση από jpk » 19 Απρ 2011 14:17

Βάλε τις μεταβλητές που δομούν το query σου στο session αν υπάρχουν στο post και δούλεψε με αυτές (κάνε τα request στην βάση). Εκεί που ελέγχεις αν είναι $_POST['submit'] πρόσθεσε ή (υπάρχει $_GET['start'] και υπάρχουν οι μεταβλητές που δομούν το query στο session).

elenaz
Δημοσιεύσεις: 5
Εγγραφή: 19 Απρ 2011 00:54

Check "Any" σε search form

Δημοσίευση από elenaz » 19 Απρ 2011 14:20

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

Απάντηση

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

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

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