Avatar billede kgp43 Nybegynder
21. februar 2004 - 21:54 Der er 102 kommentarer og
1 løsning

Dynamiske felter ind i db

Hejsa,

Jeg er kørt fast. Ved ikke lige hvordan jeg skal gribe dette an.

Først en lille forklaring:
Jeg har en tabel med nogle produkter og en anden med tilhørende priser. Produkter bliver slettet og tilføjet løbende, når et produkt bliver slettet så bliver de tilhørende priser det også. Det er så meningen at jeg skal hente produkt data ud fra db'en (alle rækker), hvorefter brugeren kan tilføje en pris til hver entel produkt (dette er lavet).

Problemet opstår når jeg skal oprette/indsætte priserne i tabellen "prices". Jeg ved ikke hvordan jeg skal lave db query'en, når der skal indættes flere rækker af gangen.

Det er lidt kompliceret at forklare, men jeg håber der er nogle der ved hvad jeg mener. Ellers må jeg prøve at uddybe det lidt bedre.
Avatar billede erikjacobsen Ekspert
21. februar 2004 - 21:56 #1
"indsættes flere rækker af gangen" - du laver en INSERT for hver række
Avatar billede avminarm Juniormester
21. februar 2004 - 21:56 #2
har du prøvet med "foreach" - hvis det er det du mener - vis evt. lidt kode
Avatar billede kgp43 Nybegynder
21. februar 2004 - 21:57 #3
ex.

price.php

- henter alle produkter fra db'en
- laver et felt hvor brugeren kan indtaste en pris, value=$id
- dette gentager sig indtil der ikke er flere produkter

Herefter klikker brugeren på "Submit", hvorefter der bliver oprettet en række for hver pris i tabellen "prices".

Hvordan går jeg når flere data skal "uploades" samtidig?
Avatar billede avminarm Juniormester
21. februar 2004 - 22:01 #4
foreach($_POST['pris'] as $key => $value){
  $sql = "INSERT ..... osv";
}
Avatar billede kgp43 Nybegynder
21. februar 2004 - 22:04 #5
Det kunne misforståes:


Prices.php:

- Henter alle produkter fra db'en
- Der bliver oprettet et felt ud for hver enkelt produkt, hvor brugeren kan indtaste en pris. Value = id på produktet

Brugeren klikker på "Submit", herefter bliver der oprettet en ny række i tabellen "prices" (der bliver henvist til hvilket produkt prisen tilhører)

- Normal ville jeg bare lave en INSERT, men det kan jeg ikke her, da der skal ligges flere data ind på samme tid.
Avatar billede kgp43 Nybegynder
21. februar 2004 - 22:05 #6
avminarm; har du et link til en artikkel (eller noget)? Ved ikke hvordan "foreach" bruges.
Avatar billede avminarm Juniormester
21. februar 2004 - 22:08 #7
kig i manualen: http://dk.php.net/manual/en/control-structures.foreach.php her er gode eksempler
Avatar billede kgp43 Nybegynder
21. februar 2004 - 22:11 #8
Hvor står "$key => $value" for?
Avatar billede kgp43 Nybegynder
21. februar 2004 - 22:12 #9
Forstår meningen i foreach, men kan ikke lige se meningen i "$key => $value". hvad betyder dette?
Avatar billede kgp43 Nybegynder
21. februar 2004 - 22:20 #10
foreach($_POST['pris']

Hvad gør du så når der er flere felter? ex. status, time ect.
Avatar billede avminarm Juniormester
21. februar 2004 - 22:38 #11
prøv at lave en simpel form og send variablerne til en foreach.

Men du kan sagtens bruge flere felter inde i en foreach i eksemplet har jeg antaget at POST['pris'] frem kommer hver gang - dvs hvergang der er en POST['pris'] vil koden blive udført.

$key => $val vil sige POST['pris'] er key og værdien er value

vis lidt kode - så er det nogen gange nemmere
Avatar billede kgp43 Nybegynder
22. februar 2004 - 15:01 #12
Her er noget af min code (på prices.php siden). Som det er lavet nu, skal brugeren submitte for helt enkelt produkt. Jeg vil gerne have det sådan at de kan indsætte alle priserne, hvorefter klikke på én submit knap.

$query3 = mysql_query("SELECT * FROM reels WHERE series_id='$series_id' ORDER BY model ");
while($row3 = mysql_fetch_array($query3)) {
?>
<form name="<? echo $row3[id];?>" method="post" action="add_ok.php">
  <table width="80%" border="0" align="center" cellpadding="0" cellspacing="0" class="completeborder">
    <tr>
      <td height="20" colspan="2" bgcolor="#E7E7D9" class="sidespan"> <div align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">(ID:<? echo $row3[id];?>)<font color="#000000">,
          </font> <? echo $row3[model];?> / <font size="2" face="Verdana, Arial, Helvetica, sans-serif">
          <?
        if ($row3[category]) {
        //Find category
        $category4 = mysql_query("SELECT * FROM settings WHERE id='$row3[category]' ");
        $row4 = mysql_fetch_array($category4);
        $category_name = $row4[cell_1];
        echo $category_name;
        }
   
        if ($row3[gear]) {
        //Find gear
        $gear5 = mysql_query("SELECT * FROM settings WHERE id='$row3[gear]' ");
        $row5 = mysql_fetch_array($gear5);
        $gear_name = $row5[cell_1];
        echo " / "; echo $gear_name;
        }
   
        if ($row3[bearings]) {
        //Find gear
        $bearings6 = mysql_query("SELECT * FROM settings WHERE id='$row3[bearings]' ");
        $row6 = mysql_fetch_array($bearings6);
        $bearings_name = $row6[cell_1];
        echo " / "; echo $bearings_name;
        }
   
        if ($row3[line]) {
        //Find gear
        $gear7 = mysql_query("SELECT * FROM settings WHERE id='$row3[line]' ");
        $row7 = mysql_fetch_array($line7);
        $line_name = $row7[cell_1];
        echo " / "; echo $line_name;
        }
        ?>
          </font> </div></td>
    </tr>
    <tr>
      <td height="30" class="sidespan">
        <div align="left"><font color="#000000" size="2" face="Verdana, Arial, Helvetica, sans-serif">Stock:</font>
          <select name="stock">
            <option value="Unknown" selected>Unknown</option>
            <option value="Yes">Yes</option>
            <option value="No">No</option>
          </select>
          <font color="#000000" size="2" face="Verdana, Arial, Helvetica, sans-serif">
          | Delivery time:
          <select name="delivery_time">
            <option value="Unkown" selected>Unkown</option>
            <option value="Max 2 days">Max 2 days</option>
            <option value="Max 5 days">Max 4 days</option>
            <option value="Max 7 days">Max 7 days</option>
            <option value="+7 days">+7 days</option>
          </select>
          | Delivery price:$
          <input name="textfield" type="delivery_price" size="10">
          | Product price: $
          <input name="textfield2" type="price" size="10">
          </font></div></td>
      <td height="30" class="sidespan"> <div align="right">
          <input name="submit" type="submit" value="Submit">
          <input name="reset" type="reset" value="Reset">
        </div></td>
    </tr>
  </table>
</form>
<?
}
?>
Avatar billede kgp43 Nybegynder
22. februar 2004 - 15:04 #13
Rettelse:

Her er noget af min code (på prices.php siden). Som det er lavet nu, skal brugeren submitte for hver enkelt produkt. Jeg vil gerne have det sådan, at de kan taste alle priserne ind, klikke på én submit knap, hvorefter der bliver oprettet én række for hvert produkt.

Hmmm... der bliver oprettet 1 form for hvergang while-løkken kører, det er da vist forkert.
Avatar billede erikjacobsen Ekspert
22. februar 2004 - 15:10 #14
Der er nemlig rigtigt. Det der submittes skal stå i een <form>...</form>
Du skal så skelne felterne fra hinanden med deres navne.
Avatar billede kgp43 Nybegynder
22. februar 2004 - 15:16 #15
Skal jeg så smide formen uden for løkken?
Hvordan kan jeg bruge foreach, hvis feltværdierne (ex. "pris") skal være forskellig hvergang løkken kører?
Avatar billede kgp43 Nybegynder
22. februar 2004 - 15:17 #16
felterne har forskellige navne som de er nu, men hvordan kan kan så se forskel når løkken har kørt mere end én gang? Kan du give et eksempel?
Avatar billede erikjacobsen Ekspert
22. februar 2004 - 15:20 #17
de kunne hedde "pris1", "pris2", eller hvis du har et vare-id, 7913, så kunne
de hedde "pris_7913". Du skal kunne skelne dem fra hinanden, og knytte dem
til den rigtige vare.
Avatar billede kgp43 Nybegynder
22. februar 2004 - 15:28 #18
Jeg har et unikt produkt id.

Dvs. at f.eks. denne Select, skal de sådan ud:

          <select name="stock_<? echo $id; ?>">
            <option value="Unknown" selected>Unknown</option>
            <option value="Yes">Yes</option>
            <option value="No">No</option>
          </select>

Vil det ikke sige, at jeg ikke kan bruge foreach mere? Da navne på felterne er variable.
Avatar billede erikjacobsen Ekspert
22. februar 2004 - 15:31 #19
Jo, du skal bruge foreach. Du har måske "stock_7913", "pris_7913", "nogetandet_7913".
Løb igennem med foreach. Når navnet matcher fx "stock_99999", hvor 99999 bare står
for et tal, så ved du de andre felter med samme nummer er der, og du aflæser
og opdaterer. (ja, der er mange måder at gøre det på)
Avatar billede kgp43 Nybegynder
22. februar 2004 - 15:41 #20
Okay, jeg har disse felter: "stock", "delivery_time", "delivery_price" samt "price".
Dvs. at jeg skal ændre dem til xxx_$id, hvor $id er et unikt nummer. Jeg kan godt se at foreach nu har noget unikt at gå udfra, men kan ikke se hvordan en query kan se forskel. Der bliver jo sendt masser af forskellige felter på samme tid, dog med forskellige values. Vil det være besværligt at lave et eksempel?
Avatar billede kgp43 Nybegynder
22. februar 2004 - 15:43 #21
Rettelse:

"men kan ikke se hvordan en query kan se forskel"
=
"men kan ikke se hvordan en query kan se sammenhængen"
Avatar billede kgp43 Nybegynder
22. februar 2004 - 16:08 #22
Sådan ser det ud nu:

<form name="form1" method="post" action="add_ok.php">
<?
$query3 = mysql_query("SELECT * FROM reels WHERE series_id='$series_id' ORDER BY model ");
while($row3 = mysql_fetch_array($query3)) {
?>
  <table width="80%" border="0" align="center" cellpadding="0" cellspacing="0" class="completeborder">
    <tr>
      <td height="20" colspan="2" bgcolor="#E7E7D9" class="sidespan"> <div align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">(ID:<? echo $row3[id];?>)<font color="#000000">,
          </font> <? echo $row3[model];?> / <font size="2" face="Verdana, Arial, Helvetica, sans-serif">
          <?
        if ($row3[category]) {
        //Find category
        $category4 = mysql_query("SELECT * FROM settings WHERE id='$row3[category]' ");
        $row4 = mysql_fetch_array($category4);
        $category_name = $row4[cell_1];
        echo $category_name;
        }
   
        if ($row3[gear]) {
        //Find gear
        $gear5 = mysql_query("SELECT * FROM settings WHERE id='$row3[gear]' ");
        $row5 = mysql_fetch_array($gear5);
        $gear_name = $row5[cell_1];
        echo " / "; echo $gear_name;
        }
   
        if ($row3[bearings]) {
        //Find gear
        $bearings6 = mysql_query("SELECT * FROM settings WHERE id='$row3[bearings]' ");
        $row6 = mysql_fetch_array($bearings6);
        $bearings_name = $row6[cell_1];
        echo " / "; echo $bearings_name;
        }
   
        if ($row3[line]) {
        //Find gear
        $gear7 = mysql_query("SELECT * FROM settings WHERE id='$row3[line]' ");
        $row7 = mysql_fetch_array($line7);
        $line_name = $row7[cell_1];
        echo " / "; echo $line_name;
        }
        ?>
          </font> </div></td>
    </tr>
    <tr>
      <td height="30" class="sidespan">
        <div align="left"><font color="#000000" size="2" face="Verdana, Arial, Helvetica, sans-serif">Stock:</font>
          <select name="stock_<? echo $row3[id];?>">
            <option value="Unknown" selected>Unknown</option>
            <option value="Yes">Yes</option>
            <option value="No">No</option>
          </select>
          <font color="#000000" size="2" face="Verdana, Arial, Helvetica, sans-serif">
          | Delivery time:
          <select name="delivery_time_<? echo $row3[id];?>">
            <option value="Unkown" selected>Unkown</option>
            <option value="Max 2 days">Max 2 days</option>
            <option value="Max 5 days">Max 4 days</option>
            <option value="Max 7 days">Max 7 days</option>
            <option value="+7 days">+7 days</option>
          </select>
          | Delivery price:$
          <input name="textfield" type="delivery_price_<? echo $row3[id];?>" size="10">
          | Product price: $
          <input name="textfield2" type="price_<? echo $row3[id];?>" size="10">
          </font></div></td>
      <td height="30" class="sidespan"> <div align="right">
        </div></td>
    </tr>
</table>
<br> 
<?
}
?>
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
      <td height="40"> <div align="right">
          <input name="submit" type="submit" value="Submit">
          <input name="reset" type="reset" value="Reset">
        </div></td>
  </tr>
</table>
</form>
Avatar billede erikjacobsen Ekspert
22. februar 2004 - 16:11 #23
Jeg har ikke lige tid til at sætte mig ind i dit eksempel, men det er sikkert
andre, der har. Og det kan sikkert gøres smart ;)
Avatar billede kgp43 Nybegynder
22. februar 2004 - 16:13 #24
Okay, takker for hjælpen alligevel :)

Andre der har et bud?
Avatar billede kgp43 Nybegynder
22. februar 2004 - 20:49 #25
Jeg har ikke mulighed for at linke til siderne, så jeg har et link til et billede.

- Der bliver lavet en søgning på alle produkter (I den pågældende kategori), herefter kan brugeren tilføle nogle informationer til de enkelte produkter. Disse informationer bliver lagt i en anden tabel (prices). For hvert produkt, hvor brugeren har tilføjet informationer, skal der oprettes en række i tabellen "prices".

Jeg håber dette forklarer det lidt bedre.

link til billede: http://www.fedtm.com/123.jpg
Nb. Den indrammede tabel viser ét produkt.
Avatar billede avminarm Juniormester
23. februar 2004 - 09:32 #26
du vil nok kunne have glæde af at benytte et flerdimensionet array, dvs alle dine selects kan hedde: pris[0][1] - jeg skal lige prøve at grave et eksempel frem af noget der ligner
Avatar billede avminarm Juniormester
23. februar 2004 - 09:57 #27
kig evt. lidt på: http://www.eksperten.dk/spm/458384 - der benyttes foreach i forbindelse med
Avatar billede kgp43 Nybegynder
23. februar 2004 - 10:13 #28
Puuuha, det er for advanceret til mig. Tror jeg har kastet mig ud i noget jeg skulle holde mig fra :P

Nogle der kan foreslå noget læsestof vedr. functions og arrays?
- Beskrivelsen skal være grundlæggende, og ikke starte fra et højt plan.
Avatar billede kgp43 Nybegynder
23. februar 2004 - 10:16 #29
fandt denne her:
http://www.eksperten.dk/artikler/99

Nu mangler jeg bare noget on functions :)
Avatar billede kgp43 Nybegynder
23. februar 2004 - 10:25 #30
Kan man smide de enkelte produkter i et array og herefter kører en foreach på de enkelte array's? Hvordan ville dette evt. se ud?
Avatar billede kgp43 Nybegynder
23. februar 2004 - 11:40 #31
Tror lige jeg vil prøve mig frem, når jeg kommer hjem.
Avatar billede avminarm Juniormester
23. februar 2004 - 11:56 #32
ja - prøv at lege lidt med arrays - har du kigget på arrays i manualen www.php.net evt. http://dk.php.net/print_r
Avatar billede kgp43 Nybegynder
23. februar 2004 - 12:01 #33
Kan jeg ikke anvende denne her:

$item[] = array($id, $stock, $devilery_time, $devilery_price, $price);

og så

foreach $item { bla bla bla
}

Eller er det total forkert?
Avatar billede kgp43 Nybegynder
23. februar 2004 - 12:02 #34
Jeg har kigget i manualen, men kan ikke se sammenhængen.
Avatar billede kgp43 Nybegynder
23. februar 2004 - 12:20 #35
Vedr mit spørgsmål lige ovenfor:

Hvis jeg tilføjer denne kode i min while-løkke, bliver der så ikke lavet en ny array ($item[0], $item[1], $item[2], $item[3] osv.) for hvergang løkken kører? Herefter kan jeg vel bruge foreach sådan:

foreach $item[] {  bla bla bla
}

?
Avatar billede avminarm Juniormester
23. februar 2004 - 14:17 #36
evt: $item[] = array(0 => $id,1 =>  $stock, 2 => $devilery_time, 3 => $devilery_price, 4 => $price);

men prøv at "lege" lidt med det når du sidder ved et testmiljø - så giver de små eksempler fra manualen meget mere mening - jeg har ikke så meget tid lige nu ;o)
Avatar billede kgp43 Nybegynder
23. februar 2004 - 14:53 #37
Har fået en meget bedre forståelse for arrays idag :)
/me har ikke så meget at lave på arbejdet.
Avatar billede avminarm Juniormester
23. februar 2004 - 15:40 #38
;o)
Avatar billede kgp43 Nybegynder
23. februar 2004 - 17:17 #39
hmmm... det kan vist ikke lade sig gøre. Jeg havde tænkt mig at smide array'en ind i løkken (når den hente alle produkterne), men på dette tidspunkt at værdierne jo ikke indtastet af brugerne. Nogen løsning hvor jeg skal indsætte dette array?
Avatar billede kgp43 Nybegynder
23. februar 2004 - 17:45 #40
Er det muligt at give SELECT og Textfield to værdier? En værdi så man kan se se hører sammen og en anden værdi så man kan se forskel på dem?
Avatar billede kgp43 Nybegynder
23. februar 2004 - 17:51 #41
det kunne nu være smart :P
Avatar billede avminarm Juniormester
23. februar 2004 - 20:53 #42
ja hvis du kalder hver af dine selects for: selectnavn[] vil dette automatisk danne et array dvs du kan kalde både select og textarea på denne måde
Avatar billede kgp43 Nybegynder
24. februar 2004 - 07:12 #43
Værdierne i et array, bliver de først dannet på den følgende side (når der klikkes submit), ellers sker det allerede inden brugeren har udfyldt felterne/værdierne?
Avatar billede kgp43 Nybegynder
24. februar 2004 - 08:37 #44
Jeg vil nemlig gerne have, at alle produkterne bliver sat ind i et array, når jeg kører dem igennem while-løkken.

Agrr... dette her er for kompliceret.
Avatar billede kgp43 Nybegynder
24. februar 2004 - 10:01 #45
Det burde forresten være på samme måde en indkøbskurv er opbygget på.

Man har en side med alle sine produkter.
Brugeren vælger farve, størrelse og antal for de ønskede produkter (enkeltvis), der klikkes på submit hvorefter det hele bliver smidt i en kurv (I mit tilfælde direkte i databasen).
Avatar billede kgp43 Nybegynder
24. februar 2004 - 10:07 #46
hehe... de 3 linier gav mere forklaring end mine 5 første posts :P

Nogle der har links til gode artikler vedr. indkøbskurve?
Avatar billede avminarm Juniormester
24. februar 2004 - 15:19 #47
;o) har du prøvet www.devarticles.com eller www.phpfreaks.com - kunne du ikke prøve at loade det op et sted så man kan teste hvad du vil - evt. på www.whitehat.dk
Avatar billede kgp43 Nybegynder
24. februar 2004 - 15:23 #48
Det bliver nok svært, da det er en del af min admin section.
Vil gøre et forsøg senere idag, så sender jeg dig et link (vil ikke have det ud, da der ikke er arbejdet på sikkerheden endnu).

Har søgt på devarticles.com, har fundet en artikkel der kunne være nyttig.
Avatar billede kgp43 Nybegynder
24. februar 2004 - 15:25 #49
Kan du ikke sende mig en email på kgp43@hotmail.com - så kan jeg sende et link senere.
Avatar billede avminarm Juniormester
24. februar 2004 - 22:25 #50
send bare link til exp@avminmusearm.dk - diskretion er en selvfølge
Avatar billede kgp43 Nybegynder
25. februar 2004 - 06:34 #51
link sendt
Avatar billede kgp43 Nybegynder
25. februar 2004 - 13:27 #52
avminarm; fik du linket?
Avatar billede avminarm Juniormester
26. februar 2004 - 13:19 #53
ja ;o)
Avatar billede kgp43 Nybegynder
26. februar 2004 - 13:58 #54
Btw. nice email adresse :)
Avatar billede kgp43 Nybegynder
27. februar 2004 - 08:12 #55
Jeg tror jeg har fundet en løsning.

