option value selected & mogleijk om alle records toch te showen?

Status
Niet open voor verdere reacties.

thapriest

Gebruiker
Lid geworden
28 okt 2009
Berichten
559
Istie weer:P

Ik heb nog 2 vraagjes waar ik niet helemaal uitkom, ik heb deze select boxes:

HTML:
 	  <table width="341" border="0">
        <tr>
          <td width="77">Bestemming:</td>
          <td width="254"><select name="Landen" id="Landen">
		    <option value="">Kies een Bestemming</option>
            <option value="Aruba">Aruba</option>
            <option value="Bonaire">Bonaire</option>
            <option value="Curacao">Curacao</option>
            <option value="Suriname">Suriname</option>
            <option value="Jamaica">Jamaica</option>
            <option value="Saba">Saba</option>
            <option value="Sint Eustatius">St. Eustatius</option>
            <option value="Sint Maarten">St. Maarten</option>
            <option value="Latijns Amerika">Latijns Amerika</option>
          </select></td>
        </tr>
        <tr>
          <td height="22">Sterren:</td>
          <td><select name="sterren" id="sterren">
		    <option value="">Aantal Sterren</option>
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
            <option value="6">6</option>
          </select></td>
        </tr>
      
	  <td height="22">Aanbieding:</td>
       <td><select name="aanbieding" id="aanbieding">
			<option value="">Aleen aanbiedingen zien?</option>
            <option value="">Nee</option>
            <option value="Ja">Ja</option>
			</select></td>
			</tr>
			</table>
  <input type="submit" name="zoekland" id="search" value="Zoek" /></div>
  </body></form>

Welke worden verwerkt in:
PHP:
<?php
//error_reporting( E_ALL );
include 'dbconnect.php';







if ($_SERVER["REQUEST_METHOD"] == "POST") {
$query="SELECT * FROM reizen_aanbod WHERE land='".$_POST['Landen']."' AND sterren='" .$_POST['sterren']."' AND aanbieding='".$_POST['aanbieding']."' ORDER BY titel  ";
        //query uitvoeren
        $result = mysql_query($query) or die(mysql_error());
        while ($record = mysql_fetch_array($result)) {
            
			$titel = $record['titel'];
            $prijs = $record['prijs'];
            $sterren = $record['sterren'];
            $tekst = $record['tekst'];
            $aanbieding = $record['aanbieding'];
            $soort = $record['soort'];
            $accommodatie = $record['accommodatie'];
            $land = $record['land'];

    
 $lijst .= '<div id="tabel">';
 $lijst .=  '<div id="lijstachtergrondtitel">';
 $lijst .= '<table border="0">';
 $lijst .= '<tr>';
 $lijst .=   '<td><B>'. $titel .'</B></td>';
 $lijst .=  '<td> <B><font color="red"> ' .$prijs.' </font></B></td>';
 $lijst .= '</tr>';
 $lijst .= '</table>';
 $lijst .=  '</div>';
 $lijst .=   '<div id="lijstinhoudachtergrond">';
 $lijst .=  '<table border="0" >';
 $lijst .=  '<tr>';
 $lijst .=   '<td>' . $tekst.'</td>';
 $lijst .=  '<td>'. $sterren.'</td>';
 $lijst .= '</tr>';
  
 $lijst .= '</table></div></div>';
  }
    }
 echo $lijst;

  ?>

Hoe krijg ik het voor elkaar, dat wat ik selecteer in die dropdown ook blijft staan in die dropdown?
En de bovenste value in die dropdowns, kan ik daar een waarde zetten zodat hij alle waarden automatisch pakt?
 
je kunt met php achter elke select zetten:

PHP:
echo (isset($_POST['naampost']) && $_POST['naampost'] == 'dezewaarde') ? (checked = "checked") : (NULL);

Wat ik zelf veel fijner vind is om met een eigen form validatie te werken. Op deze manier schrijf je dus een keer iets, en hoef je niet voor alles weer te gaan copy pasten. Ik kan je eventueel wel voorbeelden geven, mocht je interesse hebben.
 
