Avatar billede konder Nybegynder
20. februar 2010 - 10:48 Der er 30 kommentarer og
1 løsning

select fra dropdown menu

Jeg har grande problemer med at få værdier videreført fra min dropdownmenu.
Min menu side1:
echo " Antal: <select name='styk[]'>";
$tider = array("","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20");
foreach($tider as $antal)
{
echo  "<option value='$rows[navn]'>";
echo $antal;
echo "</option>";
}
echo"</select>";
På side2 :
if (isset($_POST['styk'])) {
$styk = ($_POST["styk"]);
echo "<BR><BR><B>Desuden følgende ekstra:</B><br>";
for($i=0;$i<count($styk);$i++)
  echo $styk[$i];

Men den skriver istedet samtlige values altså $rows[navn]
og ikke de selectede $antal.
Målet skulle være selectet $antal og tilhørende $rows[navn].
Avatar billede showsource Seniormester
20. februar 2010 - 11:18 #1
Øhh, $rows["navn"] er en "vare" hvor man kan markere antal styk?

Så må du lade navnet indgå i selectname

echo <select name=\"styk[".$rows["navn"].]\">";

for$i = 0; $i < 21; $i++) {
echo"<option value=\"".$i."\">".$i."</option>";
}

echo"</select>";
Avatar billede showsource Seniormester
20. februar 2010 - 11:22 #2
Hvis det er noget du laver inde i en while, og antal mulige styk er fast, kan du med fordel lave en "buffer" for styk, inden din while

$options = "";

for$i = 0; $i < 21; $i++) {
$options .= "<option value=\"".$i."\">".$i."</option>";
}


Og derefter:
while() {

echo <select name=\"styk[".$rows["navn"].]\">";

echo $options;


echo"</select>";

}
Avatar billede konder Nybegynder
20. februar 2010 - 12:05 #3
Jeg sætter stor pris på din hjælp. Jeg er ikke i en WHILE -og jeg har konsekvent kun 2 " og resten' i mine sætninger. Og jeg sidder og fumler med at få scriptet vist. Så ha lidt tålmodighed.
else {
echo $rows["navn"];
echo  "&nbsp; kr.";
echo $rows["kr"];

echo "<select name='styk['.$rows['navn'].']'>";

for ($i = 0; $i < 21; $i++) {
echo"<option value='.$i.'>".$i."</option>";

}
echo "</select>";

echo "<br>";

}
Avatar billede showsource Seniormester
20. februar 2010 - 12:25 #4
øhmm, ja,  er ikke helt med.
Men en go' ting at gøre sig for vane, er enten at bruge ' eller " til phpvars

echo '<select name=\'styk['.$rows['navn'].']\'>';
( eller )
echo '<select name="styk['.$rows['navn'].']">';


samt

echo "<select name=\"styk[".$rows["navn"]."]\">";


Derudover, kan det engang imellem betale sig at bruge "vis kildekode" i din browser.
( du kan opdage evt. fejl du måske laver )
Avatar billede konder Nybegynder
20. februar 2010 - 12:30 #5
Nu er jeg så langt at jeg får vist
9.,.4.,.0.,.0.,.0.
altså rigtig nok antal ved plads 1 -9
og ved plads 2 -4 stk.
Men navnene skrives godtnok ikke

for($i=0;$i<count($styk);$i++)
  echo $styk[$i];

Desværre må jeg lige ud og købe mad.
Avatar billede showsource Seniormester
20. februar 2010 - 12:49 #6
Du viser heller ikke hele din kode.

Men

<select name="styk[et]">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>

<select name="styk[to]">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>

<select name="styk[3]">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
</select>

<?php

foreach($_POST["styk"] as $key => $value) {
echo "<br>".$key." - ".$value;
}

?>
Avatar billede konder Nybegynder
21. februar 2010 - 14:23 #7
Har fået det meste til at virke ;) så du må gerne lægge et svar.
tillægsspg: ved du hvordan får jeg de rigtige decimaler på
echo ($value * $rows["kr"]);
mit felt i db er decimal altså 15.00 kr
Avatar billede konder Nybegynder
21. februar 2010 - 14:48 #8
og mit næste <b>store</b> problem er jo at overføre
hele arrayet
foreach($_POST["styk"] as $key => $value)
til feltet 'varerne' i db.
Avatar billede showsource Seniormester
21. februar 2010 - 20:17 #9
"hvordan får jeg de rigtige decimaler på"
Hvor skal de på henne?

"store problem":
Nu aner jeg intet om din db opbygning, så det er svært at svare.
Avatar billede konder Nybegynder
21. februar 2010 - 21:41 #10
Det er sådan at
$nypris = number_format($value, 2) * number_format($rows["kr"], 2);

giver rigtig $value (4) * rigtig rows["kr"] (30.00) men resultatet bliver hele tiden 12 og ikke 120
alle beregninger kører som dette, altså uden det afgørende 0.

m.h.t. det store problem:
jeg har tænkt måske at lave en select dropdown og så få name og option value ind nogenlunde som du har vist tidligere. og så bruge $_POST til at få det ind i databasen.
eller på en eller anden måde oprette en $SESSION der rummer alle disse data
else {

echo "<br><select name =''>";
echo "<option value=''>";
echo "<br>";
echo "$key";
echo "$value";
echo "stk. a`";
echo  "&nbsp; kr.";
echo $rows["kr"];
echo " pris ialt ";
$nypris = number_format($value, 2) * number_format($rows["kr"], 2);
echo $nypris;
echo "</option>";
echo "</select>";
$_SESSION["oko"] += $nypris;
}
Avatar billede showsource Seniormester
22. februar 2010 - 07:51 #11
number_format()  skal KUN bruges ved visning.
I db og i udregning skal bruges ., f.eks. 12.50

Og jeg kender stadig intet til din tabel opbygning i db.

Brug ikke <br> inde i option.
Brug echo "\n"; elelr echo "\r\n"

echo number_format(($value*$rows["kr"]), 2);

Hvorfor vise den i en option ?
Avatar billede konder Nybegynder
22. februar 2010 - 08:25 #12
Desværre giver det stadig 10 gange så lidt som det burde.
$value er f.eks. 2 og $rows["kr"] er 30.00 men resultatet bliver 6 og ikke 60

Grunden til at vise det i option er fordi jeg så kunne overføre data til db via post.Jeg skal jo have $key + $value med videre til næste side.
Avatar billede showsource Seniormester
22. februar 2010 - 08:59 #13
Hmm, for at få med på næste side, ville jeg bruge sessions, og blot lade visning af varer være en bekræftelse på ønsket køb.

Her er et lille ex. hvor $varer skal svare til navn og pris fra db:

<?php

$varer = array("Pc" => 3400, "Printpapir" => 20.50, "Ram" => 125.50);

print_r($varer);

echo'<p>';
echo'<form action"" method="post">';

foreach($varer as $key => $value) {
echo '<br />'.$key.' à '.$value.' <select name="styk['.$key.']">\r\n';
echo'<option value="">antal:</option>\r\n';

    for($i = 1; $i < 6; $i++) {
    echo'<option value="'.$i.'">'.$i.'</option>\r\n';
    }
echo'</select>';

}

echo'<br><input type="submit" value="Vis"></form>';


if(isset($_POST['styk'])) {

echo'<pre>';
print_r($_POST);
echo'</pre>';

$prisialt = 0;
$varerialt = 0;

    foreach($_POST['styk'] as $key => $value) {

        if(empty($value)) {
        continue;
        }
    $pris = ($varer[$key]*$value);
    echo $key.', antal: '.$value.', pris = '.$pris.'<br>';
    $prisialt += $pris;
    $varerialt += $value;
    }

echo '<p>Ialt '.$varerialt.' til en samlet pris af '.$prisialt;

}


?>
Avatar billede konder Nybegynder
22. februar 2010 - 09:26 #14
Skal desværre på arbejde. Men tak for script. Jeg arbejder med det senere. Men da visningen af varenavn + antal i forvejen er del af formular der sender til sidste opdatering af db, og da jeg i forvejen kun operere med formularer der ikke kræver menneske-indtasning (undtaget mailadresse) synes jeg det passer meget godt at lave det til select option.

Med hensyn til gangestykket er det utroligt at det hele tiden bliver uden nul/tierne. Alle tallene er rigtige i db.
antal(4), kr(30.00) og resultatet stadig 12!
Avatar billede showsource Seniormester
22. februar 2010 - 10:28 #15
Måske du har dit prisfelt som varchar ?

Ved ikke, men anyway, så prøvede jeg med db også:

CREATE TABLE exp_902310 (
  id int(10) unsigned NOT NULL AUTO_INCREMENT,
  varenavn varchar(80) NOT NULL,
  varepris decimal(8,2) NOT NULL,
  PRIMARY KEY (id)
)

INSERT INTO exp_902310 (id, varenavn, varepris) VALUES
(1, 'PC', '3400.00'),
(2, 'Ram', '125.50'),
(3, 'Printer', '899.90'),
(4, 'Printpapir', '25.50')


Og phpkode:

include("conn.php");

$sql = "SELECT varenavn, varepris FROM exp_902310 ORDER BY varenavn ASC";
$rows = mysql_query($sql) or die (mysql_error());

echo'<form action"" method="post">';

while($vare = mysql_fetch_array($rows)) {
echo '<input type="hidden" name="pris['.$vare['varenavn'].']" value="'.$vare['varepris'].'">';
echo '<br />'.$vare['varenavn'].' à '.$vare['varepris'].' <select name="styk['.$vare['varenavn'].']">';
echo'<option value="">Vælg antal:</option>';

    for($i = 1; $i < 6; $i++) {
    echo'<option value="'.$i.'">'.$i.'</option>';
    }
echo'</select>';

}

mysql_free_result($rows);

echo'<br><input type="submit" value="Vis"></form>';

if(isset($_POST['styk'])) {

echo'<pre>';
print_r($_POST);
echo'</pre>';

$prisialt = 0;
$varerialt = 0;

    foreach($_POST['styk'] as $key => $value) {

        if(empty($value)) {
        continue;
        }

    $stkpris =  $_POST["pris"][$key];
    $samletpris = ($value*$stkpris);

    echo $key.', antal: '.$value.', à '.$stkpris.', samlet pris = '.$samletpris.'<br>';

    $prisialt += $samletpris;
    $varerialt += $value;

    }
echo '<p>Ialt '.$varerialt.' varer til en samlet pris af '.$prisialt;

}
Avatar billede konder Nybegynder
22. februar 2010 - 20:56 #16
Så står jeg der altså igen hvor jeg v.h.a. dit forslag skal have gjort
foreach($_POST['styk'] as $key => $value) til en elegant session som jeg kan overføre til db på næste side.
Avatar billede showsource Seniormester
23. februar 2010 - 11:47 #17
if(isset($_POST['styk'])) {

$_SESSION['varekoeb'] = array();

    foreach($_POST['styk'] as $key => $value) {
    $_SESSION['varekoeb'][$key] = array("antal" => $value, "pris" => $stkpris);
    }

echo'<pre>';
print_r($_SESSION);
echo'</pre>';

}

Så har du navn på vare, antal køb af vare, samt stkpris.

Men præcis hvad du vil ha' i db ved jeg jo ikke.
Avatar billede konder Nybegynder
23. februar 2010 - 23:35 #18
Støn...
først er der noget uldent ved sammentællingen. Resultaterne ser sådan ud:
Ekstra kurv, antal: .11., à 20.00, samlet pris = 2.2
Hjernehat, antal: .9., à 20.00, samlet pris = 18
Luksus kurv, antal: .4., à 30.00, samlet pris = 12
Ialt 1.41 varer til en samlet pris af 32.2

dbtabel feltet kr = decimal(7,2) og det står som før nævnt helt rigtigt.(30.00)i db. Jeg har lavet ny dbtabel o.m.a.
desuden får jeg ikke (navn + antal) ind i db, men Array. Jeg bruger altså osse $varer = $_SESSION['varer']; og sætter så $varer ind.  Orker ikke at bruge mere tid nu og går i seng.

if(isset($_POST['styk'])) {
$_SESSION['varer'] = array();
$prisialt = 0;
$varerialt = 0;

    foreach($_POST['styk'] as $key => $value) {

        if(empty($value)) {
        continue;
        }
    $_SESSION['varer'][$key] = array("antal" => $value);

    $stkpris =  $_POST["pris"][$key];
    $samletpris = ($value*$stkpris);

    echo $key.', antal: '.$value.', à '.$stkpris.', samlet pris = '.$samletpris.'<br>';

    $prisialt += $samletpris;
    $varerialt += $value;

    }
echo '<p>Ialt '.$varerialt.' varer til en samlet pris af '.$prisialt;
$_SESSION['pris'] += $prisialt;

}
}
Avatar billede showsource Seniormester
24. februar 2010 - 09:21 #19
I det kode du viser, har du ikke sat session pris før du begynder at lægge til.
Måske det betyder noget ?

Hvis jeg med mit ex. prøver en print_r($_SESSION) får jeg f.eks.:

Array
(

    [varer] => Array
        (
            [Printpapir] => Array
                (
                    [antal] => 4
                    [pris] => 25.50
                )

            [Ram] => Array
                (
                    [antal] => 3
                    [pris] => 125.50
                )

        )

)

Men spm. er nu nok også hvordan du har lavet din tabel, og personligt vælge jeg bruge en query til at hente pris for den enkelte vare.
Avatar billede konder Nybegynder
24. februar 2010 - 10:50 #20
Nu har jeg på en eller anden måde fået de rigtige decimaler på sammenregningen.
Men får desværre stadig array istedet for (navn, antal) når jeg har lavet min session varer. ($_SESSION['pris'] er sat på foregående side)
if(isset($_POST['styk'])) {
$_SESSION['varer'] = array();

$prisialt = 0;
$varerialt = 0;

    foreach($_POST['styk'] as $key => $value) {

        if(empty($value)) {
        continue;
        }
$_SESSION['varer'][$key] = array("antal" => $value);
    $stkpris =  $_POST["pris"][$key];
    $samletpris = ($value*$stkpris);

    echo $key.', antal: '.$value.',stk. à '.$stkpris.', samlet pris = '.$samletpris.' kr.<br>';

    $prisialt += $samletpris;
    $varerialt += $value;

    }
echo '<p>Ialt '.$varerialt.' varer til en samlet pris af '.$prisialt;
echo ' kr.';
}
$_SESSION['pris'] += $prisialt;
}
Avatar billede showsource Seniormester
24. februar 2010 - 11:21 #21
foreach($_POST['styk'] as $key => $value) {

        if(empty($value)) {
        continue;
        }

$_SESSION['varer'][$key] = $value;

}

// Næste side:
$sql = "INSERT INTO dintabel (varenavn, stk) VALUES ";
$addsql = array();
foreach($_SESSION['varer'] as $navn => $antal) {

$addsql[] = "('".$navn."',".$antal.")";
}

$sql .= implode(",",$addsql);

echo $sql;
Avatar billede showsource Seniormester
24. februar 2010 - 11:22 #22
Og ellers er det $_SESSION['varer'][$key]["antal"] du skal ha' fat i.
Avatar billede konder Nybegynder
24. februar 2010 - 11:42 #23
Nu har jeg forsøgt at bruge
$data = serialize($_SESSION['varer']); og det giver flg.:

a:3:{s:11:"Ekstra kurv";a:1:{s:5:"antal";s:1:"1";}s:9:"Hjernehat";a:1:{s:5:"antal";s:1:"2";}s:11:"Muddermaske";a:1:{s:5:"antal";s:1:"3";}}


if(isset($_POST['styk'])) {
$_SESSION['varer'] = array();

$prisialt = 0;
$varerialt = 0;

    foreach($_POST['styk'] as $key => $value) {

        if(empty($value)) {
        continue;
        }
$_SESSION['varer'][$key] = array("antal" => $value);
    $stkpris =  $_POST["pris"][$key];
    $samletpris = ($value*$stkpris);

    echo $key.', antal: '.$value.',stk. à '.$stkpris.', samlet pris = '.$samletpris.' kr.<br>';

    $prisialt += $samletpris;
    $varerialt += $value;

    }
echo '<p>Ialt '.$varerialt.' varer til en samlet pris af '.$prisialt;
echo ' kr.';
}
$_SESSION['pris'] += $prisialt;

$data = serialize($_SESSION['varer']);
echo $data;
}
Avatar billede konder Nybegynder
24. februar 2010 - 12:18 #24
Problemet er at jeg skal have arrayet ind i eet felt i db.
Altså listen af både navn,antal.i feltet varer.
Avatar billede konder Nybegynder
25. februar 2010 - 08:40 #25
Suk. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Ekstra kurv',4),('Hjernehat',4),('Muddermaske',4)','188','and@mail.dk','445')' at line 1
og jeg har brugt:
$addsql = array();
foreach($_SESSION['varer'] as $navn => $antal) {
$addsql[] = "('".$navn."',".$antal.")";
}
$varer .= implode(',',$addsql);

men arbejdet kalder desværre de næste timer.
Avatar billede showsource Seniormester
25. februar 2010 - 10:38 #26
Nåh, konder, inden vi laver mere, er det nok på tide at vide noget om din db opbygning!
Samt vide præcis hvad det er du vil.

Men ellers, så har jeg, udover nævnte tabel i #15, nu en tabel mere:

CREATE TABLE varekoeb_902310 (
  id int(10) unsigned NOT NULL AUTO_INCREMENT,
  varenavn varchar(80) COLLATE latin1_danish_ci NOT NULL,
  antal int(10) unsigned NOT NULL,
  konto int(11) DEFAULT NULL,
  PRIMARY KEY (id)
)

Og flg. script:

<?php
session_start();

include("conn.php");

$sql = "SELECT varenavn, varepris FROM exp_902310 ORDER BY varenavn ASC";
$rows = mysql_query($sql) or die (mysql_error());

echo'<form action="spm_902310.php" method="post">';

while($vare = mysql_fetch_array($rows)) {
echo '<input type="hidden" name="pris['.$vare['varenavn'].']" value="'.$vare['varepris'].'">';
echo '<br />'.$vare['varenavn'].' à '.$vare['varepris'].' <select name="styk['.$vare['varenavn'].']">';
echo'<option value="">Vælg antal:</option>';

    for($i = 1; $i < 6; $i++) {
    echo'<option value="'.$i.'">'.$i.'</option>';
    }
echo'</select>';

}

mysql_free_result($rows);

echo'<br><input type="submit" value="Vis"></form>';

if(isset($_POST['styk'])) {

$_SESSION['varer'] = array();

echo'<pre>';
print_r($_POST);
echo'</pre>';

$prisialt = 0;
$varerialt = 0;

    foreach($_POST['styk'] as $key => $value) {

        if(empty($value)) {
        continue;
        }

    $stkpris =  $_POST["pris"][$key];
    $samletpris = ($value*$stkpris);

    echo $key.', antal: '.$value.', à '.$stkpris.', samlet pris = '.$samletpris.'<br>';
    $prisialt += $samletpris;
    $varerialt += $value;

    $_SESSION['varer'][$key] = $value;

    }

echo '<p>Ialt '.$varerialt.' varer til en samlet pris af '.$prisialt;

echo'<p>';

$sql = "INSERT INTO varekoeb_902310 (varenavn, antal) VALUES ";
$addsql = array();

    foreach($_SESSION['varer'] as $navn => $antal) {
    $addsql[] = "('".$navn."',".$antal.")";
    }

$sql .= implode(",",$addsql);

echo $sql;

echo"<p>";

    if(mysql_query($sql)) {
    echo"Valgte varenavne og antal er gemt i tabel";
    }else{
    echo mysql_error();
    }


echo'<pre>';
print_r($_SESSION);
echo'</pre>';

}

$_SESSION = array();
session_destroy();

?>

Det vil f.eks. være bedre at bruge "vareid" i stedet for navn.
Altså kun bruge navn ved visning, ikke når der skal gemmes i db.
Avatar billede konder Nybegynder
28. februar 2010 - 16:41 #27
Kræver det noget særligt at sætte flere ting ind i eet felt i db.
Jeg kan få arrayet samlet til $varer men får fejl når jeg forsøger at putte det i db.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Lille kurv',10),('stor kurv',10),('',)','223','jens@mail.dk','2700')' at line 1

jeg har brugt
foreach ($_SESSION['varer'] as $navn => $antal) {

    $addsql[] = "('".$navn."',".$antal.")";
 
    }
    $varer = (implode(',',$addsql));
    echo $varer;

$SQL = "INSERT INTO bestil(id, dag, tid, hvad, antal, varer, ordrenr, kundemail, kr) VALUES ('','$dag','$tid','$hvad','$antal','$varer','$ordrenr','$mail','$kr')";
$mq = mysql_query($SQL)or die(mysql_error());
når jeg udskriver $varer ser det således ud:
('Lille kurv',10),('stor kurv',10),('',) den sidste parantes ved jeg ikke hvor kommer fra.
Avatar billede showsource Seniormester
01. marts 2010 - 04:49 #28
Hej du
Det ex. jeg lavede kode til, forudsatte at bestemte felter i tabel fik nye værdier i hver sit row ( varenavn, antal )

Når der så kommer en ) ind i query, så fejler det jo.

INSERT INTO tabel (felt_et, felt_to) VALUES ('værdi_et','værdi_to')

Du får jo noget a'la'
INSERT INTO tabel (felt_et, felt_to) VALUES ('værdi_et','værdi_to'),('værdi_et','værdi_to')
som værdi for ET felt

Og det er lidt kringlet at hjælpe dig, fordi jeg ville bruge en anden db opbygning.
Jeg er ikke særlig "pædagogisk" når det for mig er noget forkert som laves, desværre ! ( Spørg bare min søn!!! )
Avatar billede konder Nybegynder
01. marts 2010 - 08:38 #29
Og du skal have mange tak for hjælpen indtil nu. Jeg behøver ikke yderligere pædagogik.
Jeg har som du har foreslået lagt værdierne i en lille tabel for sig og så oprettet et felt med 'ordrenr' så jeg kan trække de rigtige vare/antal ud for ordren.
Hvis så ordren ikke bliver bekræftiget må jeg jo kunne slette de ordrenr/varer/antal der ikke blev til noget igen pr. automatik(for at de ikke fylder op).
Og så forsøger jeg at finde ud af at sætte en header el. lign. der kan forhindre siden i at blive opdateret og istedet pege på en anden side.
Avatar billede konder Nybegynder
19. september 2010 - 11:34 #30
Skal du ikke have dine veltjente point?
Avatar billede showsource Seniormester
19. september 2010 - 20:19 #31
Johh, hvis jeg har været til hjælp for dig !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



Seneste spørgsmål Seneste aktivitet
37 min siden opkaldside Af hagbartm i Mobiltelefoner
I dag 16:05 win 10 vil ikke boote Af bb69 i Windows
I dag 11:20 Lenovo x390 Af tobberjas i PC
I dag 10:14 Alder i Excel Af Nanarsi i Excel
I dag 09:00 Flere linier på faneblad Af Peder Lund Nielsen i Excel