Problemet var at jeg ikke viste man kunne splitte en variabel (http://www.eksperten.dk/spm/470477). Skal lige hjem og teste, håber jeg har fundet en løsning (delvis) :)
Avatar billede avminarm Juniormester
27. februar 2004 - 09:31 #56
hmmm - det var jo det her link jeg menet kunne være nyttigt http://dk.php.net/manual/en/language.types.array.php
Avatar billede kgp43 Nybegynder
27. februar 2004 - 09:47 #57
yep, har kiggen en del på arrays. Kunne godt tænke mig at indsætte følgende:
$item[] = array(0 => $id,1 =>  $stock, 2 => $devilery_time, 3 => $devilery_price, 4 => $price);
Kører array'et hvergang jeg henter et produkt ud fra db'en. Problemet er bare at værdier skal indtastes af brugeren og dette sker først efter arrayene er blevet lavet. Kan ikke se andre måder at gøre det på (en at oprette array'ene på den side hvor brugeren skal indtaste info).
Avatar billede kgp43 Nybegynder
27. februar 2004 - 09:49 #58
Godt det er weekend, så skulle der blive lidt ekstra tid :)
Har nogle ting jeg lige vil afprøve
Avatar billede kgp43 Nybegynder
27. februar 2004 - 10:38 #59
ahhhh... kan dette ikke lade sig gøre:

Kør en array hvergang der hentet et produkt fra db'en. I stedet for at smide værdierne i arrayet (som jeg har tænkt på), så kunne man bruge navnene på de enkelte selects/felter i stedet for. Navnet på array'et får navnet/id på det aktuelle produkt.

Nu har jeg array's over de enkelte produkter med tilhørende feltnavne :)
(Feltnavne er unikke). Tror sku den er der.

// Havde ikke tænkt på man kunne bruge arrayes i den sammenhæng.
Avatar billede kgp43 Nybegynder
27. februar 2004 - 10:45 #60
Det skal da virker :)
Irriterende at jeg ikke tænkte i de baner før nu :P
Avatar billede avminarm Juniormester
27. februar 2004 - 12:22 #61
har du set på det link jeg sendte til dig via mail?
Avatar billede kgp43 Nybegynder
27. februar 2004 - 12:33 #62
Yep, men der er meget jeg ikke forstår.
Avatar billede kgp43 Nybegynder
27. februar 2004 - 12:40 #63
Nb. Forstår dog det mest grundlæggende i arrays, så tror ikke det bliver et problem at lave resten (hvis det ellers kan opbygges som min forrige post). Time will tell :)
Avatar billede kgp43 Nybegynder
27. februar 2004 - 13:05 #64
Det må være dette eksempel jeg skal bruge. Tror jeg har det materiale jeg skal bruge nu.



Example 6-10. Recursive and multi-dimensional arrays

<?php
$fruits = array ( "fruits"  => array ( "a" => "orange",
                                      "b" => "banana",
                                      "c" => "apple"
                                    ),
                "numbers" => array ( 1,
                                      2,
                                      3,
                                      4,
                                      5,
                                      6
                                    ),
                "holes"  => array (      "first",
                                      5 => "second",
                                          "third"
                                    )
              );

// Some examples to address values in the array above
echo $fruits["holes"][5];    // prints "second"
echo $fruits["fruits"]["a"]; // prints "orange"
unset($fruits["holes"][0]);  // remove "first"

// Create a new multi-dimensional array
$juices["apple"]["green"] = "good";
?>
Avatar billede avminarm Juniormester
27. februar 2004 - 22:10 #65
ja, men jeg tænkte nu mere på det her link: http://wagners.users.whitehat.dk/eksperten/468043_kqp43/prices_2_array.php - det løser vel nærmest dit problem - eller...
Avatar billede kgp43 Nybegynder
27. februar 2004 - 22:31 #66
Set godt ud.
Er det muligt du kan sende de to php filer til min email? (du har den vist allerede)
Avatar billede kgp43 Nybegynder
27. februar 2004 - 22:32 #67
Jeg prøver mig dog frem med eksemplet i min forrige post, kan dog ikke finde denne fejl:

Parse error: parse error, expecting `')'' in /home/fedtmco/public_html/mytackle/admin/prices/prices_2.php on line 172

linie 172:
$product[] = array ( "product"  => array( "id" => $row3[id], "merchant" => "merchant_" $row3[id], "stock" => "stock_" $row3[id], "delivery_time" => "deliverytime_" $row3[id], "delivery_price" => "deliveryprice_" $row3[id], "price" => "price_" $row3[id] ) );
Avatar billede avminarm Juniormester
27. februar 2004 - 22:45 #68
jeg tror altså du er ude i noget overkill der, men hvis du kigger på det ovenstående link kan du se hvordan filerne er bygget op direkte - brug "vis kilde" på selve formularen og i selve action.php har jeg vist hvordan filen er bygget op nederst, men jag kan da godt sende dem hvis du absolut vil have det ;o)
Avatar billede kgp43 Nybegynder
27. februar 2004 - 22:51 #69
hehe... jeg kigger lige på det :)
Avatar billede kgp43 Nybegynder
27. februar 2004 - 23:13 #70
Er dette her den rigtige måde at gøre det på?

<?
include("/home/fedtmco/public_html/mytackle/db.php");

foreach ($_POST['price'] as $key => $val) {
$sql = mysql_query("INSERT INTO prices (id, p_id, price) values
          ('', '$key', $val)");
}

foreach ($_POST['delivery_time'] as $key => $val) {
$sql = mysql_query("INSERT INTO prices (delivery_time) values
          ($val) WHERE id='$key' ");
}

foreach ($_POST['delivery_price'] as $key => $val) {
$sql = mysql_query("INSERT INTO prices (delivery_price) values
          ($val) WHERE id='$key' ");
}

foreach ($_POST['stock'] as $key => $val) {
$sql = mysql_query("INSERT INTO prices (stock) values
          ($val) WHERE id='$key' ");
}
?>
Avatar billede kgp43 Nybegynder
27. februar 2004 - 23:19 #71
Rettelse:

<?
include("/home/fedtmco/public_html/mytackle/db.php");

foreach ($_POST['price'] as $key => $val) {
$sql = mysql_query("INSERT INTO prices (id, p_id, price) values
          ('', '$key', $val)");
}

foreach ($_POST['delivery_time'] as $key => $val) {
$sql = mysql_query("INSERT INTO prices (delivery_time) values
          ('$val') WHERE id='$key' ");
}

foreach ($_POST['delivery_price'] as $key => $val) {
$sql = mysql_query("INSERT INTO prices (delivery_price) values
          ('$val') WHERE id='$key' ");
}

foreach ($_POST['stock'] as $key => $val) {
$sql = mysql_query("INSERT INTO prices (stock) values
          ('$val') WHERE id='$key' ");
}
?>

Får dog denne fejl:


Warning: Invalid argument supplied for foreach() in /home/fedtmco/public_html/mytackle/admin/prices/prices_ok.php on line 46

Warning: Invalid argument supplied for foreach() in /home/fedtmco/public_html/mytackle/admin/prices/prices_ok.php on line 51

Warning: Invalid argument supplied for foreach() in /home/fedtmco/public_html/mytackle/admin/prices/prices_ok.php on line 56

Warning: Invalid argument supplied for foreach() in /home/fedtmco/public_html/mytackle/admin/prices/prices_ok.php on line 61
Avatar billede kgp43 Nybegynder
27. februar 2004 - 23:24 #72
Er du sikker på det kan lade sig gøre?
- Jeg skal have alle værdierne for det enkelte ID ind i den samme række. Dit forslag poster dem enkeltvis under de forskellige emner.

Grunden til at jeg får fejlen ovenfor, skyldes at jeg prøver at lokalisere ID med produkt-id'en, men det går jo ikke. Produkt id'et kan godt fremkomme flere gange i tabellen, så jeg er nød til at kører efter række ID. Det var derfor jeg var ved at rode med det array-noget.
Avatar billede avminarm Juniormester
27. februar 2004 - 23:28 #73
Læg mærke til at jeg har rettet ti dine select navne mv - jeg har fjernet en underscore "_" før ID'en.

og f.eks:
$sql = mysql_query("INSERT INTO prices (id, p_id, price) values
          ('', '$key', $val)");

ville jeg skrive som:
$sql = mysql_query("INSERT INTO prices (id, p_id, price) values
          ('', '".$key."', '".$val."')");
Avatar billede kgp43 Nybegynder
27. februar 2004 - 23:36 #74
Okay. Når man har kørt den første foreach, så er der blevet oprettet en masse rækker. De efterfølgende værdier skal så smides i de rigtige rækker, dette skal gøres ud fra række id. Det er her jeg står af - kan ikke se hvordan det kan lade sig gøre.

(alle variabler der tilhører det pågældende produkt skal ligges i den samme række).
Avatar billede avminarm Juniormester
27. februar 2004 - 23:37 #75
så skal du nok lave noget med et multidimensionelt array, men din selects kan jo godt laves som f.eks price[][id]
Avatar billede avminarm Juniormester
27. februar 2004 - 23:38 #76
jeg gad godt se et dump af din database struktur, men smutter i putkassen nu ;o)
Avatar billede kgp43 Nybegynder
27. februar 2004 - 23:40 #77
Skal jeg så ikke tilbage til dette her igen? Og så køre en foreach på products[]?

product[] = array ( "product"  => array( "id" => $row3[id],
                    "merchant" => "merchant_" $row3[id],
                    "stock" => "stock_" $row3[id],
                    "delivery_time" => "deliverytime_" $row3[id],
                    "delivery_price" => "deliveryprice_" $row3[id],
                    "price" => "price_" $row3[id]
                    )
);
Avatar billede kgp43 Nybegynder
28. februar 2004 - 13:46 #78
okay, mit forslag virker heller ikke da jeg fik udfra at arrays kunne overføres via en form :(

Lige et spørgsmål.
Hvordan får du din kode til at printe alle de forskellige informationer ud så de bliver sorteret efter id(key)? Ex. smide alle informationer med det samme id i den samme række.

(gik i seng omkring kl 02 og op igen ved 7 tiden - har stadig ikke kundet en løsning :P)
Avatar billede erikjacobsen Ekspert
28. februar 2004 - 13:55 #79
Det undrer mig at du endnu ikke kan få lavet en nem løsning. Så vidt jeg forstår dit spørgsmål skal
brugeren blot kunne opdatere flere varer (rækker i databasen) på een gang, og det er ligetil,
og kræver slet ikke nogen af de komplikationer der drages ind her.

Er det ikke nogenlunde rigtigt opfattet?

Kan du give et link til een side (ikke nødvendigvis direkte i dit system, men blot en kopi
af en side), som indeholder eksempel på disse flere varer?
Avatar billede kgp43 Nybegynder
28. februar 2004 - 14:16 #80
Hejsa,
Kan du ikke sende mig en email på kgp43@hotmail.com så sender jeg dig en url med brugernavn og password til systemet.


Jeg giver lige en forklaring:

Brugeren skal (har mulighed for) at opdatere/tilføje nogle informationer til hvert produkt. Disse informationer bliver smidt i en tabel, hver række i denne tabel indeholder: id, produkt_id (så man kan se hvilket produkt informationerne tilhøre), id på brugeren (så man kan se hvilken bruger der er tilknyttet informationerne, samt 4 andre felter med diverse info).

"Så vidt jeg forstår dit spørgsmål skal
brugeren blot kunne opdatere flere varer (rækker i databasen) på een gang"
- Det er korrekt.
Avatar billede erikjacobsen Ekspert
28. februar 2004 - 16:57 #81
Tak, men jeg vil ikke ind i dit system ;)
Kan du ikke bare vise os hvordan en typisk side ser ud - ikke nødvendigvis direkte i dit system.
Avatar billede kgp43 Nybegynder
28. februar 2004 - 17:15 #82
Den side hvor produkterne bliver hentet ud fra databasen, og hvor brugeren tilføjer informationserne kan ses her(avminarm har lagt den ud på dan server): http://wagners.users.whitehat.dk/eksperten/468043_kqp43/prices_2_array.php. Den side der kommer når du klikker submit er noget han selv har lavet. Jeg kan sende dig de to php filer (den hvor dataene bliver hentet ud fra db'en og den hvor dataene skal ligges i den nye tabel).
Avatar billede erikjacobsen Ekspert
28. februar 2004 - 21:32 #83
Du skal ikke sende noget - du kan bare vise det her, hvis det er.
Men check
http://www.dmu-stud.dk/~ej/kqp-1.html

Indholdet af kqp-2.php er blot:
<?
  foreach ($_POST as $key=>$value) {
    if (ereg('^stock_([0-9]+)$',$key,$r)) {
      $num=$r[1];
      $stock=$_POST["stock_$num"];
      $delivery_time=$_POST["delivery_time_$num"];
      $delivery_price=$_POST["delivery_price_$num"];
      $price=$_POST["price_$num"];
    $sql="update sometable set stock='$stock',delivery_time='$delivery_time', delivery_price='$delivery_price',price='$price' where id='$num'";
    print "$sql<br>";
    }
}
?>

Det var stort set det jeg foreslog 22/02-2004 15:20:29
Er det nogenlunde korrekt?
Avatar billede kgp43 Nybegynder
28. februar 2004 - 23:13 #84
Hejsa,

Det ser jo rigtig lovende ud :)
Jeg har lavet nogle minimale ændringer så det passe 100%. Problemet er bare at der intet sker efter submit - Der bliver ikke printet noget og der kommer heller ikke noget i tabellen. Det skal lige nævnes at der ikke kommer nogen fejl.


<?
  foreach ($_POST as $key=>$value) {
    if (ereg('^stock_([0-9]+)$',$key,$r)) {
      $num=$r[1];
      $stock=$_POST["stock_$num"];
      $merchant=$_POST["merchant_$num"];
      $delivery_time=$_POST["delivery_time_$num"];
      $delivery_price=$_POST["delivery_price_$num"];
      $price=$_POST["price_$num"];
     
      //If info already added, then we will update instead of adding a new row
      $sql_doublecheck1 = mysql_query("SELECT * FROM prices WHERE p_id='$num' AND merchant='$merchant' ");
      $doublecheck1 = mysql_num_rows($sql_doublecheck1);
     
      if($doublecheck1 != 0){
      mysql_query("UPDATE prices SET price='$price' WHERE p_id='$p_id' AND merchant='$merchant' ");
     
      } else {
      $sql = mysql_query("INSERT INTO prices (id='', p_id='$num', merchant='$merchant', price='$price', delivery_price='$delivery_price', delivery_time='$delivery_time', stock='$stock' ");
      print "$sql<br>";
      }
    }
  }
?>
Avatar billede erikjacobsen Ekspert
29. februar 2004 - 08:12 #85
Måske

mysql_query("UPDATE prices SET price='$price' WHERE p_id='$num' AND merchant='$merchant' ");
Avatar billede kgp43 Nybegynder
29. februar 2004 - 09:08 #86
Woops, der var også en fejl her (lige efter INFO prices):
$sql = mysql_query("INSERT INTO prices (id='', p_id='$num', merchant='$merchant', price='$price', delivery_price='$delivery_price', delivery_time='$delivery_time', stock='$stock' ");

- En nat's søvn gør mirakler :)
Avatar billede kgp43 Nybegynder
29. februar 2004 - 09:12 #87
Eller skal den se sådan ud:
$sql = mysql_query("INSERT INTO prices (id='', p_id='$num', merchant='$merchant', price='$price', delivery_price='$delivery_price', delivery_time='$delivery_time', stock='$stock')");
Avatar billede erikjacobsen Ekspert
29. februar 2004 - 09:18 #88
Ja, den er også gal. Jeg plejer at stoppe, når jeg ser den første fejl. Insert kan
se sådan ud i mysql (ikke helt standard, men jeg synes det er kønt):

$sql = mysql_query("INSERT INTO prices set p_id='$num', merchant='$merchant', price='$price', delivery_price='$delivery_price', delivery_time='$delivery_time', stock='$stock' ");
Avatar billede kgp43 Nybegynder
29. februar 2004 - 09:27 #89
Har lige checket variablerne og de virker (på nær merchant). Så det er 100% sikkert at det er query'en der er problemet. Jeg prøver lige dit forslag :)
Avatar billede kgp43 Nybegynder
29. februar 2004 - 09:38 #90
Alt virker nu, bare ikke merchant. Jeg tilføjede den i din kode, men det kan være man ikke bare kan gøre det sådan.

Her er min kode:

<?
  foreach ($_POST as $key=>$value) {
    if (ereg('^stock_([0-9]+)$',$key,$r)) {
      $num=$r[1];
      $stock=$_POST["stock_$num"];
      $merchant=$_POST["merchant_$num"];
      $delivery_time=$_POST["delivery_time_$num"];
      $delivery_price=$_POST["delivery_price_$num"];
      $price=$_POST["price_$num"];
     
      echo "ID: ".$num."<BR>";
      echo "Stock: ".$stock."<BR>";
      echo "Merchant: ".$merchant."<BR>";
      echo "Delivery Price: ".$delivery_price."<BR>";
      echo "Delivery Time: ".$delivery_time."<BR>";
      echo "Product Price: ".$price."<BR>";
     
      //If info already added, then we will update instead of adding a new row
      $sql_doublecheck1 = mysql_query("SELECT * FROM prices WHERE p_id='$num' AND merchant='$merchant' ");
      $doublecheck1 = mysql_num_rows($sql_doublecheck1);
     
        if($doublecheck1 != 0){
        mysql_query("UPDATE prices SET price='$price', delivery_price='$delivery_price', delivery_time='$delivery_time', stock='$stock' WHERE p_id='$num' AND merchant='$merchant' ");
     
        } else {
        $sql = mysql_query("INSERT INTO prices set p_id='$num', merchant='$merchant', price='$price', delivery_price='$delivery_price', delivery_time='$delivery_time', stock='$stock' ");
        print "$sql<br>";
        }
    }
  }
?>
Avatar billede erikjacobsen Ekspert
29. februar 2004 - 09:52 #91
Det kommer også an på hvad der står i den anden fil, der hvor felterne bliver dannet.
Avatar billede kgp43 Nybegynder
29. februar 2004 - 09:54 #92
<form name="form1" method="post" action="prices_ok.php">
<?
$query3 = mysql_query("SELECT * FROM products WHERE series_id='$series_id' AND type='Reels' ORDER BY name ");
while($row3 = mysql_fetch_array($query3)) {
?>
  <table width="80%" border="0" align="center" cellpadding="0" cellspacing="0" class="completeborder">
    <tr>
      <td height="20" colspan="2" bgcolor="#E7E7D9" class="sidespan"> <div align="left"><font size="2" face="Verdana, Arial, Helvetica, sans-serif" color="#000000">(ID:<? echo $row3[id];?>)<font color="#000000">, Product/model name: </font><strong><? echo $row3[name];?></strong> |<font size="2" face="Verdana, Arial, Helvetica, sans-serif">
        <?
        if ($row3[category]) {
        //Find category
        $category4 = mysql_query("SELECT * FROM settings WHERE id='$row3[category]' ");
        $row4 = mysql_fetch_array($category4);
        $category_name = $row4[cell_1];
        echo "Category: ".$category_name;
        }
   
        if ($row3[info1]) {
        //Find gear
        $gear5 = mysql_query("SELECT * FROM settings WHERE id='$row3[info1]' ");
        $row5 = mysql_fetch_array($gear5);
        $gear_name = $row5[cell_1];
        echo " / Gear: ".$gear_name;
        }
   
        if ($row3[info2]) {
        //Find bearings
        $bearings6 = mysql_query("SELECT * FROM settings WHERE id='$row3[info2]' ");
        $row6 = mysql_fetch_array($bearings6);
        $bearings_name = $row6[cell_1];
        echo " / Bearings: ".$bearings_name;
        }
   
        if ($row3[info4]) {
        //Find line
        $line7 = mysql_query("SELECT * FROM products WHERE id='$row3[info4]' ");
        $row7 = mysql_fetch_array($line7);
        $line_name = $row7[line];
        echo " / Line cap.: ".$line_name;
        }
        ?>
          </font> </div></td>
    </tr>
    <tr>
      <td height="30" class="sidespan">
        <div align="left"><font color="#000000" size="2" face="Verdana, Arial, Helvetica, sans-serif">Stock:</font>
          <select name="stock_<? echo $row3[id];?>">
            <option value="Unknown" selected>Unknown</option>
            <option value="Yes">Yes</option>
            <option value="No">No</option>
          </select>
          <font color="#000000" size="2" face="Verdana, Arial, Helvetica, sans-serif">
          | Delivery time:
          <select name="delivery_time_<? echo $row3[id];?>">
            <option value="Unkown" selected>Unkown</option>
            <option value="Max 2 days">Max 2 days</option>
            <option value="Max 5 days">Max 4 days</option>
            <option value="Max 7 days">Max 7 days</option>
            <option value="+7 days">+7 days</option>
          </select>
          | Delivery price:$
          <input name="delivery_price_<? echo $row3[id];?>" type="text" class="form1">
          | Product price: $
          <input name="price_<? echo $row3[id];?>" type="text" class="form1">
          | Merchant ID:
          <input name="merchant_<? echo $row3[id];?>2" type="text" class="form1">
          </font></div></td>
      <td height="30" class="sidespan"> <div align="right">
        </div></td>
    </tr>
</table>
<br> 
<?
}
?>
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
      <td height="40"> <div align="right">
          <input name="submit" type="submit" value="Submit Prices">
        </div></td>
  </tr>
</table>
</form>
Avatar billede kgp43 Nybegynder
29. februar 2004 - 10:00 #93
Det må jo så være dette her:

| Merchant ID: <input name="merchant_<? echo $row3[id];?>2" type="text" class="form1">
Avatar billede erikjacobsen Ekspert
29. februar 2004 - 10:03 #94
Hvad laver "2"-tallet?
Avatar billede kgp43 Nybegynder
29. februar 2004 - 10:16 #95
woops... det var en smutter.
Alt virker perfect nu :)

Laver du et svar så du kan få point
Avatar billede kgp43 Nybegynder
29. februar 2004 - 10:17 #96
ejjj...hvor er det fedt.
utroligt at det endelig virker :D
Avatar billede erikjacobsen Ekspert
29. februar 2004 - 10:23 #97
Dejligt at høre det virker. Desværre fik jeg ikke kigget tilbage på
spørgsmålet før i går, så havde du været for lang tid siden ;(

Men jeg samler ikke på point, tak.
Avatar billede kgp43 Nybegynder
29. februar 2004 - 10:28 #98
Takker endnu en gang for hjælpen.
Avatar billede avminarm Juniormester
29. februar 2004 - 11:30 #99
smart løsning erik - du er sgu lidt af et geni ;o)
Avatar billede kgp43 Nybegynder
29. februar 2004 - 11:33 #100
Også tak til dig avminarm :)

Hvad med at i deles om point så? Kan ikke lide at have sådan en lang tråd uden at give point. I har trods alt brugt en masse tid på mig
Avatar billede erikjacobsen Ekspert
29. februar 2004 - 11:40 #101
Gør hvad du vil - jeg skal slet ikke have point.
Avatar billede kgp43 Nybegynder
29. februar 2004 - 11:52 #102
okay.
avminarm; vil du så have point?
Avatar billede avminarm Juniormester
29. februar 2004 - 12:19 #103
jo tak da ;o)
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

IT-JOB

Roskilde Universitet

AV Tekniker

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Ingeniør til taktiske netværksradioer i Kommunikationssektionen

Capgemini Danmark A/S

Client Partner

Everllence

R&D Data Scientist

Collectia A/S

Cyber Security Engineer