Avatar billede snigeren Nybegynder
05. marts 2010 - 18:13 Der er 8 kommentarer og
1 løsning

Indsæt x antal felter i databasen

Jeg er ved at lave et produkt database system og kan ikke lige knække følgende.
Når man opretter et nyt produkt udfylder man forskellige ting:

1. navn
2. beskrivelse
3. billede
4. osv...
og så den svære:

hvert produkt kan være forskellige typer(det er frimærker vi snakker om) det kan både være enkelt mærke, helark, delark osv. pointen er at admin af siden helst skal have mulighed for at kunne lave flere type efterhånden.
I en anden tabel opretter admin så alle de typer der måtte være og de bliver så hentet som følgende når man skal oprette et produkt:

$query = mysql_query("SELECT * FROM items_type")or die(mysql_error());
while($row = mysql_fetch_array($query))
{
    echo '<tr><td colspan="2"><input type="checkbox" name="' . $row['type'] . '"';
    echo ' value="' . $row['type'] . '">';
    echo $row['type'];
    echo ' Pris: <input name="price_' . $row['type'] . '" type="text" size="10"></td></tr>';
}

I de her checkboxe kan man så afkrydse de forskellige typer som det enkelt produkt kan fåes i og skrive en pris ud for dem man afkrydser.

Hele humlen er så når jeg skal gemme produktet i databasen, hvordan finder jeg så ud af hvor mange og hvilke checkboxe der er og er i brug? og tilhørende pris?

Jeg skal jo vide hvilke variabler der findes og hvor hvad deres værdier er.

Selve det med checkboxe(typer) og priser der udfor bliver puttet i en tabel for sig...


Håber ikke folk er stået helt af med den forklaring for jeg kan ikke selv lure den...
Avatar billede intenz Novice
05. marts 2010 - 20:50 #1
Hvis du nu har et fælles navn til dine checkboxe, som er et array, sådan her:

echo '<tr><td colspan="2"><input type="checkbox" name="myTypes[]"';
    echo ' value="' . $row['type'] . '">';


Så kan du i din PHP fil hente dem ud der er checked, sådan her (eksemplet viser når du sender dem som POST):

<?php
if (isset($_POST['myTypes'])) {
  foreach($_POST['myTypes'] as $value) {
    $produktType = $value;
    $produktPris = $_POST['price_'.$value];

    print "Produkt: ".$produktType.". Pris: ".$produktPris."<br />";
  }
}
?>
Avatar billede snigeren Nybegynder
06. marts 2010 - 15:49 #2
uhm det virker fint med checkboxene, men der kommer ikke nogen pris med...

Når du nu skriver:
foreach($_POST['myTypes'] as $value) {
så er $value navnet på checkboxen, hvilket jo også burde give det rigtige navn til
$produktPris = $_POST['price_'.$value.''];  jeg prøvede at sætte .'' efter $value for jeg tænkte det hele måske skulle være pakket ind i ''  men det skete der heller ikke noget ved.

Jeg tænkte også om man skulle lave noget array noget med prisen, men det giver jo egentlig ikke nogen mening når de får forskellige navne alle sammen price_. $row['type']...

Hvis jeg i din sætning skriver:
<?php
if (isset($_POST['myTypes'])) {
  foreach($_POST['myTypes'] as $value) {
    $produktType = $value;
    $produktPris = $_POST['price_'.$value];

    echo $produktPris;                        /* ny linie =) */

    print "Produkt: ".$produktType.". Pris: ".$produktPris."<br />";
  }
}
?>
Får jeg følgende output:

452Produkt: Fireblok . Pris:
Produkt: Delark . Pris:
Produkt: Helark . Pris:

Det er næsten som om den glemmer variablen $produktPris...

Har du et godt bud?
Avatar billede snigeren Nybegynder
06. marts 2010 - 16:07 #3
... hvis jeg manuelt skriver flere typer ind:
$produktPris = $_POST['price_'.$value];
echo $_POST['price_Helark'];    <-- taster 111
echo $_POST['price_Fireblok'];  <-- taster 222
echo $_POST['price_25 stribe']; <-- taster 333

får jeg de rigtige tal på nær "25 stribe" fordi der er mellemrum sikkert:
111222Produkt: Enkelt mærke . Pris:
111222Produkt: Fireblok . Pris:
111222Produkt: 25 stribe . Pris:


så indholdet af pris felterne kommer med...
Avatar billede intenz Novice
06. marts 2010 - 20:02 #4
Jeg har ikke et godt bud på hvorfor prisen ikke kommer med i print statementet. Det bør det.
Du har ret i, at mellemrummet får det til at fejle. Man kunne også forestille sig andre navne der ville få det til at fejle.

Jeg går ud fra du har et eller andet unikt ID nummer på hver vare i din database. Du kunne bruge dem til at identificere din checkbox og pris, så er det bare tal, og du vil slippe for navne problemerne. Og så bare slå dem op igen i databasen efter formularen er sendt.
Avatar billede snigeren Nybegynder
07. marts 2010 - 23:45 #5
uhm det eneste jeg kan komme frem til er at man ikke kan skrive $value ind i $_POST[];  Kan det passe? kan man ikke skrive det på en anden måde så det ikke bliver $_POST[$value];?

hvis jeg bare skriver $_POST[$value]; og $value er 2 er det så ikke det samme som $_POST[2]; ?  og der skal da være '' rundt om 2 for at det virker? hvordan kan jeg så skrive så indholdet af $value kommer til at stå mellem ''? for det dur jo heller ikke at skrive $_POST['$value'];

Kan jeg ikke have fat i noget?
Avatar billede snigeren Nybegynder
08. marts 2010 - 12:39 #6
hahaha fedt nok i min array i toppen så den således ud:  echo ' value="' . $row['type'] . ' ">';    mellemrum efter '    efter . $row['id'] . så det var et mellemrum der lavede problemer :P
Avatar billede snigeren Nybegynder
08. marts 2010 - 12:41 #7
Mange tak for hjælpen!
forresten intenz, kan man egentlig lave det sådan at fra start kan man ikke skrive i pris feltet men når man checker en box af så bliver pris feltet aktivt? eller er det for besværligt?
Avatar billede intenz Novice
08. marts 2010 - 12:49 #8
Fint du fik det til at virke :)

Lige for at runde din kommentar i #5.
Du kan godt skrive $_POST[2] uden at bruge citationstegn rundt om, da 2 er en integer (et tal). Hvis du bruger en streg skal du dog skrive citationstegn $_POST['tekst'];

Når du bruger en variabel skal du altid skrive det uden citationstegn, uanset indholdet af stregnen. Så $_POST[$value] er korrekt uanset om der ligger en streng eller et tal i $value.

Du kan godt gøre det du skriver i #7 og det er ikke så svært endda. Men du skal over i javascript i stedet, da det ikke kan gøres i php som er server-side sprog.
Men det ligger lidt udenfor det spøgsmål her, så opret et spørgsmål i javascript kategorien, så kan det også være andre kan få glæde af det :)
Avatar billede snigeren Nybegynder
08. marts 2010 - 13:24 #9
ok tak for kommentarer, må lige overveje om jeg vil blande javascript ind i det her. men endnu engang tak for hjælpen =)
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