[PHP] Brainstorm over dynamische textfields

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Ok, even een kleine brainstorm over een aanzaak van een probleempje ... een reserveringssysteem.

Stel, in een db is een tabel 'gerechten' aanwezig, die bestaat uit de kolommen 'gerecht id, soort, omschrijving, commentaar, prijs, personen'. De tabel zit vol met tientallen gerechten.
Afhankelijk van het aantal personen (grote vd groep) worden gerechten weergegeven of niet (alles is dus dynamisch). De id, omschrijving, prijs, commentaar worden in een tabel weergegeven met daarnaast een textfield waarin men kan aangeven hoeveel en of men het wilt bestellen dmv van een getal.

Ok, leuk en aardig allemaal, maar we willen natuurlijk wel weten welke gerechten men wil bestellen, inclusief het aantal.
Het probleem zit hem in het feit dat ik geen raad weet met de namen van de textfields. Deze zijn tot nu toe de waarde die 'gerecht id' in de tabel heeft.
Maar helaas weet je doordat het een dynamisch form is niet welke namen de variabelen krijgen .... heeft één van jullie mss een ingeving om dit handig op te lossen? Het mooiste zou zijn wanneer je echt losse varioabelen toegezonden krijgt, of een string die je kan knippen.

Helaas kan het volgens mij niet met een array, en dan met de functie implode(), doordat de namen anders zijn .... iemand een idee?

  • Johnny
  • Registratie: December 2001
  • Laatst online: 17-09 16:59

Johnny

ondergewaardeerde internetguru

Je zegt dat de namen nu gerelateerd zijn aan gerecht_id, dan is het toch een nummer?

Op de volgende pagina tel je het aantal rijen in de tabel, doet het in een for() loop, en controleert of een waarde leeg is of niet, in het laaste geval voeg je de waarde toe aan de array.

Daarna zet je alles met implode() in een string en sla je het op.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Verwijderd

Topicstarter
Oops, ik ben te onduidelijk geweest .... 'gerecht id' is de naam van het gerecht intern, dus bijv 'vissalade', 'varkensprut' etc ... het doorsturen van de variabelen is geen probleem. Het aantal rijen tellen is niet relevant, want ik moet de naam van het gerecht weten (dat gerecht id) om te weten welke gerecht men wenst ... daarnaast natuurlijk ook de waarde van textfiled om het aantal te weten te komen ... helaas kom ik er zelf na een dag prutsen nog steeds niet uit :'(

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

is toch simpel
je zet in een input type hidden alle gerechten die je hebt getoond in een comma seperated veld
dus: <input type='hidden' value='21,23,13,12,42' name='gerechtids'>
en dan als je het form verwerkt explode je gerechtids
$grechtids = explode(',', $gerechtids);
Nu weet je welke vars je moet uitlezen
Dus $_POST[$gerechts[$i]] bevat de waarde veld $i
simpel :)

"Beauty is the ultimate defence against complexity." David Gelernter


Verwijderd

Topicstarter
nou, het probleem is nou juist dat je niet weet welke gerechten getoond worden, omdat deze afhankelijk zijn van de grote van de groep .... een beetje lastig dus om een hidden filed in te voegen ...

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

Die velden worden dynamisch getoond door je eerste php script toch? Wanneer je die velden genereerd weet je toch welke je toont?

"Beauty is the ultimate defence against complexity." David Gelernter


  • Johnny
  • Registratie: December 2001
  • Laatst online: 17-09 16:59

Johnny

ondergewaardeerde internetguru

Het probleem is denk ik ook dat je gerechten geen nummer hebben, je maakt het jezelf nu onnodig moeilijk

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

gerecht_id is toch een getal? zo niet, dan is dat fout.

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024

Roa

Zoals al gezegd, geef je gerechten een nummer voor intern gebruik, geen naam, die naam kan je later weer uitlezen door het nummer (bijvoorbeeld $gerechten[$nummer];). Als je dan een nummer hebt is et al een stuk makkelijk. Laat daarnaast eens zien hoe je het formulier aanmaakt, dan is het een stuk makkelijk :P

Research is what I'm doing when I don't know what I'm doing.


Acties:
  • 0 Henk 'm!

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
hmmm..ik volg het niet helemaal wat er nou niet lukt, maar volgens mij loop je te klooien met de namen en getallen.
Een getal in de database is bij jullie in de keuken een naam? zo moet ik het zien?
Als dat zo is dan mag ik aannemen/hopen dat die getallen niet je primary key zijn (aangezien die vast en zeker gewijzigd worden na verloop van tijd), en aangezien ik je ook niet over andere getallen hoor lijkt het er op alsof die primary key helemaal afwezig is.
oplossing is dus om je database design te veranderen.
voeg een auto_increment kolom toe en een veld voor de gerechtnamen. Dan kun je aan dat id zien wat het nummertje in de keuken is en wat de naam van het gerecht is en dan ben je er volgens mij

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Hoe voeren de gebruikers de gegevens in? Als je het met selectboxen of met plu nummers doet dan heb je helemaal geen problemen. Ik neem aan dat je niet van plan was om de gerechten bij naam in te laten voeren? Zo ja->doe toch maar niet ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, er zit wat in, maar dan blijf ik nog even hangen ...
Als je een textfield hebt, heb je een naam + waarde .... wanneer de gebruiker op submit drukt, kan je dmv de naam de waarde opvragen in een volgende stap in een form.
Maar wat als je nu de naam niet weet, en ook de value niet?

Je zou wel de db uit kunnen lezen en één voor één gaan kijken welke gerechten_ids doorgezonden zijn door alle ids af te gaan en kijken of ze bestaan, dan weet je immers de variabele naam en kan je de waarde aflezen .... 'denk dat ik dat dan maar is ga proberen ... wordt wel niet zo'n mooi script denk ik, maar toch, weet zelf niks beterz :)

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Probeer nu eens even heel erg duidelijk uit te leggen wat je precies wilt gaan maken. Eventueel een soort van voorbeeldje van de manier waarop de gegevens worden ingevoerd en hoe ze in de db staan cq. moeten komen.
wordt wel niet zo'n mooi script denk ik, maar toch, weet zelf niks beterz
Ik hoop niet dat jij voor een bedrijf werkt, want anders zou ik niet echt blij zijn met deze instelling van een programmeur/scripter.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
gelukkig doe ik dat dan ook niet djluc :)
ik ga nu ff aan de slag, als ik er niet uitkom, geef ik wel een gil ...

Acties:
  • 0 Henk 'm!

Verwijderd

Macros schreef op 14 August 2003 @ 23:48:
gerecht_id is toch een getal? zo niet, dan is dat fout.
T is misschien niet echt logisch maar zolang die naam maar uniek is niet per definitie fout. Lijkt me trouwens verder ook geen enkel probleem voor jouw oplossing !

dit soort dingen kunnen ook werken:

foreach ($_POST as $key => $value) {
$$key = addslashes($value);
}

of

foreach ($_POST as $key => $value) {
${'prefix_' . $key} = addslashes ($value);
}

Dit trek ik nu zo ff van php.net af je moet dan natuurlijk nog wel ff zo ombouwen dat je je keys opslaat in array zodat je die kan uitlezen. Let wel op t is natuurlijk niet zo'n handige optie als je wil dat dit script beveiligd is, maar dat is misschien in jouw geval niet zo erg ??

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb de code momenteel zo:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
include("config.php"); //maak verbinding met de db
    $query = "SELECT * FROM gerechten WHERE $pers >= '$pax_min' AND soort = 'voorgerecht'"
or die(mysql_error());
    $results = mysql_query($query);
    while ($results_array = mysql_fetch_array($results))
    { 
        $id = $results_array['id']; // waarde uit de kolom ID
        $i = $_POST['$id']; // gepost variabele id
        if ($id == $i)
        {
            echo "gerecht_id = $id en $i<br>"; //even puur als test echoën
        }
        $i++;
    }
?>


Deze code moet neem ik aan werken, maar geeft helaas een error in de uitvoering:

Warning: Supplied argument is not a valid MySQL result resource in /home/sites/site8/web/TESTING/web/reservering.php on line 600

Beetje vreemd, want ik gebruik deze combinatie al jaren zonder enkele error.
Als ik de while-lus weghaal, geeft hij geen fout weer ... ziet iemand wat ik fout heb gedaan?

[ Voor 7% gewijzigd door Verwijderd op 19-08-2003 11:49 ]


Acties:
  • 0 Henk 'm!

Verwijderd

ik neem aan dat regel 600 overeen komt met regel 6 in je stukje code. Wellicht gaat er bij het uitvoeren van de query iets niet goed.

Verander regel 6 eens in :

PHP:
1
$results = mysql_query($query) or die(mysql_error());


Ik denk dat hier een fout naar voren komt. Misschien nog niet de juiste database geselecteerd??

[ Voor 1% gewijzigd door Verwijderd op 19-08-2003 12:01 . Reden: typo ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het is al gelukt, ik kwam erachter dat in de lus een bepaalde variabele niet aanwezig was .... beetje dom natuurlijk ... helaas werkt mijn manier nog niet, omdat de variabelen weer te geven :?

[ Voor 88% gewijzigd door Verwijderd op 19-08-2003 12:11 ]


Acties:
  • 0 Henk 'm!

  • hobbit_be
  • Registratie: November 2002
  • Laatst online: 04-07 12:07
lijkt mij toch dat $pax_min wel degelijk een nummer moet hebben hoor. Hoe kan mySQL nu dat evalueren???

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 12:56
Waar komen die variablen vandaan? Indent die variablen eens en moet je misschien $_POST of $_GET getbruiken?

Verder denk ik dat het verstandig is om je verhaal nu eens duidelijk uiteen te zetten, en dus niet meteen met code te komen maar meer de opzet van je systeem. Oftewel wat geven de users als input wat moet daarmee ghebeuren. Ik denk dat je dan nuttigere reacties zal krijgen.

[ Voor 57% gewijzigd door djluc op 19-08-2003 12:19 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij klopt je hele query gewoon niet:
PHP:
1
2
3
4
5
$query = "SELECT * 
           FROM gerechten 
           WHERE $pers >= '$pax_min' 
           AND soort = 'voorgerecht'" 
           or die(mysql_error());
Het eerste deel van de WHERE ($pers >= '$pax_min' ) lijkt me niet goed. Maar misschien dat dat nog wel goed gaat afhankelijk van de inhoud van je variabelen.

Maar het laatste stuk (or die(mysql_error())) is zeker niet goed. Je verwerkt nu een stuk PHP in een MySQL query.


Wellicht werkt dit beter:
PHP:
1
2
3
4
5
6
7
// Ik denk toch echt dat de $ voor $pers weg moet.....
    $query = "SELECT * 
             FROM gerechten 
             WHERE $pers >= '$pax_min' 
             AND soort = 'voorgerecht'";

    $results = mysql_query($query) or die(mysql_error());


Wellicht helpt het om voor het uitvoeren de query eens weer te geven.

die($query);

Je kan dan zien welke query er geprobeerd wordt uit te voeren, en misschien zie je dan meteen de fout. Lijkt me redelijk basic debuggen.

[ Voor 48% gewijzigd door Verwijderd op 19-08-2003 12:27 . Reden: layout ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De query is goed, alleen wordt een variabele nog niet helemaal goed weergegeven ... ik ga even verder knutselen, ik laat de oplossing weten als ik erachter ben gekomen :-)

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Laten we zeggen dat uit je SQL query het volgende komt:
code:
1
2
3
4
5
ID      Naam            Prijs
---------------------------------------------
 1      Groentesoep     12,50
 3      Salade          13,50
11      Weetikveel      22,00

Dan wordt je FORM dus zo:
code:
1
2
3
4
5
6
7
8
Groentesoep (ID_1)      Aantal [  ]
Salade      (ID_3)      Aantal [  ]
Weetikveel  (ID_11)     Aantal [  ]


<hidden all_ids="1,3,11">

                    Verstuur!

Nu wil je dus weten bij welke gerechten een Aantal is ingevuld en welk getal dan ingevuld is? Dan zou ik het zo doen..

Je geeft elk Aantal-veld de naam: "aantal_$id" , en zoals hierboven al gezegd; maak ook een hidden-field aan met de naam: "all_ids" ofzo. De waarde hiervan is dan "1eID, 2eID, enz.." die je kan toekennen na de while-lus. Dan bij het POSTEN van de data kun je dmv een explode(",",$all_ids) alle IDs verkrijgen die getoond werden. Als je die hebt kun je aan de hand daarvan de verstuurde velden uitlezen.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De code werkt helaas niet, variabelen worden idd net goed doorgezonden, de query is wel goed geformuleerd. $pers is een variabele die al eerder ingevuld is.
In stap31 worden de variabelen gemaakt/aangevinkt, in stap32 worden de variabelen opgehaald.

In de db staan twee voorgerechten die als id 1 en 6 hebben.
P.S.: de textfileds zijn checkboxen geworden.

In stap 31 is een checkbox die als naam de id van het gerecht krijgt .... bijv 1. Dit klopt allemaal, het wordt via de db opgehaald en weergegeven dmv deze code:
PHP:
1
2
3
<?
<input <? echo "name=$id"; ?> type="checkbox" id="voorgerecht">
?>

Deze code wordt nadat de idnaam is opgehaald uit de db, zo weergegeven (in html):
PHP:
1
2
<input name=1 type="checkbox" id="voorgerecht">
<input name=6 type="checkbox" id="voorgerecht">


In stap32 is een code aanwezig die de variabelen opgehaald en vergelijkt met elkaar. Het grote probleem is dat de namen van de checkboxen helemaal dynamisch zijn.
Ten eerste worden er nog veel meer (voor)gerechten in de db gezet, waardoor je nog meer variabelen hebt. Ten tweede worden bepaalde voorgerechten pas getoond als de groep groter is dan de variabele $pers. Je weet dus absoluut niet welke voorgerechten worden weergegeven op het scherm en dus ook helemaal niet welke namen de voorgerechten krijgen en welke men kiest.
Kortom: je weet de namen van de variabelen/checkboxen niet. Ik heb op dit moment even geen flauw idee wat ik bij variabele $i moet invullen....
Het doel is: te weten welke voorgerechten de gebruiker aangevinkt heeft en de later netjes weergeven.
De code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
    include("config.php");
    $query = "SELECT * FROM gerechten WHERE $pers >= '$pax_min' AND soort = 'voorgerecht'"
or die(mysql_error());
    $results = mysql_query($query) or die(mysql_error());
    while ($results_array = mysql_fetch_array($results))
    { 
        $id_db = $results_array['id']; // 1 of 6 dus
        echo "id_db = $id_db<br>";
        $i = ??
        echo "i = $i<br>";
        if ($id_db == $i)
        {
            echo "gerecht_id = $id en $i<br>";
        }
        else { echo "niks<br>"; }
        $i++;
    }
?>


Iemand een idee?

[ Voor 9% gewijzigd door Verwijderd op 19-08-2003 12:41 ]


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Je weet dus absoluut niet welke voorgerechten worden weergegeven op het scherm en dus ook helemaal niet welke namen de voorgerechten krijgen en welke men kiest.
Dat weet je wel. In je DB staan bijv. 3 voorgerechten;

Gerecht A met als id: 1
Gerecht B met als id: 3
Gerecht C met als id: 4

Met de Query komen alleen Gerecht A en B terug, want C klopte niet met de groep. Dan heb je dus A en B, maar de IDs daarvan zijn altijd het zelfde omdat ze vast in de database staan.

Door zoals eerder gezegd een hidden field te maken met een lijst (geschijden door kommas) met alle IDs die je laat zien, weet je dus ook welke IDs op de site staan. En door de waarde van de checkbox te bekijken weet je ook welke de gebruiker heeft gekozen. Sim-pel.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben even met het voorbeeld van deze site bezig geweest, omdat dit ongeveer hetzelfde moet werken.
http://www.devshed.com/Server_Side/PHP/DB_Basics/page6.html

In stap31 heb ik deze checkbox:

PHP:
1
<input name="VOORGERECHT_ARRAY[]" type="checkbox" <? echo "value=$id"; ?>>


In html wordt de 'value=1'.

In stap32 heb ik deze code toegevoegd:

PHP:
1
2
3
4
5
6
    if ($_POST['VOORGERECHT_ARRAY'])
{
    $PET = implode($_POST['VOORGERECHT_ARRAY'], ",");
    
    echo "pet = $PET";
}


Deze methode werkt ok!

[ Voor 39% gewijzigd door Verwijderd op 19-08-2003 13:27 ]


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Misschien heb je hier iets aan, heb ik net ff in elkaar gesmeten...
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
if (isset($_POST['ids'])){

    // Array maken met alle IDs die weergegeven waren
    
    $ID_array = explode(",", $_POST['ids']);


    // Lijst met waardes printen

    echo "De volgende IDs stonden op de vorige pagina:<br><br>";

    foreach ($ID_array as $id){

        echo $id . " met als waarde: " . $_POST[$id] . "<br>" ;

    }

}
?>
<html>
<head>
<title>test</title>
</head>
<body>
<form method="post" action="test.php">
<input type=checkbox name=1 value="dog"> Dog<br>
<input type=checkbox name=2 value="cat"> Cat<br>
<input type=checkbox name=4 value="fish"> Fish<br>
<input type=hidden name=ids value="1,2,4">
<input type="submit" value="Show">
</form>
</body>
</html>

// EDIT

Let er op dat het nadeel (?) van checkboxen is, die geven de waarde die je hebt ingesteld terug als die ge-checked is, of helemaal niets als die niet ge-checked is. Dus een drop-down of textfield lijkt me opzich wel beter, heb je nog iets aan de waarde die wordt gepost. :)

[ Voor 34% gewijzigd door OkkE op 19-08-2003 13:41 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
OkkE, je hebt helemaal gelijk. De code die je poste is handig, omdat ik de id weer moet vertalen naar de titels van het gerecht en de interne naam in het eetcafe.
Ik doe dit met deze code in stap32, waar de array dus binnengehaald wordt.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
    if ($_POST['VOORGERECHT_ARRAY'])
{
    $voorgerecht = implode($_POST['VOORGERECHT_ARRAY'], ",");
        $pieces = explode(",", $voorgerecht);
        
        include("config.php");
        $query = "SELECT * FROM gerechten WHERE $pers >= '$pax_min' AND soort = 'voorgerecht'
ORDER BY id DESC" or die(mysql_error());
        $results = mysql_query($query) or die(mysql_error());
        while ($results_array = mysql_fetch_array($results))
        { 
            $id_db = $results_array['id']; // id uit db
            $titel = $results_array['titel']; // titel gerecht uit db
            foreach ( $pieces[] as $id_db ) //zodra geposte ids gelijk zijn aan een vd mogelijke ids uit de db dan moet die dit doen
            {
                echo "$titel <br>";
            }
        }
}
?>

Het enige probleem is dat ik de foreach functie nog nooit gebruikt heb, deze werkt dus ook niet naar behoren :+ ....

Invalid argument supplied for foreach() is de foutmelding.

PHP.net is voor mij helaas niet echt duidelijk genoeg, tenminste ... het lukt elke keer niet, terwijl ik diverse combinaties geprobeerd heb ....

[ Voor 24% gewijzigd door Verwijderd op 19-08-2003 14:14 ]


Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

PHP:
1
if ($_POST['VOORGERECHT_ARRAY'])
Ik neem aan dat dit dan zo'n hidden field is met alle IDs gescheiden door een komma?
PHP:
1
2
$voorgerecht = implode($_POST['VOORGERECHT_ARRAY'], ",");
    $pieces = explode(",", $voorgerecht);
Dit is volkomen bullshit, eerst plak je alle waardes aan elkaar met een komma er tussen en de regel erna splits je alles weer op komma. $_POST['voorgerecht_array'] is dus gelijk aan $pieses, en dus zijn de 2 stappen IMO overbodig. :)
PHP:
1
$query = "SELECT * FROM gerechten WHERE $pers >= '$pax_min' AND soort = 'voorgerecht' ORDER BY id DESC" or die(mysql_error());
Ik vraag me nog steeds af waarom $pers een variabele is, aangezien het toch een veld in je database is, die ltijd gelijk is lijkt me. En die "or die()" hoeft er hier niet achter.. 8)7
PHP:
1
foreach ( $pieces[] as $id_db )
De [] hoeven/moeten er niet bij staan. Gewoon $pieses dus.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
haha ... had even de functie implode() en explode() evenals foreach() geprobeerd, maar iets teveel gekopieerd naar het forum ... hij geeft ze nu idd goed weer, alleen wel twee keer :P

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
if ($_POST['VOORGERECHT_ARRAY'])
{
    $voorgerecht = $_POST['VOORGERECHT_ARRAY'];
    include("config.php");
    $query = "SELECT * FROM gerechten WHERE $pers >= 'pax_min'
AND soort = 'voorgerecht' ORDER BY id DESC";
    $results = mysql_query($query) or die(mysql_error());
    while ($results_array = mysql_fetch_array($results))
    { 
        $id_db = $results_array['id'];
        $titel = $results_array['titel'];
        foreach ( $voorgerecht as $id_db )
        {
            echo "$titel <br>";
        }
    }
}
?>

Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
if ($_POST['VOORGERECHT_ARRAY'])


indien deze POST-variabele niet is geset levert dit een foutmeliding op. Beter zou zijn om

PHP:
1
if (isset($_POST['VOORGERECHT_ARRAY']))


te gebruiken

Zoals ik en anderen al eerder hebben gezegd snap ik nog niet echt het nut van de query. De die() en de variabele kolomnaam zijn onzinnig. Sterker nog. In de code die je geeft bestaat $pers helemaal niet, dus dat kan niet goedgaan.

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Verwijderd schreef op 19 August 2003 @ 14:32:
haha ... had even de functie implode() en explode() evenals foreach() geprobeerd, maar iets teveel gekopieerd naar het forum ... hij geeft ze nu idd goed weer, alleen wel twee keer :P

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
if ($_POST['VOORGERECHT_ARRAY'])
{
    $voorgerecht = $_POST['VOORGERECHT_ARRAY'];
    include("config.php");
    $query = "SELECT * FROM gerechten WHERE $pers >= 'pax_min'
AND soort = 'voorgerecht' ORDER BY id DESC";
    $results = mysql_query($query) or die(mysql_error());
    while ($results_array = mysql_fetch_array($results))
    { 
        $id_db = $results_array['id'];
        $titel = $results_array['titel'];
        foreach ( $voorgerecht as $id_db )
        {
            echo "$titel <br>";
        }
    }
}
?>
De foreach vervangen door een if..
code:
1
if ( $voorgerecht == $id_db )

[ Voor 12% gewijzigd door OkkE op 19-08-2003 14:43 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit is zoals al gezegd een onderdeel van een reserveringssysteem .... in één van de eerste stappen heeft de gebruiker het aantal personen in moeten voeren ... dit is weer belang voor de gerechten die weergegeven moeten worden op het scherm ... vandaar dus :)

En die if constructie is er al uit, deze was als test opgenomen om te kijken of de variabelen doorgezonden werden ...

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Oke. En als je
PHP:
1
while ($results_array = mysql_fetch_array($results))
vervangt door
PHP:
1
while ($results_array = mysql_fetch_array($result, MYSQL_ASSOC))
..?
Misschien lost dit je probleem op van dubbele resultaten. :)

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
helaas niet OkkE, maar iig geval bedankt :)

Haha, alleen een beetje jammer dat wanneer ik dezelfde code als daarnet weer terugzet, hij nu opeens alles uit de db laat zien die die geselecteerd heeft :+
Maar goed, nu ga ik ff een pauzetje nemen en daar later wel naar kijken :)

Acties:
  • 0 Henk 'm!

  • Theguide
  • Registratie: December 2000
  • Laatst online: 26-06 11:48
PHP:
1
mysql_fetch_array($result, MYSQL_ASSOC)

kan ook als:

PHP:
1
mysql_fetch_assoc($result)

Fuck me if I'm wrong, but isn't your name Gretchen?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik kom nog ff een keertje lastig doen, want volgens mij staat er in deze code helemaal geen fout ... maar toch doet ie het niet goed. Hij geeft nu namelijk altijd alle variabelen weer die die geselecteerd heeft vanuit de database ...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
if ($_POST['VOORGERECHT_ARRAY'])
{
    $voorgerecht = $_POST['VOORGERECHT_ARRAY'];
    include("config.php"); // maak verbinding met db
    $query = "SELECT * FROM gerechten WHERE $pers >= 'pax_min'
AND soort = 'voorgerecht'";
    $results = mysql_query($query) or die(mysql_error());
    while ($results_array = mysql_fetch_array($results))
    { 
        $id_db = $results_array['id']; // waarden uit kolom id
        $titel = $results_array['titel']; // waarden uit de kolom titel
        foreach ( $voorgerecht as $id_db )
        {
            echo "$titel <br>";
        }
    }
}
?>


Zelfs als ik $id_db verander in '6' geeft hij nog alle variabelen weer ... volgens mij gaat er iets fout met de Array voorgerechten ...

Deze wordt alsvolgt doorgegeven:
PHP:
1
<input name="VOORGERECHT_ARRAY[]" type="checkbox" <? echo "value=$id"; ?>>


Heeft iemand een idee, of kan iemand hem testen? Thx ...

Acties:
  • 0 Henk 'm!

  • Theguide
  • Registratie: December 2000
  • Laatst online: 26-06 11:48
Wat denk je te bereiken met die "foreach" regel?
Wat die regel namelijk doet is de $id_db array (waarden uit kolom id) overschrijven met de inhoud van de $voorgerecht array.
Dus, voor elke waarde in de $voorgerecht array wordt nu $titel <br> afgedrukt...

Ik gok, dat dat niet jouw bedoeling was :)
Jij wilt waarschijnlijk voor elke OVEREENKOMSTIGE waarde van $voorgerechten met $id_db de titel van het gerecht afdrukken, correct?

If correct... dan gaat het zo niet werken :)

Fuck me if I'm wrong, but isn't your name Gretchen?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
haha ... klopt.
Ik heb het al met de een if-constructie geprobeerd
PHP:
1
2
3
4
if ( $voorgerecht == $id_db )
{
echo "voorgerecht == id_db";
}


Helaas werkt dit niet, omdat hij niet alles afgaat.

Stel namelijk dat $voorgrecht = 1,6 en dat $id_db = 6,1 dan werkt het al niet meer ....
1 != 6 en 6 !=1.... terwijl als $voorgerecht 1,6 en $id_db = 1,6 doet ie het wel ... snappi ém?
het mooie zou zijn als hij kijkt of een waarde uit voorgerecht overeenkomt met een waarde uit $id-Db, en zodoende alle waardes afgaat ... volgens mij moet in_array() werken ... ik ga weer ff testen :)

[ Voor 7% gewijzigd door Verwijderd op 19-08-2003 17:33 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
de foreach function moet vervangen worden door deze:
PHP:
1
2
3
4
5
6
7
<?
            if (in_array ($id_db, $voorgerecht))
            {
                echo "$titel";
            }

?>

Ik ga nu nog even kijken of die bij andere stappen ook naar behoren werkt .... hier iig wel :)


edit:
Hij doet het perfect hoor!

[ Voor 13% gewijzigd door Verwijderd op 19-08-2003 18:33 ]


Acties:
  • 0 Henk 'm!

  • SartriX
  • Registratie: November 2000
  • Laatst online: 28-12-2023
Wel jammer dat je een week bezig bent met zoiets simpels.
Ook hoop ik voor je baas dat hij je niet betaald hiervoor.

Error 91265748: Incompetent usererror, please replace user.

Pagina: 1