webForumDet fria alternativet

hämta in "halvt" okända fält från ett form till php

PHP

13 svar · 344 visningar · startad av Prime_66

Medlem sedan aug. 2004290 inlägg
Frågan#1

Detta gäller PHP tillsammans med MySQL.

Jag har en sida med varierande antal <select> beroende på vem som är inloggad. Dessa <select> innehåler siffor från 1-5 och representerar en betygskala. Varje <select> måste vara knuten till checkboxen på samma rad. Checkboxen är av typen array och innehåller ett id-nummer. Enda sättet att få checkboxen och selecten att hänga ihop är väl att ange det i namnet på selecten. Alltså <select name=betyg33> ? Det sker ju med hjälp av php såklart.

Då uppstår problem när jag ska hämta in värden på nästföljande php-sida från formen. För den kan ju inte veta vilken <select> det gäller om det inte finns med något id i namnet. Det innebär att ibland kommer <select name"betyg12> skickas och en annan gång kanske <select name"betyg34>. Det kanske blir enklast om jag skickar en <select> per gång. Alltså en egen form för varje <select>.

I mitt php-script vill jag hämta in alla <select> som börjar med "betyg" i namnet. Går det? Tacksam för hjälp.

Medlem sedan okt. 2004392 inlägg
#2

Om jag förstod dig rätt så... har du 5 select!
Enklaste sättet att göra det är att du lägger ett sällsynt tecken mellan
betyg33 eller betyg12 så här till exempel
betyg3-3 och betyg1-2 och sen gör du en for som kör 5 gånger och på varje for så lägger du en explode....
Förstod jag dig fel så ignorerar du jag sagt och förklarar dig lite mer annars om jag förståt dig rätt men du vet inte hur du ska göra skriv det då!

Medlem sedan aug. 2004290 inlägg
#3

Tja!

Nä jag var nog lite otydlig. Det är aldrig samma antal <select>. Det kan variera från 1 till hur många som helst typ beroende på vem som e inloggad. Det är alltså <option> som är 1 till 5 i varje <select>. Alltså man väljer i varje <select> det betyg som man vill sätta på varje rad. På varje rad finns en checkbox av typen array som gör att man vet vilken rad det sedan gäller i databasen. Men för att php-scriptet ska veta ifrån vilken rad man kom...då måste jag hu ha med något id i namnet på varje <select>. Hur ska php-scriptet annars veta vilken rad i databasen som den ska sätta in betyget (siffran från 1 till 5) på?

Medlem sedan okt. 2004392 inlägg
#4

Alltså finns det en for som skriver in alla select?
Då är problemet löst så här gör du:
detta lägger du FÖRE for:en
$antalselect=0;
detta lägger du I for:en
$antalselect=$antalselect+1
detta lägger du UTANFÖR for:en, men i samma form som selecterna
echo "<input type=\"hidden\" name=\"aselect\" value=\"$antalselect\">
Och på andra sidan så kör du en for gånger antalet $_POST['aselect'] i den nya for:en på mottagnings sidan skriver du:
$_POST['betyg'.$i.'1']
Om det är $i du körde med på for:en (for($i=0;$i<$_POST['aselect'];$i++)) men annars kör du med det du tog.

Juste.... visste du vad andra siffran vad från början? eller?

Säg till för att då skriver jag ett helt script.... orkar inte skriva mer små kodsnutar

Medlem sedan aug. 2004290 inlägg
#5

Ja. det var ju bra tänkt. Enda problemet med det är att "raderna", checkboxens id, inte är numrerade från 1 och uppåt. De kan börja på 200 och sluta på 300 med olika hopp mellan varje id. Problem alltså.. :l

Sriptet som behövs skulle kunnas beskrivas såhär:

Du har en mysql databas med 1000 rader. På varje rad finns info om en bild. Betyg bland annat. Dessa raderna har id-nummer från 1 och 1000.

HTML sidor genereras från databasen. En inloggad besökare får upp exempelvis 10 rader, där varje rad är info om en viss bild. Id på varje rad representeras av en checkbox-array med bild-id. Vi säger att en inloggad besökare får upp 10 bilder. Dessa 10 har blandade id:n mellan 1 till 1000. Det ska finnas möjlighet att betygsätta varje bild. Det ska göras genom att man väljer en siffra 1 till 5 i en select brevid bilden. Denna siffras ska sedan sättas in på rätt rad i databasen. Hur göra?

:h

Medlem sedan okt. 2004392 inlägg
#6

nej nej gör bara så här betyg3-9 så fixar jag scriptet så länge

Medlem sedan okt. 2004392 inlägg
#7

Varför måste det heta betyg1 betyg2? kan det inte bara heta enligt sin checkbox? betyg299 betyg19 betyg4 fattar du?

Medlem sedan aug. 2004290 inlägg
#8

JO, men precis. det är det ska göra. ska heta som sin checkbox

Medlem sedan okt. 2004392 inlägg
#9

Kommer du ihåg input:en jag snacka om lite tidigare.... lägg in id:n på billderna där.. så typ
value="242;13;75;245;"
förstår du?

Medlem sedan aug. 2004290 inlägg
#10

Hmm..nu har du hjälp mig att komma på en lösing. Jag kan ju göra så här:

Jag skapar en ny form för varje <select> i denna form finns ett hidden-field med id-numret. <select> heter samma sak i varje form. Och alla forms har samma action. När formet skickas finns det alltid bara två fält i det. Ett hidden-field som talar om vilken rad det gäller och då behöver man ju inte ha något id på select boxen nä. Var det så du tänkte med? Det känns ju lite onödigt med massa olika forms men det kommer ju funka iaf. Eller hur. :bire

Medlem sedan aug. 2004290 inlägg
#11

Fast nu förstof jag precis hur du har tänkt. E ju ännu smartare ja..thanx

Medlem sedan okt. 2004392 inlägg
#12

detta lägger du FÖRE for:en
$olikaidn='';
detta lägger du I for:en
$olikaidn.=$ID //DETTA BYTER DU MOT ID STRINGEN
detta lägger du UTANFÖR for:en, men i samma form som selecterna
echo "<input type=\"hidden\" name=\"diffid\" value=\"$olikaidn\">
Nu kör du så här

$olikaid = explode(";",$_POST['diffid']);
$antalid = count($olikaid);
for($i=1;$i<$antalid;$i++){
$vilketid = "";
$vilketid = $olikaid[$i];
$_POST['betyg'.$vilketid]

VIPS PROBLEMET ÄR LÖST!

Medlem sedan aug. 2004290 inlägg
#13

Japp! Tack som f*n för hjälpen. :)

Medlem sedan okt. 2004392 inlägg
#14

Inga problem :e

259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)