Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

dropdown vullen met db data + bijkomende problemen

None
29 antwoorden
  • Beste forumleden,

    voor een stageopdracht ben ik bezig met het maken van een website van een kinderportret-fotoproductie bedrijf.

    op deze site kunnen mensen zich inschrijven om lid te worden van de zgn kids club. (manier om aan emailadressen en gegevens van potentiele klanten te komen, in ruil maken hun kans op kaartjes voor pretparken etc.)

    zodoende wordt er een DB gevuld met informatie zoals:

    voorletters, naam, adres, woonplaats, emailadres etc etc.

    dat lukt prima.

    Maar nu:

    ik wil een uitleespagina maken. hier moet een medewerker een woonplaats kunnen selecteren uit een dropdownmenu. als dat gedaan is worden alle leden uit die plaats getoont. (zodoende kan er een mailing naar gestuurd worden). denk aan regionale aanbiedingen etc.

    de velden(woonplaats) in het dropdown menu moeten via een query uit de db gehaald worden.

    let op, dit is geen script request, ik vraag alleen voor een algemene rode leidraad. Ik heb namelijk geen affiniteit met php. heb wel diverse phpboeken en internet als resource.

    ik stuit nu op een problemen:

    stel iemand vult als woonplaats amsterdam in, en een andere Amsterdam.
    beide de zelfde plaats, echter toch 2 unieke waardes (want hoofdletter)

    iemand een suggestie hoe ik hier omheen kan werken?
  • ik ben zojuist aan het zoeken naar een oplossing.

    ik kwam toen uit op ucase.

    dus een soort van select functie in mysql, echter worden dan alle resultaten als uppercase geselecteerd. zit ik hier mee op de goede weg?
  • Zorg dat je de woonplaatsen altijd met een kleine letter in de database stopt.

    Hiervoor kun je bijvoorbeeld Strtolower voor gebruiken wanneer de gebruiker het formulier submit.

    Wanneer je de dropdown samenstelt uit de database gebruik je bijvoorbeeld Ucwords om de eerste letter een hoofdletter te maken.
  • [quote:5b35245a11="D'acide"]ik ben zojuist aan het zoeken naar een oplossing.

    ik kwam toen uit op ucase.

    dus een soort van select functie in mysql, echter worden dan alle resultaten als uppercase geselecteerd. zit ik hier mee op de goede weg?[/quote:5b35245a11]
    Jups, je kunt het alleen ook door PHP laten afhandelen, dat zou ik persoonlijk doen. En ik zou er dus voor zorgen dat de plaatsen al bij het invoeren in de database aan jouw eisen voldoen (dus alleen kleine letters bijvoorbeeld)
  • Ok dank voor je reactie>

    eerst even het volgende.

    ik ben alvast begonnnen met het dropdownmenu. echter zonder de hoofdletterverwerking.

    ik zit hier nu een beetje vast.

    allereeerst de website: deze staat nu zolang op mijn eigen test domein.

    www.planetdust.nl/kpp

    als je naar www.planetdust.nl.kpp/admin.php gaat kan je inloggen.
    ik heb voor dit forum een inlog aangemaakt.
    user: kidprofpo
    pass: aDmin1982

    als je goed ingelogt bent kan je op de adminpagina komen. selecteer hier nu de tweede optie.

    in mijn dropdownlist verschijnen geen plaatsen maar slechts de id's. ook de uitvoer klopt niet.

    ik heb de code uit een boek van kassenaar. Echter heb ik hem volledig aangepast zodat hij voor mij relevant is.

    de code is als volgt:
    [code:1:34c0e7683b]
    <?php
    include("inc/inc_logged_in.php");
    // variabelen initialiseren:
    $username = "kidsprofi";
    $password = "dacide";
    $host="localhost";
    $dbnaam="kpp";
    $query="SELECT * FROM kidsclub";

    // query uitbreiden indien werknemer ID is doorgegeven
    if (!empty($_POST)){
    $query .= " WHERE woonplaats='" . $_POST["woonplaats"] . "'";
    }
    // —- einde initialisatie

    $db=mysql_connect($host, $username, $password) or die (mysql_error());
    mysql_select_db($dbnaam, $db) or die (mysql_error());
    $result = mysql_query($query) or die (mysql_error());
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Kids Profi-Portrait</title>
    <link href="css/stylesheet.css" rel="stylesheet" type="text/css" media="screen" />
    </head>
    <body>
    <div id="holder">
    <div id="toplogo"></div>
    <div id="nav">
    <?php include("inc/inc_nav.php")?>
    </div>
    <div id="subnav">
    <ul>
    <li><a href="admin.php">Administration</a></li>
    </ul>
    <div id="kpplogo"></div>
    </div>
    <div id="content">
    <h1>Administration Controlpanel </h1>
    <h2>Overzicht van alle ingeschreven Kids Club leden in een bepaalde woonplaats </h2>
    <p>Hieronder volgt een overzicht van alle ingeschreven Kids Club leden in een bepaalde woonplaats. Dit overzicht kan gebruikt worden om leden toe te voegen in de mailinglist. </p>
    <p>Selecteer via de dropdownbox een woonplaats.</p>
    <p>&nbsp;</p>
    <?php
    if (empty($_POST)){?>
    <h2>Kies een woonplaats</h2>
    <form name="form1" action="<?php echo($_SERVER["PHP_SELF"]);?>" method="post">
    <p>Woonplaats:
    <select name="woonplaats">
    <?php
    // de selectielijst vullen met beschikbare ID's
    while (list($woonplaats) = mysql_fetch_row($result)){
    echo("<option value=\"$woonplaats\">$woonplaats</option>
    ");
    }?>
    </select>
    <input type="Submit" value="Tonen">
    </p>
    </form>

    <?php
    }else{
    // Als de pagina zichzelf heeft aangeroepen het else-blok uitvoeren
    echo("<h2>Doorgegeven woonplaats: " . $_POST["woonplaats"] . "</h2>
    ");
    while (list($voorletters, $achternaam, $email) =
    mysql_fetch_row($result)){
    echo("$voorletters $achternaam<br>
    ");
    echo("$email<br>
    ");
    echo("<a href=\"" . $_SERVER["PHP_SELF"] . "\">Andere woonplaats
    selecteren</a>");
    }
    }
    // verbinding afsluiten
    mysql_close($db);
    ?>


    </div>
    </div>
    </body>
    </html>
    [/code:1:34c0e7683b]

    zie ik hier iets stoms over het hoofd?
  • De uitvoer klopt wel volgens mij.

    Ik denk dat de waarde $woonplaats een foreign key is naar een tabel met woonplaatsen. Om de woonplaats te krijgen zul je een join moeten leggen met die tabel met woonplaatsen.

    ps: let wel eventjes op SQL injection. Ik weet dat dit beveiligd is met een WW, maar je stopt $_POST waardes rechstreeks in een query..
  • [quote:3f8579e89b="Japaveh"]De uitvoer klopt wel volgens mij.

    Ik denk dat de waarde $woonplaats een foreign key is naar een tabel met woonplaatsen. Om de woonplaats te krijgen zul je een join moeten leggen met die tabel met woonplaatsen.

    ps: let wel eventjes op SQL injection. Ik weet dat dit beveiligd is met een WW, maar je stopt $_POST waardes rechstreeks in een query..[/quote:3f8579e89b]

    hier ga je me even te snel… mijn excuses voor het gebrek aan php kennis.

    wat bedoel je met het maken van een join.

    ik gebruik namelijk maar 1 tabel, en dat is die met de naam: kidsclub.

    dat van die phpinjeciton heb ik laats iets over gelezen ja. het moet idd niet de bedoeling zijn dat het hele systeem in no time te kraken is. Maargoed, in deze fase van het project maakt het allemaal nog niks uit. Maar dank voor de vermelding. hier moet idd iets aan gebeuren voordat de site echt online gaat.
  • In plaats van de hele woonplaats uitgeschreven in je kidsclub tabel te schrijven kun je ook gebruik maken van een tweede tabel die een lijst heeft van alle woonplaatsen. Die ziet er dan bv als volgt uit

    [code:1:cf1331c132]
    Woonplaatsen
    id naam
    1 amsterdam
    2 utrecht
    3 rotterdam
    .. …
    [/code:1:cf1331c132]

    In plaats van nu in je kidsclub de naam van je woonplaats uit te schrijven voeg je alleen het nummer is

    dus
    [code:1:cf1331c132]
    kidsclub
    id voornaam achternaam fk_woonplaats
    1 jan jansen 1
    2 piet pietersma 2
    3 henk henksma 1
    .. ..
    [/code:1:cf1331c132]

    Jan en Henk wonen dus beide in amsterdam. Het veld Fk_woonplaast wordt een foreign key genoemd.

    Aangezien jij een lijst me nummers krijg als je de woonplaats ophaald uit de DB vermoed ik dat je ook zo'n soort contructie hebt. Maar hoe komt de data eigenlijk in je database? Heb je die er zelf ingezet?

    Nu ff over een join: Om nu een lijst te kriigen van alle namen uit je kidsclubtabel met daarbij de bijbehorende plaatsnaam moet je een join leggen tussen de tabel woonplaats en kidsclub. In queryvorm ziet dat er zo uit:

    [code:1:cf1331c132]
    SELECT voornaam, achternaam, woonplaats FROM kidsclub, Woonplaatsen WHERE Woonplaatsen.id = kidsclub.fk_woonplaats
    [/code:1:cf1331c132]
  • ok dank. het is me al wat duidelijker.

    potentiele klanten voegen zich zelf toe aan de lijst.

    zie: www.planetdust.nl/kpp/club.php

    op deze pagina laten ze gegevens achter welke in de database gestopt worden.

    ik gebruik dus maar 1 tabel.

    structuur van die tabel is als volgt:
    (export dump van tabel)


    [code:1:9b61e9c4c1]
    CREATE TABLE `kidsclub` (
    `id` int(8) NOT NULL auto_increment,
    `voorletters` varchar(10) NOT NULL default '',
    `achternaam` varchar(40) NOT NULL default '',
    `adres` varchar(40) default NULL,
    `huisnummer` varchar(8) default NULL,
    `postcode` varchar(6) NOT NULL default '',
    `woonplaats` varchar(40) NOT NULL default '',
    `telefoon` varchar(12) default NULL,
    `email` varchar(40) NOT NULL default '',
    PRIMARY KEY (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=13 ;
    [/code:1:9b61e9c4c1]


    alle php code komt trouwens uit een boek van kassenaar. kan best zijn dat hij misschien wel meerdere tabellen gebruikt ofzo :S
  • [quote:da55e58968="D'acide"]ok dank. het is me al wat duidelijker.

    [code:1:da55e58968]
    CREATE TABLE `kidsclub` (
    `id` int(8) NOT NULL auto_increment,
    `voorletters` varchar(10) NOT NULL default '',
    `achternaam` varchar(40) NOT NULL default '',
    `adres` varchar(40) default NULL,
    `huisnummer` varchar(8) default NULL,
    `postcode` varchar(6) NOT NULL default '',
    `woonplaats` varchar(40) NOT NULL default '',
    `telefoon` varchar(12) default NULL,
    `email` varchar(40) NOT NULL default '',
    PRIMARY KEY (`id`)
    ) TYPE=MyISAM AUTO_INCREMENT=13 ;
    [/code:1:da55e58968]
    [/quote:da55e58968]
    Post anders eens een paar rijen uit die tabel? Gezien de structuur heb je hier niet te maken met FK's
  • bedoel je gewoon zoiets:

    (csv export)

    [code:1:ec75528c2f]
    Database kpp - Tabel kidsclub wordt uitgevoerd op localhost

    1"9";"JAS";"Doenmaker";"adresstraat";"23";"1328QW";"Tilburg";"120956323";"email@mailserver.nl"
    "8";"ABC";"Janssen";"Straatnaam";"23";"1234TY";"Roermond";"1234567890";"test@test.nl"
    "7";"AJM";"Schreurs";"Brugweg";"30";"6102TL";"Echt";"1234567890";"tony@Planetdust.nl"
    "10";"TYU";"Pieters";"Heideweg";"26";"1278TR";"Echt";"1234567890";"Pieters@test.nl"
    "11";"LKJ";"Fokker";"Klantadres";"87";"3468FG";"Sittard";"1235678854";"test@testmail.nl"
    "12";"NAMH";"Ericsson";"Knackebrötlaan";"67";"1287RT";"Kopenhagen";"1234567890";"mötenöke@knackebröt.de"



    [/code:1:ec75528c2f]
  • hmm het valt me nu op dat de waarden in mijn dropdownlist (de cijfers) precies overeenkomen met de ID's die in mijn tabel zitten.

    echter ik verwijs toch nergens naar die id's .. of ben ik scheel?

    [EDIT]

    Ok, eerste probleem is opgelost. een vriend heeft me ff geholpen via msn.
    hij gaf me de volgende query:

    SELECT DISTINCT upper( woonplaats )
    FROM kidsclub WHERE woonplaats='" . $_POST["woonplaats"]

    ipv de oude query: SELECT * FROM kidsclub WHERE woonplaats='" . $_POST["woonplaats"]

    ik zie nu eindelijk de plaatsnamen in de lijst staan.

    nu nog werken aan de uitvoer. want die klopt namelijk niet.
  • Weer een update van mij.

    ik kom er maar niet uit.

    probleem is het volgende…

    ik gebruik in de header de volgende code:
    [code:1:c44a4a2b39]
    <?php
    include("inc/inc_logged_in.php");
    // variabelen initialiseren:
    $username = "xxx";
    $password = "xxx";
    $host="localhost";
    $dbnaam="kpp";
    $query="SELECT DISTINCT upper( woonplaats )
    FROM kidsclub";

    // query uitbreiden indien werknemer ID is doorgegeven
    if (!empty($_POST)){
    $query .= " WHERE woonplaats='" . $_POST["woonplaats"] . "'";
    }
    // —- einde initialisatie
    [/code:1:c44a4a2b39]

    in mijn formulier gebruik ik de volgende code:
    [code:1:c44a4a2b39]
    <form name="form1" action="<?php echo($_SERVER["PHP_SELF"]);?>" method="post">
    <p>Woonplaats:
    <select name="woonplaats">
    <?php
    // de selectielijst vullen met beschikbare ID's
    while (list($woonplaats) = mysql_fetch_row($result)){
    echo("<option value=\"$woonplaats\">$woonplaats</option>
    ");
    }?>
    </select>
    <input type="Submit" value="Tonen">
    </p>
    </form>

    <?php
    }else{
    // Als de pagina zichzelf heeft aangeroepen het else-blok uitvoeren
    echo("<h2>Doorgegeven woonplaats: " . $_POST["woonplaats"] . "</h2>
    ");
    while (list($voorletters, $achternaam, $email) =
    mysql_fetch_row($result)){
    echo("$voorletters $achternaam<br>
    ");
    echo("$email<br>
    ");
    echo("<a href=\"" . $_SERVER["PHP_SELF"] . "\">Andere woonplaats
    selecteren</a>");
    }
    }
    // verbinding afsluiten
    mysql_close($db);
    ?>
    [/code:1:c44a4a2b39]


    het grote probleem is nu dat de inhoud van de dropdown list wel correct is, echter de uitvoer niet. als ik namelijk een woonplaats selecteer, bv roermond, dan geeft hij mij als uitvoer ook "roermond"

    ik overzie nu het gehele probleem niet meer.

    is het soms nodig om twee queries te gebruiken? Dus 1tje voor de dropdown list te vullen en 1tje voor alle records in deze woonplaats weer te geven.

    ik weet t even niet meer.
  • Zie dit stukje code:
    [code:1:0738f1f5d9]
    echo("<option value=\"$woonplaats\">$woonplaats</option>
    ");
    [/code:1:0738f1f5d9]
    De uitvoer is de waarde die tussen [b:0738f1f5d9]value[/b:0738f1f5d9] staat.

    Wanneer de woonplaats geselecteerd is wordt je query bovenaan immers aangepast.
    [code:1:0738f1f5d9]
    // query uitbreiden indien werknemer ID is doorgegeven
    if (!empty($_POST)){
    $query .= " WHERE woonplaats='" . $_POST["woonplaats"] . "'";
    }
    [/code:1:0738f1f5d9]

    Doe eens een print $query na deze regel, dan kun je zien wat er gebeurd.
  • heb de code aangepast tot dit:

    [code:1:c5207a6a07]
    <?php
    include("inc/inc_logged_in.php");
    // variabelen initialiseren:
    $username = "kidsprofi";
    $password = "dacide";
    $host="localhost";
    $dbnaam="kpp";
    $query1="SELECT DISTINCT upper( woonplaats )
    FROM kidsclub";


    // query uitbreiden indien woonplaats is doorgegeven
    if (!empty($_POST)){
    $query1 .= " WHERE woonplaats='" . $_POST["woonplaats"] . "'";
    print $query1;
    }

    // —- einde initialisatie
    [/code:1:c5207a6a07]

    de uitvoer is nu
    Query was empty

    Lijkt me niet echt goed
    :-?
  • [quote:4ab3331e8a="D'acide"]heb de code aangepast tot dit:

    [code:1:4ab3331e8a]
    <?php
    include("inc/inc_logged_in.php");
    // variabelen initialiseren:
    $username = "kidsprofi";
    $password = "dacide";
    $host="localhost";
    $dbnaam="kpp";
    $query1="SELECT DISTINCT upper( woonplaats )
    FROM kidsclub";


    // query uitbreiden indien woonplaats is doorgegeven
    if (!empty($_POST)){
    $query1 .= " WHERE woonplaats='" . $_POST["woonplaats"] . "'";
    print $query1;
    }

    // —- einde initialisatie
    [/code:1:4ab3331e8a]

    de uitvoer is nu
    Query was empty

    Lijkt me niet echt goed
    :-?[/quote:4ab3331e8a]

    Dat die query empty is komt wss omdat je hem hebt hernoemd naar query1. In de originele code staat immers:
    [code:1:4ab3331e8a]
    $result = mysql_query($query) or die (mysql_error());
    [/code:1:4ab3331e8a]

    Doe eens die print $query buiten dat if (!empy($_POST)) statement

    Verander if (!empy($_POST)) eens in if (!empy($_POST['woonplaats']))

    En tot slot, zet dit eens bovenaan je code

    [code:1:4ab3331e8a]
    print "<pre>";
    print_r($_REQUEST);
    print "</pre>";
    [/code:1:4ab3331e8a]

    Dat geeft de inhoud van je POST, GET en COOKIE variabelen. Dit is erg verhelderend bij het debuggen vind ik zelf.
  • ik heb de code aangepast
    [code:1:bfee53444f]
    <?php
    include("inc/inc_logged_in.php");
    // variabelen initialiseren:
    print "<pre>";
    print_r($_REQUEST);
    print "</pre>";
    $username = "kidsprofi";
    $password = "dacide";
    $host="localhost";
    $dbnaam="kpp";
    $query1="SELECT DISTINCT upper( woonplaats )
    FROM kidsclub";
    // query uitbreiden indien woonplaats is doorgegeven
    if (!empty($_POST)){
    $query1 .= " WHERE woonplaats='" . $_POST["woonplaats"] . "'";
    }
    print $query1;
    // —- einde initialisatie
    $db=mysql_connect($host, $username, $password) or die (mysql_error());
    mysql_select_db($dbnaam, $db) or die (mysql_error());
    $result = mysql_query($query1) or die (mysql_error());
    ?>
    [/code:1:bfee53444f]

    de uitvoer is nu:

    [quote:bfee53444f]
    Array
    (
    [PHPSESSID] => 8f618a82344a968697a123694018020d
    )

    SELECT DISTINCT upper( woonplaats ) FROM kidsclub
    [/quote:bfee53444f]

    na dit stukje verschijnt dan gewoon de website. echter zonder velden in het dropdown menu.
  • sorrymijn fout..

    de uitvoer is nu hetzelfde als bovenstaand bericht. echter wordft het menu wel goed weergegeven.
    (had die fout er nog in: $query –> $query1 en $result –> $result2.
  • en wat als je er

    [code:1:ecd3aa02b9]
    SELECT UPPER (woonplaats) AS woonplaats, voorletters, achternaam, email , etc FROM ….
    [/code:1:ecd3aa02b9]

    van maakt? Je haalt nu enkel de woonplaats er uit.
  • als ik de query verander naar

    $query1="SELECT UPPER (woonplaats) AS woonplaats, voorletters, achternaam, email FROM kidsclub";

    dan geeft ie alle plaatsen weer in het dropdown menu.

    dus ipv tilburg, roermond, echt, sittard (dus opsomming van plaatsen) zegt hij dan: tilburg, roermond, echt, echt, sittard, kopenhagen, echt,
    hij noemt dus expliciet elke woonplaats record..

    volgens mij moet ik dan toch weer zo'n select distinct erin zetten . toch?

    eens even proberen…

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.