Wat raymond zegt ongeveer, maar volgensmij is het niet checked maar selected ->

Code:
<option value="haas" selected="selected">Haas!</option>

Je kunt niet automatisch een value zetten die alles pakt, maar je kunt wel een speciale value nemen en in je script daarop controleren en die gebruiken voor "alles selecteren".
 
Dank jullie voor de snelle antwoorden.
Euh Raymond, mocht je een klein voorbeeldje hebben hoe dit toe te passen graag:)

En euh hoe pak ik dat op met die ene value die alles pakt?

in de richting van if(isset"valuevooralles" ???

Zou ik niet een else achter mijn eerdte if(isset kunnen maken?
 
Laatst bewerkt:
Ik snap niet echt wat je bedoeld, wat wil je "alles" hebben. Dus ieder land of iets dergelijks?

Met betrekking tot form validatie, kijk eens naar het volgende: http://www.phphulp.nl/php/script/da...lidation/1212/formgenerationenvalidation/883/

Doe gewoon even copy paste, en kijk wat hij doet. Ik heb deze zelf gebruikt als basis, en geheel uitgebouwd om ook te gebruiken voor textareas, selectvalues, radio buttons etc. Misschien kun je ook eens proberen de code te snappen en op die manier ervan leren. Zelf vond ik het namelijk een leuke klus. Mocht je hier interesse in hebben, kan ik je er wel mee helpen. Als je echter slechts een keer zo'n select dingen/formulier gaat gebruiken, is het misschien overbodig om deze richting te kiezen.
 
Ik snap niet echt wat je bedoeld, wat wil je "alles" hebben. Dus ieder land of iets dergelijks?
Sorry had duidelijker moeten zijn.

Wat ik doe is slecteren per land, daarna op ster en daarna verder.(waar ik nu overigens achter kom dat ik dat ook niet goed doe)
Ik wil ze namelijk ook afzonderlijk moeten kunnen selecteren, dus stel ik selecteer geen land maar wil wel alle aanbiedingen op 4 sterren zien..
Wat ik graag zou willen is dat wanneer je niets selecteert hij de volledige lijst uit reizen aanbod ophaalt.

Ik ga eens naar dat voorbeeld kijken, want ik zou er ongetwijfeld meer moeten doen;)dank je.
Hmmm interessant voorbeeld, en ga hem opslaan voor toekomstig gebruik;) Echter hiervoor iets te uitgebreid lijkt me?
Dot wat ik aan het maken ben is een klein zoekveldje, waarin je straks mijn aanbod in kunt zoeken/filteren.
 
Laatst bewerkt:
Je kunt het, wanneer uitgebreid, gebruiken voor ieder select veld, text veld etc.

Anyways, wat jij wil.. Je doet het land zo ophalen
PHP:
// als het land dus gezet is, pak dan de waarde van land
$land = isset($_POST['land']) ? ("land = '$_POST['land']'") : ('land IS NOT NULL');

Je kan in de select ook nog een disabled zetten. Bijv:

HTML:
<option value="" selected = "selected" disabled = "disabled" >-- Kies een land --</option>

Dit is dan voor je query. Hij pakt dan gewoon alle landen waar iets ingevuld staat. Weet niet of je zoiets wil? Anders moet je misschien in een array alle landen zetten, via de array dan select dingen gaan maken. Er zijn in ieder geval heel veel mogelijkheden om het op te lossen.
 
Je kan in de select ook nog een disabled zetten. Bijv:

HTML Code:
1
<option value="" selected = "selected" disabled = "disabled" >-- Kies een land --</option

Dat had ik min of meer al geprobeerd, echter doet ie daar niets mee, als ik de query dan echo krijg ik:


SELECT * FROM accomodations WHERE land_id=" ORDER BY naam
 
Hmmm, ik kan nu wanneer er geen land is geslecteerd allaes laten zien d.m.v:
PHP:
 if(empty($_POST['country'] )){
SELECT * FROM accomodations ORDER BY naam;
         //query uitvoeren
        $result = mysql_query($query) or die(mysql_error());
        while ($record = mysql_fetch_array($result)) {
            
			$land_id=$record['land_id'];
			$code = $record['code'];
            $alias = $record['alias'];
            $naam = $record['naam'];
            $plaats = $record['plaats'];
            $intro = $record['intro'];
            $vanafPrijs = $record['vanafPrijs'];
            $infoAlgemeen = $record['infoAlgemeen'];
            $infoFaciliteiten = $record['infoAlgemeen'];

    
 $lijst .= '<div id="tabel">';
 $lijst .=  '<div id="lijstachtergrondtitel">';
 $lijst .= '<table border="0">';
 $lijst .= '<tr>';
 $lijst .=   '<td><B>'. $naam .'</B></td>';
 $lijst .=  '<td> <B><font color="red"> ' .$vanafPrijs.' </font></B></td>';
 $lijst .= '</tr>';
 $lijst .= '</table>';
 $lijst .=  '</div>';
 $lijst .=   '<div id="lijstinhoudachtergrond">';
 $lijst .=  '<table border="0" >';
 $lijst .=  '<tr>';
 $lijst .=   '<td>' . $infoAlgemeen.'</td>';
 $lijst .=  '<td>'. $land_id.'</td>';
 $lijst .= '</tr>';
  
 $lijst .= '</table></div></div>';
}
}

Ooh ja, ik heb even een adere tabel gebruikt om mee te gaan testen...verder is alles exact hetzelfde.
Maar ik ben bang dat met dit problemen gaat geven wanneer ik ok verder ga selecteren, en ik denk dat het korter zou moeten kunnen....(bedoel nu herhaal ik de gehele while lus, van de query daarboven)
 
Laatst bewerkt:
Hmmm werkt inderdaad niet met meerdere selects:(
Wanneer ik nu de filters aanzet voor sterren, moet ik een waarde zetten voor het aantal sterren, anders krijg ik niets terug?

Dat zit m waarschijnlijk ook (deels) in de query, daar vraag ik om alles in te vullen met AND.
IS daar nog een mogelijkheid voor bijv met en/of?
 
Beste oplossing is om de query op te bouwen met alleen de dingen die je nodig hebt. Als de gebruiker niet een specifieke stad selecteerd, dan komt het " city = 'x'" gedeelte helemaal niet in de WHERE clause van de query terecht.
 
Dat is t m nou juist, ik heb de queru opgebouwd met dingen die ik nodig heb, echter doe ik iets niet goed, want het filteren gaat sowieso niet goed.

Wat ik dus zeg maar wil bereiken:
niets geselecteerd: alles laten zien.
Alleen land geselecteerd: dan alle records van dat land
land+klasse: dan land met alleen die klasse laten zien etc..

PHP:
<?php
//error_reporting( E_ALL );
include 'dbconnect.php';






if ($_SERVER["REQUEST_METHOD"] == "POST") {
$query="SELECT * FROM accomodations WHERE land_id='".$_POST['country']."' OR klasse='".$_POST['star']."' ORDER BY klasse, naam ";
        //query uitvoeren
        $result = mysql_query($query) or die(mysql_error());
        while ($record = mysql_fetch_array($result)) {
            
			$land_id=$record['land_id'];
			$code = $record['code'];
            $alias = $record['alias'];
            $naam = $record['naam'];
            $plaats = $record['plaats'];
            $intro = $record['intro'];
            $vanafPrijs = $record['vanafPrijs'];
            $infoAlgemeen = $record['infoAlgemeen'];
            $infoFaciliteiten = $record['infoAlgemeen'];
			$klasse=$record['klasse'];

    
 $lijst .= '<div id="tabel">';
 $lijst .=  '<div id="lijstachtergrondtitel">';
 $lijst .= '<table border="0">';
 $lijst .= '<tr>';
 $lijst .=   '<td><B>'. $naam .'</B></td>';
 $lijst .=  '<td> <B><font color="red"> ' .$vanafPrijs.' </font></B></td>';
 $lijst .= '</tr>';
 $lijst .= '</table>';
 $lijst .=  '</div>';
 $lijst .=   '<div id="lijstinhoudachtergrond">';
 $lijst .=  '<table border="0" >';
 $lijst .=  '<tr>';
 $lijst .=   '<td>' . $infoAlgemeen.'</td>';
 $lijst .=  '<td>'. $klasse.'</td>';
 $lijst .= '</tr>';
  
 $lijst .= '</table></div></div>';
 

  }
    }
 if(empty ($_POST['country'])){
 $query="SELECT * FROM accomodations ORDER BY klasse, naam";
         //query uitvoeren
        $result = mysql_query($query) or die(mysql_error());
        while ($record = mysql_fetch_array($result)) {
            
			$land_id=$record['land_id'];
			$code = $record['code'];
            $alias = $record['alias'];
            $naam = $record['naam'];
            $plaats = $record['plaats'];
            $intro = $record['intro'];
            $vanafPrijs = $record['vanafPrijs'];
            $infoAlgemeen = $record['infoAlgemeen'];
            $infoFaciliteiten = $record['infoAlgemeen'];
			$klasse= $record['klasse'];

    
 $lijst .= '<div id="tabel">';
 $lijst .=  '<div id="lijstachtergrondtitel">';
 $lijst .= '<table border="0">';
 $lijst .= '<tr>';
 $lijst .=   '<td><B>'. $naam .'</B></td>';
 $lijst .=  '<td> <B><font color="red"> ' .$vanafPrijs.' </font></B></td>';
 $lijst .= '</tr>';
 $lijst .= '</table>';
 $lijst .=  '</div>';
 $lijst .=   '<div id="lijstinhoudachtergrond">';
 $lijst .=  '<table border="0" >';
 $lijst .=  '<tr>';
 $lijst .=   '<td>' . $infoAlgemeen.'</td>';
 $lijst .=  '<td>'. $klasse.'</td>';
 $lijst .= '</tr>';
  
 $lijst .= '</table></div></div>';


  }
 }
 	if (isset($lijst)) {
     echo $lijst;
	 
	
}
 
  ?>
 
Ik denk dat je dan zoiets nodig zal hebben:

PHP:
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Eerst kijken wat er gezet is, aan de hand daarvan een query zetten
    if (isset($_POST['country']) && isset($_POST['star'])) {
        $query= "SELECT * FROM accomodations WHERE land_id='".$_POST['country']."' AND klasse='".$_POST['star']."' ORDER BY klasse, naam ";
    }
    elseif (isset($_POST['country'])) {
        $query= "SELECT * FROM accomodations WHERE land_id='".$_POST['country']."' ORDER BY klasse, naam ";
    }
    elseif(isset($_POST['star'])) {
        $query= "SELECT * FROM accomodations WHERE klasse='".$_POST['star']."' ORDER BY klasse, naam ";
    }
    else {
        //misschien een andere query, anders de elseif hierboven veranderen in else en deze else weghalen
    }
    // hier de query dus uitvoeren
    $result = mysql_query($query) or die(mysql_error());
    while ($record = mysql_fetch_assoc($result)) {   
        $land_id=$record['land_id'];
        $code = $record['code'];
        $alias = $record['alias'];
        $naam = $record['naam'];
        $plaats = $record['plaats'];
        $intro = $record['intro'];
        $vanafPrijs = $record['vanafPrijs'];
        $infoAlgemeen = $record['infoAlgemeen'];
        $infoFaciliteiten = $record['infoAlgemeen'];
        $klasse=$record['klasse'];
        // etc. etc.
    }
} ?>
 
Hmmm, ik heb nu dus op deze manier,

Wanneer ik op sterren alleen selecteer, doet hij dat, en op beide waardes ook, echter op alleen land, of geen criteria invoer, dan laat hij niets zien?

PHP:
<?php
//Als er op verzenden wordt geklikt doe dan:
if ($_SERVER["REQUEST_METHOD"] == "POST") {

     //Eerst kijken wat er gezet is, aan de hand daarvan een query zetten, welke query moet hij pakken
    if (isset($_POST['country']) && isset($_POST['star'])) {
        $query= "SELECT * FROM accomodations WHERE land_id='".$_POST['country']."' AND klasse='".$_POST['star']."' ORDER BY klasse, naam ";
		  
    }
    elseif (isset($_POST['country'])) {
        $query= "SELECT * FROM accomodations WHERE land_id='".$_POST['country']."' ORDER BY klasse, naam ";
		
    }
    elseif(isset($_POST['star'])) {
        $query= "SELECT * FROM accomodations WHERE klasse='".$_POST['star']."' ORDER BY klasse, naam ";
		 
    }
    else {
	echo "Er is een fout opgetreden!";
        
		 
    }
    // hier de query dus uitvoeren
    $result = mysql_query($query) or die(mysql_error());
    while ($record = mysql_fetch_assoc($result)) {   
        $land_id=$record['land_id'];
        $code = $record['code'];
        $alias = $record['alias'];
        $naam = $record['naam'];
        $plaats = $record['plaats'];
        $intro = $record['intro'];
        $vanafPrijs = $record['vanafPrijs'];
        $infoAlgemeen = $record['infoAlgemeen'];
        $infoFaciliteiten = $record['infoAlgemeen'];
        $klasse=$record['klasse'];
        // etc. etc
		
 $lijst .= '<div id="tabel">';
 $lijst .=  '<div id="lijstachtergrondtitel">';
 $lijst .= '<table border="0">';
 $lijst .= '<tr>';
 $lijst .=   '<td><B>'. $naam .'</B></td>';
 $lijst .=  '<td> <B><font color="red"> ' .$vanafPrijs.' </font></B></td>';
 $lijst .= '</tr>';
 $lijst .= '</table>';
 $lijst .=  '</div>';
 $lijst .=   '<div id="lijstinhoudachtergrond">';
 $lijst .=  '<table border="0" >';
 $lijst .=  '<tr>';
 $lijst .=   '<td>' . $infoAlgemeen.'</td>';
 $lijst .=  '<td>'. $klasse.'</td>';
 $lijst .= '</tr>';
  
 $lijst .= '</table></div></div>';

 
	}

    if(isset ($lijst)){
	 echo$lijst;
}
 
 }

  ?>
 
hmmm, op deze manier werkt het , maar doe ik dit goed?

PHP:
<?php
//Als er op verzenden wordt geklikt doe dan:
if ($_SERVER["REQUEST_METHOD"] == "POST") {

     //Eerst kijken wat er gezet is, aan de hand daarvan een query zetten, welke query moet hij pakken
    if (isset($_POST['country']) && isset($_POST['star'])) {
       $query= "SELECT * FROM accomodations WHERE land_id='".$_POST['country']."' AND klasse='".$_POST['star']."' ORDER BY klasse, naam ";
		  
    }
    elseif (isset($_POST['country'])) {
         $query= "SELECT * FROM accomodations WHERE land_id='".$_POST['country']."' ORDER BY klasse, naam ";
		 echo $query;
		
    }
    elseif(isset($_POST['star'])) {
        $query= "SELECT * FROM accomodations WHERE klasse='".$_POST['star']."' ORDER BY klasse, naam ";
		 
    }
    else {	
        $query="SELECT * FROM accomodations ORDER BY klasse, naam";
		
    }
    // hier de query dus uitvoeren
    $result = mysql_query($query) or die(mysql_error());
    while ($record = mysql_fetch_assoc($result)) {   
        $land_id=$record['land_id'];
        $code = $record['code'];
        $alias = $record['alias'];
        $naam = $record['naam'];
        $plaats = $record['plaats'];
        $intro = $record['intro'];
        $vanafPrijs = $record['vanafPrijs'];
        $infoAlgemeen = $record['infoAlgemeen'];
        $infoFaciliteiten = $record['infoAlgemeen'];
        $klasse=$record['klasse'];
        // etc. etc
		
 $lijst .= '<div id="tabel">';
 $lijst .=  '<div id="lijstachtergrondtitel">';
 $lijst .= '<table border="0">';
 $lijst .= '<tr>';
 $lijst .=   '<td><B>'. $naam .'</B></td>';
 $lijst .=  '<td> <B><font color="red"> ' .$vanafPrijs.' </font></B></td>';
 $lijst .= '</tr>';
 $lijst .= '</table>';
 $lijst .=  '</div>';
 $lijst .=   '<div id="lijstinhoudachtergrond">';
 $lijst .=  '<table border="0" >';
 $lijst .=  '<tr>';
 $lijst .=   '<td>' . $infoAlgemeen.'</td>';
 $lijst .=  '<td>'. $klasse.'</td>';
 $lijst .= '</tr>';
  
 $lijst .= '</table></div></div>';

 
	}

    if(isset ($lijst)){
	 echo$lijst;
}
 
 }
