Partyflock
 
Forumonderwerp · 731910
zullen hier vast wel paar php freakz zitten of nie?
ik heb in mijn database een lijst met leveranciers, die leveranciers wil ik in een drop down menu krijgen van een formulier. maar als ik nou 2 leveranciers heb, krijg ik 2 keer het formulier ( onder elkaar ) met elk een leverancier. hoe krijg ik het voor elkaar om 1 formulier te krijgen met alle leveranciers in het drop down menu?
hier de code: ( midden van de formulier is leverancier )

<?php
error_reporting(E_ALL);
include ("dbconnect1.php");
$query = "SELECT * FROM leveranciers";
$resultaat = mysql_query($query) or die ("Er is iets mis met de database");
while($row = mysql_fetch_object($resultaat)){
?>

Overzicht van de <a href="producten.php">producten</a><br>
Nieuwe leverancier <a href="leverancier.php">toevoegen</a><p>

<form action="producttv.php" method="post" enctype="multipart/form-data">
<table border="0">
<tr><td>Productnaam</td><td><input type="tekst" name="naam"></td></tr>
<tr><td>Prijs</td><td><input type="tekst" name="prijs"></td></tr>
<tr><td>Leverancier</td><td><select name="leverancier">

<OPTION><?php echo $row->naamleverancier; ?>
</select>

</td></tr>
<tr><td>Aantal</td><td><input type name="aantal"</td></tr>
<tr><td valign="top">Opmerking</td><td><TEXTAREA name="opmerking" rows=3 cols=15
wrap="hard"></TEXTAREA></td></tr>
</table>
<BUTTON TYPE="submit">Voegtoe</BUTTON>

<?}?>
laatste aanpassing
 
dan zou dit toch goed moeten zijn lijkt mij, ik kijk nog ff door
In je while loop loop je door je leveranciers heen. Je moet dus in de while loop slechts een <option> printen, niet de hele tabel met de <select> Je code zou dan als volgt worden:

<?php

error_reporting(E_ALL);

include ("dbconnect1.php");

$query = "SELECT * FROM leveranciers";

$resultaat = mysql_query($query) or die ("Er is iets mis met de database");

?>



Overzicht van de <a href="producten.php">producten</a><br>

Nieuwe leverancier <a href="leverancier.php">toevoegen</a><p>



<form action="producttv.php" method="post" enctype="multipart/form-data">

<table border="0">

<tr><td>Productnaam</td><td><input type="tekst" name="naam"></td></tr>

<tr><td>Prijs</td><td><input type="tekst" name="prijs"></td></tr>

<tr><td>Leverancier</td><td>

<select name="leverancier">

<?

// stop html hier en begin alle leveranciers als een option tag the printen

while($row = mysql_fetch_object($resultaat)){

?>

<OPTION value="<?php echo $row->naamleverancier; ?>">text</OPTION>

<?

// stop de loop hier en ga verder met html

}

?>

</select>



</td></tr>

<tr><td>Aantal</td><td><input type name="aantal"</td></tr>

<tr><td valign="top">Opmerking</td><td><TEXTAREA name="opmerking" rows=3 cols=15

wrap="hard"></TEXTAREA></td></tr>

</table>

<BUTTON TYPE="submit">Voegtoe</BUTTON>



Logisch,

IN je while loop maak je het formulier.

dus je moet die while loop ergens anders plaatsen

snap eerlijk gezegd niet precies wat je wilt hebben..
idd, nu ik er over nadenk is dat logisch.
toch heb ik er wel over nagedacht, maar ik zat meer in de richting van 1 formulier met daarin 2 drop down menu's :D snappie :D ( uitgaande van 2 leveranciers )

die OPTION moet wel <OPTION><?php echo $row->naamleverancier; ?></OPTION> zijn, geen value in de option tag.
thnx again narotic
no problem (Y)

Een formulier met 2 dropdowns, dan kan je een van de volgende dingen doen:

1. 2 maal de database query uitvoeren en door de resultaten lopen
2. 1 maal de database query uitvoeren, in een array opslaan en 2 maal door deze array lopen
3. 1 maal de database query uivoeren, hier al html code van genereren (nog niet uitprinten!) en deze html code in de rest opnemen (wil je een voorbeeld, vraag!)
haha ik hoef geen 2 drop downs ;) ik dacht dat ik dat zou krijgen als ik die while lus bij die <OPTION> zou doen van de leverancier ( als ik 2 leveranciers zou hebben )
Was dus niet zo gelukkig.

ow narotic, ik weet niet of dit te veel gevraagt is, of te moeilijk om uit te leggen. in mijn applicatie loop ik al een tijdje tegen een probleem op. het is dus zo dat je producten kan verkopen aan klanten, zodra ik een product aan de klant gekoppeld heb, komt dat product op de "overzicht" pagina.
stel ik heb 4 producten op de overzichtpagina, waarvan er 2 afgerekend moeten worden: ik had in mijn gedachten om achter elk product een selectbox te zetten, en zodra er een vinkje in de box word gezet, en vervolgens op "Submit" ofzo geklikt word, dat de geselecteerde producten op de factuur pagina komen. is dit makkelijk te realiseren?
Ik dacht ook aan dit: zodra er een vinkje word geplaatst, komt er in de database "true" en anders niks ( of false )
op de factuurpagina zou ik dan kunnen zeggen Haal alles uit de database waar naam = true. Ook dit kan ik niet realiseren. Maar als het goed is heb ik ook helemaal geen database hiervoor nodig?

als je niks te doen heb mag je me hiermee helpen :D dit is namelijk het laatste en moeilijkste wat nog gemaakt moet worden ( voor zover ik weet, en op een agenda systeem na, maar een agenda script moet ik maar ergens vandaan jatten )
laatste aanpassing
ow narotic, ik weet niet of dit te veel gevraagt is, of te moeilijk om uit te leggen. in mijn applicatie loop ik al een tijdje tegen een probleem op. het is dus zo dat je producten kan verkopen aan klanten, zodra ik een product aan de klant gekoppeld heb, komt dat product op de "overzicht" pagina.
stel ik heb 4 producten op de overzichtpagina, waarvan er 2 afgerekend moeten worden: ik had in mijn gedachten om achter elk product een selectbox te zetten, en zodra er een vinkje in de box word gezet, en vervolgens op "Submit" ofzo geklikt word, dat de geselecteerde producten op de factuur pagina komen. is dit makkelijk te realiseren?


Het grootste probleem hier is dat je niet weet welke id's op de pagina stonden en niet weet welke erop zullen komen. Echter, deze kan je wel via HTTP handig in een array zetten. Ik heb van dit principe het volgende voorbeeld gemaakt:



<html>

<body>

Contents of the array posted using GET:<br /><br />

<?

$array = $_GET['array'];

echo $array . "<br />";

print_r($array);

?>

<br />END<br /><br />

<form method="GET">

<input type="checkbox" name="array[]" value="foo">Foo<br />

<input type="checkbox" name="array[]" value="bar">Bar<br />

<input type="submit" value="Submit">

</form>

</body>

</html>



Het eerste opvallende hier is dikgedrukt: array[] als naam van 2 checkbox's. Het mooie aan PHP in dit geval is dat het deze form zo parsed dat de verschillende waarden van array[] die meegepost worden nu in aan array zet. Test zelf eens de bovenstaande code en kijk wat er gebeurt. Ik zal voor de rest op dit principe niet te ver in gaan, maar hier wordt het ook uitgelegd: http://www.evolt.org/article/Storing_form_array_data_to_MySQL_using_PHP/18/60222/

De waarden die schuingedrukt zijn komen in de array terecht als je ze gekozen hebt.

Dit principe kun jij bij uitstek gebruiken om producten te speciferen (of dat nou is om te verwijderen of om naar een factuur te verplaatsen, dat doet er niet toe). De opzet die je moet volgen is als volgt:

- Per productregel in de tabel heb je dus een vinkje
- Al deze vinkjes (per product in dat overzicht dus 1) hebben dezelfde name parameter in de <input> tag, bijv: naarfactuur[]
- De waarden van de vinkjes kan je het beste gelijk stellen aan de product id. Immers, je wil uniek een product kunnen specificeren.

Een enkel vinkje zal er dan als volgt uit kunnen zien:
<input type="checkbox" name="naarfactuur[]" value="123"> Product 123 naar factuur verplaatsen


123 is hierboven dan de product id.

Een voorbeeld van hoe je jouw probleem dus kan oplossen is:

formulier:


<form method="GET">

<table>

<tr>

<td>Product 1

<td>Heel goed product

<td><input type="checkbox" name="naarfactuur[]" value="1"> Naar factuur

</tr>

<tr>

<td>Product 2

<td>Iets minder goed product

<td><input type="checkbox" name="naarfactuur[]" value="2"> Naar factuur

</tr>

<tr>

<td>Product 3

<td>Slecht product

<td><input type="checkbox" name="naarfactuur[]" value="3"> Naar factuur

</tr>

<tr>

<td colspan="3"><input type="submit value="Submit">

</tr>

</table



Code waar deze form naar toe gestuurd wordt:



<?

// definieer de array

$naarfactuur = $_GET['naarfactuur'];

// verplaats elk element in de array naar de factuur

foreach($naarfactuur as $prodid)

// zet hier de code wat je moet doen met elk product dat aangevinkt was

}

?>



edit1: ik weet niet zeker of de bovenstaande code qua syntax correct is, maar het idee moet duidelijk zijn. Zo niet, vraag het maar. Sowieso is mijn html code hierboven een beetje sloppy :)

edit2: er zijn ook andere oplossingen, maar die zijn imho minder netjes dan deze. Wil je ze toch weten, vraag maar.
laatste aanpassing
heb nu:

<input type="checkbox" name="naarfactuur" value="<?php echo $obj['prdid'];?>">


code waar form heen gestuurd word:

<?

$naarfactuur = $_GET['naarfactuur'];

foreach($naarfactuur as $prdid)

?>

Ik heb die } weg gehaald, want waar word ermee geopend?
Of ben jij die vergeten?


Nu krijg ik de volgende error: ( zonder die { dus )
Warning: Invalid argument supplied for foreach() in c:\phpdev\www\overzicht.php on line 25
<?

$naarfactuur = $_GET['naarfactuur'];

foreach($naarfactuur as $prdid)

Dus hier moet nog de code komen van wat er gedaan moet worden met die product id's?
hmmz. als op submit gedrukt word, moet factuur.php geopend worden met de producten die aangevinkt waren.
maar hoe krijg je een array naar de volgende pagina vraag ik me af

?>
Ik heb die } weg gehaald, want waar word ermee geopend?
Of ben jij die vergeten?


Die was ik niet vergeten, je hebt die nodig. De foreach() loop is net als de for() loop. De volgende stukken code hebben hetzelfde effect:



<?

$array = array(1, 2, 3, 4, 5);

for($i = 0; $i < sizeof($array); $i++) {

$item = $array[$i];

// rest van de code

}

?>





<?

$array = array(1, 2, 3, 4, 5);

foreach($array as $item) {

$item = $array[$i];

// rest van de code

}

?>



meer info: http://nl.php.net/manual/en/control-structures.foreach.php
i see.
vergat de rede erbij te zetten waarom ik die } weg haalde.
ik krijg een parse error op lijn 27, en daar staat die }
tis nu gelukt hoor..
gewoon

<?
$array = $_GET['array'];
echo $array . "<br />";
print_r($array);
?>

gebruikt en name van de selectbox dus array[]

dus nu heb ik de geselecteerde producten in de array, en nu wil ik de waardes meenemen naar een andere pagina. zalt ff vragen bij phpfreakz ofzo. als ik ut antwoord heb zeg ik ut wel hier
heb nu de array meegenomen naar factuur.php

gebruik dit stukje code op factuur.php:

<?php
if (count($_POST['array']) > 0)
{
foreach ($_POST['array'] as $key => $values)
{
print_r($array);

}

}
?>

die print heb ik er zelf in gezet omdat ik de waardes wil uitlezen maar dat lukt me alleen nog nie :D
kan ik tussen die { en } waar die print staat een query zetten als: query = select * from producten where prdid="array"; of gaat dat op een andere manier?
die print_r($array) hoeft niet in de foreach loop te staan. print_r is gewoone en functie die een array kan uitprinten.

Trouwens, mocht je de id's tussen verschillende PHP pagina's willen verplaatsen (ik zou het proberen te beperken door het gewoon direct naar het juiste script te sturen, maar goed), maak dan als het kan gebruik van de session array:
http://www.php.net/manual/en/ref.session.php


Trouwens, in je foreach loop hoef je niet $key => $value te doen. Hiermee kan je binnen een array van elk element zowel de waarde als de naam krijgen. In een normale array krijg je dan:

0 => foo
1 => bar
2 => partyflock

Aan die 'naam' (hier de cijfers) heb je niet zoveel. Deze constructie is vooral handig bij associatieve arrays als de volgende:



$arr = array();

$arr['foo'] = "bar";

$arr['bar'] = "foo";



foreach($arr as $key => $val) {

echo "$key => $val\n";

}



Dit zal het volgende printen:



foo => bar

bar => foo



I see, nou over die key en value, laat maar lekker zo :D
we zijn al heel eind op weg :D en volgens mij is het nog een klein stukkie.
ik selecteer de producten, klik op submit, kom op factuur.php waar dat scriptje draait.

stel ik maak verbinding met de database en tussen die { en } van dat scriptje ga ik een query zetten.
query = select * van tabel where product_ID = ??????
product id heb ik in die array staan. hoe krijg ik die op de plek van de vraagtekens? en stel ik wil 2 producten afrekenen, doet hij dan die query 2 maal uitvoeren voor elk product dus een keer?
:vaag: :)

Ik vond Pascal al moeilijk genoeg ;)
laatste aanpassing
lol :d
jij maakte altijd irritante muziekjes met pascal waardoor je weer uit de les werd gestuurd :p
whaha oke dan, dat is dus iets wat niet alleen bij ons voorkwam :P
Niet dat er mensen verder kwamen dan die bliepjes haha was wel komisch altijd :P
lol idd, we moesten allemaal programmatjes schrijven maar GEEN programmatjes die muziek maakten, en die roy ( hitmannetjuh ) maakte alleen maar programma's waar muziek uit kwam, van hele symfoniën tot 1 fel geluidje enz.

roy, ga je maar melden bij de congierge" was het elke week :p