Avatar billede Asky Forsker
05. oktober 2023 - 11:56 Der er 8 kommentarer og
1 løsning

flere $count i grupper

Jeg har to grupper radiobuttons, der kører på samme programmeringsstump
Den ene gruppe hedder valg[] og den anden hedder dag[].
Skal $ = være forskellige bogstaver eller kan de begge hedde N ?

$avalg = (isset($_POST['valg']) ? $_POST['valg'] : "");
    if(empty($avalg)){ die ("Venligst marker et af felterne medlem/ikke medlem."); }
        $N = count($avalg);
    echo " ";
   
    foreach($avalg as $valg){
        $string_valg.= $valg." ";
        echo " ";
    }
   
$adag = (isset($_POST['dag']) ? $_POST['dag'] : "");
  if(empty($adag)){ die ("Vælg venligst deltageform. "); }
        $I = count($adag);
          echo " ";
         
    foreach($adag as $dag){
        $string_dag.= $dag." ";
      echo " ";
  }
Avatar billede ejvindh Ekspert
05. oktober 2023 - 13:38 #1
Hvis radiobuttons går under navnet "valg[]" får du det ikke til at virke, hvis du undersøger $_POST["valg"]. Som @erikjacobsen forklarede dig i en tidligere tråd får du ikke et array ud af radiobuttons bare fordi du kalder dem noget med kantede parenteser. Så enten skal du fjerne de kantede parenteser i forbindelse med dine radiobuttons -- eller også skal du tjekke indholdet af $_POST["valg[]"] i stedet for $_POST["valg"].

Dit afsluttende spørgsmål forstår jeg ikke helt, men grundlæggende kan man jo sige, at når du skriver noget med et "$" foran, så arbejder du med en variabel. Og en almindelig nummerisk variabel kan kun have én værdi af gangen.

Du kan således godt bruge $adag flere gange, men den får jo en ny værdi hver gang du putter noget nyt indhold i den. Angående $N som du nævner, så bruger du den kun én gang, så jeg tænker ikke der er noget problem.

Med $string_dag er det lidt anderledes, men det er fordi du sætter et punktum foran lighedstegnet.  Dermed siger du, at det der står efter lighedstegnet blot skal lægges oveni det, som er i variablen i forvejen.
Avatar billede arne_v Ekspert
05. oktober 2023 - 14:04 #2
Alt det med radio buttons har jeg ikke forstand paa. Lyt til dem der har!

$N = count($avalg);
...
$N = count($adag);

er valid PHP - du kan godt genbruge en variabel.

Men husk at den sidste tildeling overskriver værdien fra den første tildeling så du har ikke længere resultatet fra count($avalg).

Jeg  vil frarråde den form for variabel genbrug.

$nvalg = count($avalg);
...
$ndag = count($adag);

giver langt mere forståelig kode.
Avatar billede Asky Forsker
05. oktober 2023 - 17:50 #3
Mit spørgsmål: "Skal $ = være forskellige bogstaver eller kan de begge hedde N ?"
er sådan set besvaret i #2. Det kan de ikke, hvis variablerne skal bruges hver for sig, skal de hedde to forskellige ting fx N og I. Jeg har dog brugt forslagene fra #2 for en mere forståelig kode.
Mit eksempel er fra en gammel PHP 5.6 kode - mere end 10 år gammel. Den er jeg ved at renovere. Måske kommer der også flere  ("mærkelige") spørgsmål.
jeg har nu fjernet de kantede parenteser, men bebolder samme navn og håber, at mine radiobuttons stadig betragtes som en grupper med samme navn.
Avatar billede ejvindh Ekspert
06. oktober 2023 - 08:11 #4
Alt i orden. Men det med variabler af samme navn er nu ikke nyt siden php5.6. Jeg kan næsten ikke forestille mig et programmeringssprog, hvor det ikke er sådan.

Det der måske kan have forvirret dig er, at på tværs af funktioner, kan man godt have variabler af samme navn. Men det handler om variablernes "scope" eller rækkevidde på dansk:
https://www.php.net/manual/en/language.variables.scope.php

Så en variabel defineret indenfor en funktion gælder kun inde i funktionen, medmindre du eksplicit definerer den som global. Inde på linket har variablen $a derfor forskelligt indhold alt efter om vi befinder os udenfor eller indenfor funktionen test.
Avatar billede Asky Forsker
06. oktober 2023 - 09:42 #5
Den formular, jeg sidder og arbejder med i øjeblikket (opdaterer fra PHP 5.6 til PHP 8.2)
Indeholdt oprindelig et sæt checkbokse på 3, en select med 3 valgmuligheder og en select med 8 muligheder. Den har virket fint i php 5.6, men volder nu lidt bøvl.
jeg vil "opdatere-" den til to sæt radio med required og en select på 8 muligheder, hvor man kun skal vælge en. I virkligheden burde de samme 3 koder kunne genbruges med lidt renovering af variablerne. Måske er fejlene helt andre steder?
Avatar billede Asky Forsker
06. oktober 2023 - 12:07 #6
Her to tilsyneladende ens koder$avalg = (isset($_POST['valg']) ? $_POST['valg'] : "");
    if(empty($avalg)){ die ("Venligst marker et af felterne medlem/ikke medlem."); }
        $nvalg = count($avalg);
    echo " ";
    foreach($avalg as $valg){
        $string_valg.= $valg." ";
        echo " ";
    }
 
$adag = (isset($_POST['dag']) ? $_POST['dag'] : "");
  if(empty($adag)){ die ("Vælg venligst deltageform. "); }
        $ndag = count($adag);
          echo " ";
    foreach($adag as $dag){
        $string_dag.= $dag." ";
      echo " ";
  }
Den øverste virker (brugt i en anden formular)
Den nederste virker ikke, eller rettere, de virker ikke, når de er efter hinanden.
Hvad er så årsagen?
Avatar billede ejvindh Ekspert
06. oktober 2023 - 14:09 #7
Du bliver nok nødt til at sige noget om, hvad du mener med, at den virker ikke.

Det eneste problem jeg lige kan få øje på er, at hvis du $avalg er tom, så dør scriptet jo i anden linje, og derfor når den aldrig frem til anden del.

Jeg har i øvrigt gennem flere tråde efterhånden undret mig lidt over, hvorfor du har alle disse 'echo " ";' linjer sat ind i din kode? Hvis det er til debugging, kunne det måske være en ide, at skrive noget forskelligt indhold i hver echo-streng, således at du kan se hvor langt scriptet kommer inden det fejler. Nogle gange kan det måske endda være hjælpsomt at lade echo-kommandoerne udskrive noget indhold fra de variabler, du arbejder med, så du kan se om de indeholder det, som du forventer.
Avatar billede arne_v Ekspert
06. oktober 2023 - 15:47 #8
Med hensyn til genbrug af variable så er der forskellige muligheder:

dynamisk typed sprog - mutable variabel : man kan tildele igen med hvilken som helst type data [PHP]

statisk typed sprog - mutable variabel : man kan tildele igen men kun med samme data type

immutable variabel :man kan ikke tildele igen [ikke understøttet i PHP]
Avatar billede Asky Forsker
09. oktober 2023 - 09:12 #9
Det viser sig nu, at de koder, jeg har nævnt i mit spørgsmål faktisk virker udmærket, I stedet havde jeg lavet en rigtig dum fejl, så fejlen var et helt andet sted. Da jeg så fik den rettet, gik det fremad og formularen virker med to sæt radiobuttons i grupper på 3 og en select på 8. :-). Tak for svarene, især blev jeg klogere på variabler.
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