echo $query;
  ?>
 
Hier een cleane code ervan, met commentaar her en der

PHP:
<?php
//Als er op verzenden wordt geklikt doe dan:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    //Eerst kijken wat er gezet is, aan de hand daarvan een query zetten, welke query moet hij pakken
    if (isset($_POST['country']) && isset($_POST['star'])) {
        $query = "SELECT * FROM accomodations WHERE land_id='".$_POST['country']."' AND klasse='".$_POST['star']."' ORDER BY klasse, naam ";
    }
    elseif (isset($_POST['country'])) {
        $query = "SELECT * FROM accomodations WHERE land_id='".$_POST['country']."' ORDER BY klasse, naam ";
    }
    elseif(isset($_POST['star'])) {
        $query = "SELECT * FROM accomodations WHERE klasse='".$_POST['star']."' ORDER BY klasse, naam ";
    }
    else {
        $query = "SELECT * FROM accomodations ORDER BY klasse, naam";

    }
    // hier beginnen met lijst te declareren
    $lijst = NULL;
    // hier de query dus uitvoeren
    $result = mysql_query($query) or die(mysql_error());
    while ($record = mysql_fetch_assoc($result)) {
        $land_id = $record['land_id'];
        $code = $record['code'];
        $alias = $record['alias'];
        $naam = $record['naam'];
        $plaats = $record['plaats'];
        $intro = $record['intro'];
        $vanafPrijs = $record['vanafPrijs'];
        $infoAlgemeen = $record['infoAlgemeen'];
        $infoFaciliteiten = $record['infoAlgemeen'];
        $klasse = $record['klasse'];
        // de lijst wordt hier telkens aangevuld, slechts een .= nodig hierbij
        // en nette opmaak
        $lijst .= '
            <div id="tabel">
                <div id="lijstachtergrondtitel">
                    <table border="0">
                        <tr>
                            <td><B>' . $naam .'</B></td>
                            <td> <B><font color="red"> ' . $vanafPrijs . ' </font></B></td>
                        </tr>
                    </table>
                </div>
                <div id="lijstinhoudachtergrond">
                    <table border="0" >
                        <tr>
                            <td>' . $infoAlgemeen . '</td>
                            <td>' . $klasse . '</td>
                        </tr>
                    </table>
                </div>
            </div>';
    }
    // verkorte if else statement
    echo (isset ($lijst)) ? ($lijst) : (NULL);
}
// tonen van je query
echo $query; ?>

Denk dat ie zo wel moet doen wat je wilt, nietwaar?
 
Perfect:)

Maar waarom en wat doe ik dan hier?:
PHP:
$lijst = NULL;
en hier:
PHP:
   echo (isset ($lijst)) ? ($lijst) : (NULL);
.

Ik leer er graag van;)
 
Perfect:)

Maar waarom en wat doe ik dan hier?:
PHP:
$lijst = NULL;
en hier:
PHP:
   echo (isset ($lijst)) ? ($lijst) : (NULL);
.

Ik leer er graag van;)

In de while staat en $lijst .=, en daarom moet $lijst al bestaan. Daarom declareer ik hem daarboven, met $lijst = NULL; (je kan ook $lijst = ''; doen, persoonlijke voorkeur denk ik zo).

Dat onderste is een andere if else constructie. Moet je maar even op internet opzoeken de precieze betekenis. De eerste is de if, wat daarachter staat komt er uit als het waar is, en als laatste is dan wat eruit komt bij de else.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan