Keuzemenu / MYSQL / PHP

Status
Niet open voor verdere reacties.

BoukeWeening

Gebruiker
Lid geworden
3 apr 2007
Berichten
232
Hallo Allemaal,

Ik heb het volgende probleem. Ik wil graag een keuzemenu maken zoals dit ongeveer:

PHP:
echo '<td >
<SELECT NAME="schooljaar">
<OPTION VALUE="" SELECTED>------ Maak hier je keuze ------</OPTION>
<OPTION>1959-1960</OPTION>
<OPTION>1961-1962</OPTION>
<OPTION>1962-1963</OPTION>
<OPTION>1963-1964</OPTION>
<OPTION>1964-1965</OPTION>
<OPTION>1965-1966</OPTION>
<OPTION>1966-1967</OPTION>
<OPTION>1967-1968</OPTION>
<OPTION>1968-1969</OPTION>
<OPTION>1969-1970</OPTION>
<OPTION>1970-1971</OPTION>
<OPTION>1971-1972</OPTION>
<OPTION>1972-1973</OPTION>
<OPTION>1973-1974</OPTION>
<OPTION>1974-1975</OPTION>
<OPTION>1975-1976</OPTION>
<OPTION>1976-1977</OPTION>
<OPTION>1977-1978</OPTION>
<OPTION>1978-1979</OPTION>
<OPTION>1979-1980</OPTION>
<OPTION>1980-1981</OPTION>
<OPTION>1981-1982</OPTION>
<OPTION>1982-1983</OPTION>
<OPTION>1983-1984</OPTION>
<OPTION>1984-1985</OPTION>
<OPTION>1985-1986</OPTION>
<OPTION>1986-1987</OPTION>
<OPTION>1987-1988</OPTION>
<OPTION>1988-1989</OPTION>
<OPTION>1989-1990</OPTION>
<OPTION>1990-1991</OPTION>
<OPTION>1991-1992</OPTION>
<OPTION>1992-1993</OPTION>
<OPTION>1993-1994</OPTION>
<OPTION>1994-1995</OPTION>
<OPTION>1995-1996</OPTION>
<OPTION>1996-1997</OPTION>
<OPTION>1997-1998</OPTION>
<OPTION>1998-1999</OPTION>
<OPTION>1999-2000</OPTION>
</SELECT> </td>';
echo '</tr><tr><tr><td colspan=2>';

Als je dan een keuze maakt moet er een pop-up scherm verschijnen met daaruit een selectie uit mijn database waarbij hij dus namen toont uit het gekozen jaartal.

Kan iemand mij hierbij helpen?

Alvast bedankt!!!
 
De moeilijkheden zijn waarschijnlijk de verwerking van het jaartal veld. Met een regular expression kun je kijken of de verzonden waarde voldoet aan het formaat <jaartal><streepje><jaartal> en door twee maal substr te gebruiken kun je de jaartallen eruit halen om ze te gebruiken in de query. Met andere woorden:
PHP:
<?php
mysql_connect("localhost" , "naam" , "wachtwoord"); 
mysql_select_db ( "database" );
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST["schooljaar"]) && preg_match("/^(19|20)\d\d-(19|20)\d\d$/i", $_POST["schooljaar"])) {
	$min = substr($_POST["schooljaar"],0,4);
	$max = substr($_POST["schooljaar"],5,4);
	$query = "SELECT  id, naam, jaartal FROM jaar WHERE jaartal >= ".$min." AND jaartal <= ".$max." ORDER BY jaartal ASC";
	$result = mysql_query ( $query );
	while ( $row = mysql_fetch_assoc ( $result ) ) {
		echo $row["naam"]." - ".$row["jaartal"]."<br />";
	}
}
?>
Hierbij neem ik aan dat het jaartal in een integer veld staat, anders de query aanpassen met '".$min."' en '".$max."'

Wat betreft het zetten in een popup... dat zul je met javascript moeten doen en daar weet ik zelf niks van. Bovendien ben ik van mening dat het hele popup fenomeen iets uit de 90er jaren is en ik denk dat veel popups tegenwoordig geblokkeerd worden door popup en adblockers.
 
Laatst bewerkt:
Oke, maar even vanaf het begin want ik kan het niet helemaal volgen, ben geen expert...

Ik maak zo'n keuze lijst als ook hierboven. Op het moment dat ze een keuze maken komt er een pop-up of gewoon een link naar een nieuwe pagina (dat is makkelijker?) met een lijst namen...

Vanaf het begin hoe kan ik dit aanpakken?? :confused:
 
Even ter verduidelijking: Bij het invullen van de database doormiddel van een formulier kiezen ze uit het zelfde keuzemenu...
 
Jouw code is (zo te zien) een deel van een bestaand formulier. Mijn code kun je bovenaan de doelpagina van dat formulier zetten (action="doel.php") zetten en dan zou je een lijst met namen moeten krijgen. Hiervoor zul je in mijn stukje code wel de juiste mysql gegevens moeten invullen (naam, wachtwoord, database) en de query moeten wijzigen zodat die overeenkomt met jouw eigen tabel.
 
Laatst bewerkt:
Dit is het formulier wat ik nu heb:

HTML:
<FORM action="doel.php" method="POST"> <table border=0>
<SELECT NAME="schooljaar">
<OPTION VALUE="" SELECTED>------ Maak hier je keuze ------</OPTION>
<OPTION>1959-1960</OPTION>
<OPTION>1961-1962</OPTION>
<OPTION>1962-1963</OPTION>
<OPTION>1963-1964</OPTION>
<OPTION>1964-1965</OPTION>
<OPTION>1965-1966</OPTION>
<OPTION>1966-1967</OPTION>
<OPTION>1967-1968</OPTION>
<OPTION>1968-1969</OPTION>
<OPTION>1969-1970</OPTION>
<OPTION>1970-1971</OPTION>
<OPTION>1971-1972</OPTION>
<OPTION>1972-1973</OPTION>
<OPTION>1973-1974</OPTION>
<OPTION>1974-1975</OPTION>
<OPTION>1975-1976</OPTION>
<OPTION>1976-1977</OPTION>
<OPTION>1977-1978</OPTION>
<OPTION>1978-1979</OPTION>
<OPTION>1979-1980</OPTION>
<OPTION>1980-1981</OPTION>
<OPTION>1981-1982</OPTION>
<OPTION>1982-1983</OPTION>
<OPTION>1983-1984</OPTION>
<OPTION>1984-1985</OPTION>
<OPTION>1985-1986</OPTION>
<OPTION>1986-1987</OPTION>
<OPTION>1987-1988</OPTION>
<OPTION>1988-1989</OPTION>
<OPTION>1989-1990</OPTION>
<OPTION>1990-1991</OPTION>
<OPTION>1991-1992</OPTION>
<OPTION>1992-1993</OPTION>
<OPTION>1993-1994</OPTION>
<OPTION>1994-1995</OPTION>
<OPTION>1995-1996</OPTION>
<OPTION>1996-1997</OPTION>
<OPTION>1997-1998</OPTION>
<OPTION>1998-1999</OPTION>
<OPTION>1999-2000</OPTION>
</SELECT></FORM></center>

Let wel: ze hebben op dezelfde manier hun jaartal ingevuld. Dus als je je aanmeld moet je ook een van deze jaartallen kiezen. Het hoeft dus volgens mijn niet INTeger te zijn...

Moet ik nu een extra doel.php aanmaken met jouw code?
 
Dit heb ik nu! Ik heb al eerder in het document contact gemaakt met de database... Maar hij doet het nog niet...

PHP:
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST["schooljaar"]) && preg_match("/^(19|20)\d\d-(19|20)\d\d$/i", $_POST["schooljaar"])) {
    $min = substr($_POST["schooljaar"],0,4);
    $max = substr($_POST["schooljaar"],5,4);
    $query = "SELECT  id, naam, jaartal FROM jaar WHERE jaartal >= ".$min." AND jaartal <= ".$max." ORDER BY jaartal ASC";
    $result = mysql_query ( $query );
    while ( $row = mysql_fetch_assoc ( $result ) ) {
        echo $row["naam"]." - ".$row["jaartal"]."<br />";
    }
}
?>
<FORM action="index.php" method="POST"> <table border=0>
<SELECT NAME="schooljaar">
<OPTION VALUE="" SELECTED>------ Maak hier je keuze ------</OPTION>
<OPTION>1959-1960</OPTION>
<OPTION>1961-1962</OPTION>
<OPTION>1962-1963</OPTION>
<OPTION>1963-1964</OPTION>
<OPTION>1964-1965</OPTION>
<OPTION>1965-1966</OPTION>
<OPTION>1966-1967</OPTION>
<OPTION>1967-1968</OPTION>
<OPTION>1968-1969</OPTION>
<OPTION>1969-1970</OPTION>
<OPTION>1970-1971</OPTION>
<OPTION>1971-1972</OPTION>
<OPTION>1972-1973</OPTION>
<OPTION>1973-1974</OPTION>
<OPTION>1974-1975</OPTION>
<OPTION>1975-1976</OPTION>
<OPTION>1976-1977</OPTION>
<OPTION>1977-1978</OPTION>
<OPTION>1978-1979</OPTION>
<OPTION>1979-1980</OPTION>
<OPTION>1980-1981</OPTION>
<OPTION>1981-1982</OPTION>
<OPTION>1982-1983</OPTION>
<OPTION>1983-1984</OPTION>
<OPTION>1984-1985</OPTION>
<OPTION>1985-1986</OPTION>
<OPTION>1986-1987</OPTION>
<OPTION>1987-1988</OPTION>
<OPTION>1988-1989</OPTION>
<OPTION>1989-1990</OPTION>
<OPTION>1990-1991</OPTION>
<OPTION>1991-1992</OPTION>
<OPTION>1992-1993</OPTION>
<OPTION>1993-1994</OPTION>
<OPTION>1994-1995</OPTION>
<OPTION>1995-1996</OPTION>
<OPTION>1996-1997</OPTION>
<OPTION>1997-1998</OPTION>
<OPTION>1998-1999</OPTION>
<OPTION>1999-2000</OPTION>
</SELECT>
<INPUT type="submit" name= "Bekijken" value="Bekijken"></td>
</FORM></center>
 
Je hebt de query nagelopen om te zien of de velden overeenkomen met jouw database? Nu staat mijn query er nog :)
 
Ja, volgens mij klopt het wel: tabel heet: schooljaar en naam... Waar gebruik jij jaartal voor?
 
Het veld "jaartal" gebruik ik uiteraard om de selectie op uit te voeren. Een tabel die bij mijn code past zou er zo uit kunnen zien:

[table="width=12em"]{colsp=3}jaar
id|naam|jaartal
1|Belle|1988
2|Ariel|2000
3|Jasmin|1999[/table]

Het is belangrijk dat je de query aanpast zodat het kan werken met jouw eigen database.
 
Ok, ik had niet begrepen dat de keuzes daadwerkelijk zo in de database staan. Poging twee:
PHP:
<?php
	mysql_connect("localhost" , "naam" , "wachtwoord"); 
	mysql_select_db ( "database" );
	if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST["schooljaar"]) && preg_match("/^(19|20)\d\d-(19|20)\d\d$/i", $_POST["schooljaar"])) {
		$query = "SELECT  Id, Naam, Schooljaar FROM jaar WHERE Schooljaar='".$_POST["schooljaar"]."' ORDER BY Naam ASC";
		if ($result = mysql_query($query)) {
			while ( $row = mysql_fetch_assoc ( $result ) ) {
				echo $row["Naam"]." - ".$row["Schooljaar"]."<br />";
			}
		} else {
			echo "kan de query niet uitvoeren<br />".mysql_error();
		}
	}
?>
 
Laatst bewerkt:
PHP:
<div class="text">
<p>Wilt u vast weten wie zich allemaal meer heeft opgegeven uit uw klas? Klik hieronder op uw eerste schooljaar en u zult het zien!

<?php
    mysql_connect("localhost" , "database" , "wachtwoord"); 
    mysql_select_db ( "hoofdtabel" );
    if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST["schooljaar"]) && preg_match("/^(19|20)\d\d-(19|20)\d\d$/i", $_POST["schooljaar"])) {
        $query = "SELECT  id, naam, schooljaar FROM jaar WHERE schooljaar='".$_POST["schooljaar"]."' ORDER BY Naam ASC";
        if ($result = mysql_query($query)) {
            while ( $row = mysql_fetch_assoc ( $result ) ) {
                echo $row["Naam"]." - ".$row["schooljaar"]."<br />";
            }
        } else {
            echo "kan de query niet uitvoeren<br />".mysql_error();
        }
    }
?>

<FORM action="index.php" method="POST"> <table border=0>
<SELECT NAME="schooljaar">
<OPTION VALUE="" SELECTED>------ Maak hier je keuze ------</OPTION>
<OPTION>1959-1960</OPTION>
<OPTION>1961-1962</OPTION>
<OPTION>1962-1963</OPTION>
<OPTION>1963-1964</OPTION>
<OPTION>1964-1965</OPTION>
<OPTION>1965-1966</OPTION>
<OPTION>1966-1967</OPTION>
<OPTION>1967-1968</OPTION>
<OPTION>1968-1969</OPTION>
<OPTION>1969-1970</OPTION>
<OPTION>1970-1971</OPTION>
<OPTION>1971-1972</OPTION>
<OPTION>1972-1973</OPTION>
<OPTION>1973-1974</OPTION>
<OPTION>1974-1975</OPTION>
<OPTION>1975-1976</OPTION>
<OPTION>1976-1977</OPTION>
<OPTION>1977-1978</OPTION>
<OPTION>1978-1979</OPTION>
<OPTION>1979-1980</OPTION>
<OPTION>1980-1981</OPTION>
<OPTION>1981-1982</OPTION>
<OPTION>1982-1983</OPTION>
<OPTION>1983-1984</OPTION>
<OPTION>1984-1985</OPTION>
<OPTION>1985-1986</OPTION>
<OPTION>1986-1987</OPTION>
<OPTION>1987-1988</OPTION>
<OPTION>1988-1989</OPTION>
<OPTION>1989-1990</OPTION>
<OPTION>1990-1991</OPTION>
<OPTION>1991-1992</OPTION>
<OPTION>1992-1993</OPTION>
<OPTION>1993-1994</OPTION>
<OPTION>1994-1995</OPTION>
<OPTION>1995-1996</OPTION>
<OPTION>1996-1997</OPTION>
<OPTION>1997-1998</OPTION>
<OPTION>1998-1999</OPTION>
<OPTION>1999-2000</OPTION>
</SELECT>
<INPUT type="submit" name= "Bekijken" value="Bekijken"></td>
</FORM></center>


</div>

Ik heb nu dit maar dat werkt nog niet... en ik verander wel het wachtwoord e.d.
 
Kun je de uitvoer van print_r($_POST); geven?

edit: ik zie dat je stiekem weer de kolom namen hebt aangepast. Denk om de hoodletters - Ik had de query zo aangepast dat het voldeed aan de door jou aangegeven kolom namen.
 
Laatst bewerkt:
Ik heb niet het idee dat we zo verder komen, dus ik heb de code uitgebreid met wat meer foutopsporing:
PHP:
<div class="text">
<p>Wilt u vast weten wie zich allemaal meer heeft opgegeven uit uw klas? Klik hieronder op uw eerste schooljaar en u zult het zien!</p>
 
<?php
    mysql_connect("localhost" , "root" , "ww"); 
    mysql_select_db ("helpmij");
    if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST["schooljaar"]) && preg_match("/^(19|20)\d\d-(19|20)\d\d$/i", $_POST["schooljaar"])) {
        $query = "SELECT  id, naam, schooljaar FROM jaar WHERE schooljaar='".$_POST["schooljaar"]."' ORDER BY naam ASC";
        if ($result = mysql_query($query)) {
			if (mysql_num_rows($result)<>0) {
				while ( $row = mysql_fetch_assoc ( $result ) ) {
					echo $row["naam"]." - ".$row["schooljaar"]."<br />";
				}
			} else {
				echo "Er is niemand uit dat schooljaar gevonden";
			}
        } else {
			echo "<fieldset><legend>foutopsporing</legend>";
            echo "kan de query niet uitvoeren:<br />".$query."<br />".mysql_error();
			echo "</fieldset>";
        }
    } else {
		echo "<fieldset><legend>foutopsporing</legend>";
		echo "request_method zou moeten zijn 'POST'. Waarde: ".$_SERVER['REQUEST_METHOD']."<br />";
		echo "schooljaar zou moeten bestaan. Waarde: ".$_POST["schooljaar"]."<br />";
		echo "schooljaar zou aan het formaat yyyy-yyyy moeten voldoen: ".preg_match("/^(19|20)\d\d-(19|20)\d\d$/i", $_POST["schooljaar"]);
		echo "</fieldset>";
	}
?>
 
<FORM action="index.php" method="post"> <table border=0>
<SELECT NAME="schooljaar">
<OPTION VALUE="" SELECTED>------ Maak hier je keuze ------</OPTION>
<OPTION>1959-1960</OPTION>
<OPTION>1961-1962</OPTION>
<OPTION>1962-1963</OPTION>
<OPTION>1963-1964</OPTION>
<OPTION>1964-1965</OPTION>
<OPTION>1965-1966</OPTION>
<OPTION>1966-1967</OPTION>
<OPTION>1967-1968</OPTION>
<OPTION>1968-1969</OPTION>
<OPTION>1969-1970</OPTION>
<OPTION>1970-1971</OPTION>
<OPTION>1971-1972</OPTION>
<OPTION>1972-1973</OPTION>
<OPTION>1973-1974</OPTION>
<OPTION>1974-1975</OPTION>
<OPTION>1975-1976</OPTION>
<OPTION>1976-1977</OPTION>
<OPTION>1977-1978</OPTION>
<OPTION>1978-1979</OPTION>
<OPTION>1979-1980</OPTION>
<OPTION>1980-1981</OPTION>
<OPTION>1981-1982</OPTION>
<OPTION>1982-1983</OPTION>
<OPTION>1983-1984</OPTION>
<OPTION>1984-1985</OPTION>
<OPTION>1985-1986</OPTION>
<OPTION>1986-1987</OPTION>
<OPTION>1987-1988</OPTION>
<OPTION>1988-1989</OPTION>
<OPTION>1989-1990</OPTION>
<OPTION>1990-1991</OPTION>
<OPTION>1991-1992</OPTION>
<OPTION>1992-1993</OPTION>
<OPTION>1993-1994</OPTION>
<OPTION>1994-1995</OPTION>
<OPTION>1995-1996</OPTION>
<OPTION>1996-1997</OPTION>
<OPTION>1997-1998</OPTION>
<OPTION>1998-1999</OPTION>
<OPTION>1999-2000</OPTION>
</SELECT>
<INPUT type="submit" name= "Bekijken" value="Bekijken"></td>
</FORM></center>
 
 
</div>
En ik heb het al een aantal keren gezegd, zorg ervoor dat de kolomnamen in de query overeenkomen met jouw eigen tabel. In jouw laatste code stond "select naam" terwijl 3 regels naar beneden $row["Naam"] stond. "Naam" is niet hetzelfde als "naam" - let op de hoofdletter(s). Succes.

Edit: ik weet dat een deel van de foutopsporing al wordt weergegeven als je de pagina voor het eerst opvraagt. Waar het om gaat is wat je ziet NA het versturen van het formulier.
 
Laatst bewerkt:
Hij geeft nu deze fout:

request_method zou moeten zijn 'POST'. Waarde: GET
schooljaar zou moeten bestaan. Waarde:
schooljaar zou aan het formaat yyyy-yyyy moeten voldoen: 0
 
Dat is zonder dat je iets doet. Wat gebeurt er als je een schooljaar kiest en het formulier verstuurd?
 
klopt, als ik een jaartal kies doet hij dit:

kan de query niet uitvoeren:
SELECT id, naam, schooljaar FROM jaar WHERE schooljaar='1959-1960' ORDER BY Naam ASC
No database selected
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan