Avatar billede snigeren Nybegynder
01. oktober 2007 - 17:20 Der er 14 kommentarer og
1 løsning

if (isset (enhed1))

jeg har følgende sætning:

if(isset ($enhed1)){
mysql_query("insert into shop_enhed (varenr, enhed) values ('$varenr', '$enhed1')") or die(mysql_error());
}

det der så er mit problem er at jeg har felterne enhed1, enhed2,.... enhed10 og for at slippe for at lave ovenstående if(isset(... 10 gange ville jeg høre om ikke man kan skrive det lidt smartere?

tabellen er indrettet sådan at varenr kan være det samme men enhed skal være forskelligt...

den kan se ud som herunder:

varenr          enhed
12345            2700
12345            2900
12345            3100
12345            3300

dvs. den skal altid skrive til feltet "enhed" så den laver en ny linie for hver entry der kommer i tabellen.
Avatar billede nielle Nybegynder
01. oktober 2007 - 18:23 #1
Jeg ville nu have lavet $enhed som et array.

Men ellers kan det gøres nogenlunde sådan:

for ($i=1; $i<=10; $++) {
    $enhedX = "enhed" . $i;

    if (isset($$enhedX)) {
        mysql_query("insert into shop_enhed (varenr, enhed) values ('$varenr', '" . $$enhedX . "')") or die(mysql_error());
    }
}
Avatar billede snigeren Nybegynder
01. oktober 2007 - 18:40 #2
array siger du, hvordan tænkte du?

Jeg indrømmer det er lidt dumt lavet på den måde jeg nu har gjort det(måske).

Lige nu har jeg lavet det så der er 10 enheds felter man kan skrive i. Grunden hertil er at det jo er forskelligt hvor mange forskellige inhedsfelter der kommer i brug og hvis man skriver eller vælger på en drop down hvor mange enheder man vil kunne skrive f.eks. 6 og senere finder ud af at det skulle have været 7 så giver det jo lidt problemer.

Så jeg valgte at lave 10 enhedsfelter eftersom der for det meste er brug for 3-5.

Men hvordan tænkte du array?
Avatar billede nielle Nybegynder
01. oktober 2007 - 18:50 #3
$enhed = array();

$enhed[1] = "enhed nr 1":
$enhed[2] = "enhed nr 2":
$enhed[3] = "enhed nr 3":

for ($i=1; $i<=3; $i++) {
    echo $enhed[$i] . "<br>";
}
Avatar billede zurekk Nybegynder
01. oktober 2007 - 18:59 #4
nielle > Er det ikke smartere/bedre at gøre det i én query?

snigeren > Er ikke helt med =/

Vil du smide 10 rækker i din database, hvor kun 3-5 skal bruges?
Er det så ikke lettere at smide i og fjerne når der nu bliver bedt om det?

$enheder = $_POST['enheder'];
$nums = COUNT( $enheder );
$query = 'INSERT INTO `db` (varenr, enhed) VALUES ';

for( $i = 0; $i < $nums; $i++ )
{
if( !empty( $enheder ) )
{
  $query .= '( ' . $varenr . ', "' . $enheder[$i] . '" ),';
}
}

$query = substr( $query, 0, -1 );

mysql_query( $query );

Så skal du kalde enheds felterne "enheder[]"

Ved ikke om jeg har misforstået, ellers må du lige sige det :-)
Avatar billede nielle Nybegynder
01. oktober 2007 - 19:10 #5
At gøre det i een query vil da absolut være mest skånsomt overfor databasen. :^)
Avatar billede snigeren Nybegynder
01. oktober 2007 - 19:16 #6
hehe zurekk nej nej jeg har bare 10 feltet man kan skrive i på opretvare.php de felter der ikke bliver brugt skulle gerne bare være ligegyldige. Derfor if(isset) så den kun smide ind i db´en hvis der står noget i feltet.

Det tåbelige er jo bare at der er 10 felter at skrive i hvis man kun skal bruge 2. Men hva faen det er vel ikke så vigtigt. =)
Avatar billede snigeren Nybegynder
01. oktober 2007 - 23:40 #7
nielle ->  jeg får fejl i linien med    for ($i=1; $i<=10; $++) {

Parse error: parse error, unexpected T_INC, expecting T_VARIABLE or '$'

hvad kan det skyldes? hvorfor er det der skal 2 $ i de to sidste kodelinier? er det fordi følgende to bliver lagt sammen eller? $enhedX = "enhed" . $i;
sådan så $i bliver puttet før  $enhedX ? oder? =)
Avatar billede zurekk Nybegynder
02. oktober 2007 - 01:29 #8
Der skal bare et "i" i :-)

for ($i=1; $i<=10; $i++) {
Avatar billede nielle Nybegynder
02. oktober 2007 - 06:52 #9
> hvad kan det skyldes? hvorfor er det der skal 2 $ i de to sidste kodelinier?

Det er fordi at $enhedX indeholder navnet på variablen - og derfor vil ${$enhedX} - altså $$enhedX - indeholde værdien af vaiablen med det navn.
Avatar billede snigeren Nybegynder
02. oktober 2007 - 16:31 #10
uhm nu virker det næsten =)

Men den skriver også noget ind i db´en hvor der ikke står noget i "enhed". Så uanset hvor mange felter man udfylder skriver den 10 rækker ind i tabellen.

dvs. den ikke kun tager dem med indhold i... Men er det ikke sådan det skulle kunne virke med if(isset)?
Avatar billede nielle Nybegynder
02. oktober 2007 - 17:49 #11
Tja, det kan jo være at isset() ikke fungere helt som ellers med $$-notationen.

for ($i=1; $i<=10; $++) {
    $enhedX = "enhed" . $i;

    if (isset($$enhedX) && $$enhedX != "") {
        mysql_query("insert into shop_enhed (varenr, enhed) values ('$varenr', '" . $$enhedX . "')") or die(mysql_error());
    }
}
Avatar billede snigeren Nybegynder
02. oktober 2007 - 18:11 #12
ahh så dobbeltsikrer du bare og siger hvis $$enhedX ikke er sat og hvis den IKKE er = 0 så skriv i db´en =)

Men nu virker det ski, smid et svar nielle! =)

Tak for hjælpen! =)
Avatar billede nielle Nybegynder
02. oktober 2007 - 18:16 #13
Svar :^)
Avatar billede snigeren Nybegynder
02. oktober 2007 - 18:37 #14
s'go =)
Avatar billede nielle Nybegynder
02. oktober 2007 - 23:10 #15
Takker :^)
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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