Avatar billede jakobsynder Nybegynder
31. august 2003 - 20:47 Der er 33 kommentarer og
1 løsning

Variable variabler? PHP ekspert søges!

Hej eksperter!

Jeg står i et forfærdeligt dilemma.

Jeg har et script der - i princippet - ser ud som følgende:
(har forsøgt at uddrage det væsentlige)

$id = $row["id"]; //henter ud fra db

echo "<input type='radio' name='$id' value='a'>";
echo "<input type='radio' name='$id' value='b'>";
echo "<input type='radio' name='$id' value='c'>";
echo "<input type='submit' name='submit' value='Submit'>";

Som i nok kan se, vil man få en formular hvor feltnavn er lig med indholdet af $id.

Når der så "submittes" skal der laves følgende tjek:

if([indhold af $id]=="a"){ bla bla }

- Hvordan laves det? Jeg kan simpelthen ikke få det til at spinne, da jeg ikke helt er inde i det med variable variabler. (hvis det da er det jeg skal bruge)

Jeg troede den ville gå med:

if($$id=="a"){ bla bla } - men det er åbenbart ikke sådan det skal løses.

Jeg håber i har nogle forslag. Spørg endelig hvis jeg roder for meget i min forklaring.

På forhånd tak.

Mvh. Jakob
Avatar billede gonza.dk Nybegynder
31. august 2003 - 20:51 #1
prøv med:

if([indhold af $_POST['id']=="a"){ bla bla }

eller
if([indhold af $_GET['id']=="a"){ bla bla }

afhængig af om du sender oplysninger med get eller post...
Avatar billede gonza.dk Nybegynder
31. august 2003 - 20:52 #2
eller nej vent... det er noget rod du har gang i...

du skal naturligvis vide hvad dit input felt hedder...
Avatar billede jakobsynder Nybegynder
31. august 2003 - 20:54 #3
Hehe, ja det er netop det jeg mener.
Problemet er at der udskrives et spørgeskema, med et ukendt antal spørgsmål.
Derfor vil hvert radio-punkt få navn efter spørgsmålets unikke ID, så det kan identificeres senere.

Jeg er næsten 100% på at det kan lade sig gøre, med "variable variabler", det er bare hvordan.
Avatar billede gonza.dk Nybegynder
31. august 2003 - 20:54 #4
$id = $row["id"]; //henter ud fra db

echo "<input type='radio' name='feltnavn' value='$id'>";
echo "<input type='radio' name='feltnavn' value='$id'>";
echo "<input type='radio' name='feltnavn' value='$id'>";
echo "<input type='submit' name='submit' value='Submit'>";


og så:

if([indhold af $_POST['feltnavn']=="a"){ bla bla }

eller
if([indhold af $_GET['feltnavn']=="a"){ bla bla }


noget i den stil?
Avatar billede gonza.dk Nybegynder
31. august 2003 - 20:55 #5
aahh... så er ovenstående heller ikk løsningen ;o)
Avatar billede jakobsynder Nybegynder
31. august 2003 - 20:55 #6
Nej, beklager. Så vil alle svarmuligheder fungere som ét spørgsmål, jo.
Avatar billede gonza.dk Nybegynder
31. august 2003 - 20:58 #7
men du bliver jo nødt til at vide hvad de forskellige radio variabler hedder på den næste side for at hive dem ned...

$id = $row["id"]; //henter ud fra db

echo "<input type='hidden' name='variabler' value='$id'>";
echo "<input type='radio' name='$id' value='a'>";
echo "<input type='radio' name='$id' value='b'>";
echo "<input type='radio' name='$id' value='c'>";
echo "<input type='submit' name='submit' value='Submit'>";



så kan du hive $variabler ud og tjekke op på den?
Avatar billede gonza.dk Nybegynder
31. august 2003 - 21:00 #8
evt. hvis der er flere...

echo "<input type='hidden' name='variabler' value='".$id."|".$id2."|".$id3".'>";

så kan du lave en explode("|", $variabler) og du har dine input i et array...
Avatar billede schaefner Juniormester
31. august 2003 - 21:00 #9
<?php
print_r($_POST);
?>
Avatar billede gonza.dk Nybegynder
31. august 2003 - 21:01 #10
men er nok ikk den optimale løsning? der findes sikkert noget smartere...
Avatar billede jakobsynder Nybegynder
31. august 2003 - 21:02 #11
Gonza, det virker desværre ikke. $variabler vil være det samme ved alle spørgsmål, derfor vil de ikke kunne skelnes fra hinanden.

Schaefner, ??? =)
Avatar billede jakobsynder Nybegynder
31. august 2003 - 21:04 #12
AAh !!! schaefner, jeg tror jeg fanger dig...
Jeg tester lige lidt og vender tilbage!
Avatar billede schaefner Juniormester
31. august 2003 - 21:05 #13
Du burde kunne lave noget alla dette:

list($id,) = $_POST;

afhængig hvormange felter du sender med.
Avatar billede whatever Nybegynder
31. august 2003 - 21:10 #14
Jeg er ikke 100% sikker på hvad du vil, men kan du ikke bare benytte en array som navn på dine input felter

echo "<input type='radio' name='spm[$id]' value='a'>";
echo "<input type='radio' name='spm[$id]' value='b'>";
echo "<input type='radio' name='spm[$id]' value='c'>";

Ved næste spørgsmål skal navnet også være spm[$id].

Når siden er submittet ligger alle svarene i array'en spm. Så henter du svarene med spm[xx], hvor xx er id'et på spørgsmålet.
Avatar billede schaefner Juniormester
31. august 2003 - 21:19 #15
<?php
if (isset($_POST['send'])) {
  list($bogstav, ) = $_POST;
  if ($bogstav == 'a') {
    // a
  }
}
?>
Avatar billede jakobsynder Nybegynder
31. august 2003 - 21:25 #16
Hehe, jeg synes jeg er mere forvirret end da jeg startede.

Det jeg vil -lige nu- er at "huske" et valgt punkt, i tilfælde af at brugeren submitter uden at have udfyldt hele formularen.
Mht. tjek om svarene er korrekt, tænkte jeg komemr af sig selv, hvis dette bliver løst.

schaefner >> Din print_r og din list kan jeg ikke helt finde ud af at få til at virke. Jeg er ude på dybt vand her, hehe.

Det jeg har først er:

$variabel_1 = 2763576;
$variabel_2 = 3274683;
Det jeg skal bruge bagefter er:

$2763576 = "x";
$3274683 = "y";

Mine ressourcer er:

$row["id"] = $variabel;

Jeg håber i forstår?
Avatar billede jakobsynder Nybegynder
31. august 2003 - 21:28 #17
Dvs. at:

$spm_id = $row["id"];

if($spm_id=="a"){
$checked = " checked"; }

echo "<input type='radio' name='$spm_id' value='a'$checked>";

osv...

Pointen er, at $spm_id er lig med f.eks. 3462 men jeg skal bruge indholdet af variablen, som navnet på en variabel.
Avatar billede jakobsynder Nybegynder
31. august 2003 - 21:55 #18
I øvrigt, whatever, jeg ville ønske din mulighed virkede, men jeg tror det desværre ikke.

Har jeg fuldstændig misforstået det hele? Kan det bare ikke lade sig gøre?
Hvordan løses den slags ellers normalt?

Jeg går ud fra det ikke har den store betydning, men hvis det kan motivere lidt, så giver jeg gerne 200 points for en løsning =)
Avatar billede schaefner Juniormester
31. august 2003 - 22:02 #19
Jeg tror ikke jeg er helt med.
Avatar billede nielle Nybegynder
31. august 2003 - 22:03 #20
Dit problem er at du ikke ved hvad værdien af id egentlig var når du har submittet formen. Smid den derfor med som en ekstra oplysning:

$id = $row["id"]; //henter ud fra db

echo "<input type='hidden' name='id' value='$id'>";
echo "<input type='radio' name='$id' value='a'>";
echo "<input type='radio' name='$id' value='b'>";
echo "<input type='radio' name='$id' value='c'>";
echo "<input type='submit' name='submit' value='Submit'>";
Avatar billede jakobsynder Nybegynder
31. august 2003 - 22:04 #21
I bund og grund, så modtager jeg en variabel.
Jeg ved hvad variablen hedder i from af en værdi.
Hvordan kan jeg tjekke variablens værdi, ud fra min viden om dens navn, baseret på værdien af en anden variabel. Heh.?
Avatar billede nielle Nybegynder
31. august 2003 - 22:05 #22
...dereftere burde det være muligt at lave en test på formene:

if ([indhold af $_POST[$_POST[['id']]=="a") { bla bla }
Avatar billede jakobsynder Nybegynder
31. august 2003 - 22:05 #23
nielle >> Problemet er, at det er et ukendt antal spørgsmål der stilles, og derfor vil jeg ikke kunne bruge $_POST["id"] til noget når jeg modtager, da den vil blive overskrevet flere gange.
Avatar billede nielle Nybegynder
31. august 2003 - 22:06 #24
...rettelse:

if ([indhold af $_POST[$_POST['id']]=="a") { bla bla }
Avatar billede jakobsynder Nybegynder
31. august 2003 - 22:06 #25
- eller rettere, medsendt flere gange.

feks.

<input type='hidden' name='id' value='1'>
<input type='hidden' name='id' value='2'>
<input type='hidden' name='id' value='3'>
<input type='submit'>
Avatar billede jakobsynder Nybegynder
31. august 2003 - 22:09 #26
Jeg kan huske at have stødt på noget lignende før, hvor en slags autologin skulle kunne gemmes for flere brugere på samme computer, så hver cookie skulle have navn baseret på ID og værdi baseret på brugernavn, og derefter hentes igen, ud fra det ID.
Avatar billede jakobsynder Nybegynder
31. august 2003 - 22:18 #27
Hvis

$spm_id = 12;

og

$$spm_id = "a";

så er

$12 = "a";

Det er princippet i det. Men jeg er bange for det ikke kan lade sig gøre, når det skrives til browseren. :-(

Men hvad gør jeg så?
Avatar billede schaefner Juniormester
31. august 2003 - 22:19 #28
en variabel må iøvrigt ikke starte med tal.
Avatar billede jakobsynder Nybegynder
31. august 2003 - 23:00 #29
http://www.linuxadvisory.com/forums/post1081.html#post1081

while($row_spm = mysql_fetch_array($res_spm)){

$spm_id = $row_spm["id"];

$spm_check = $_POST[$spm_id];    <------ pfft!!!

if($spm_check=="a"){  IT WORKS!  }

}

Hvor føler jeg mig dum. Det gør ham i ovenstående link også.
Hvis i vil have nogle points for jeres hjælp, så læg venligst et svar.
Avatar billede jakobsynder Nybegynder
31. august 2003 - 23:03 #30
Og mange tak for jeres tålmodighed i øvrigt =)
Avatar billede jakobsynder Nybegynder
31. august 2003 - 23:05 #31
Beklager spam, men lige lidt info:

Hvis nogen nogensinde skulle komme ud i samme problem igen, så skal man bare søge efter: "php variable name from variable value" på Google, hehe.
Avatar billede sansalvador Nybegynder
02. september 2003 - 10:02 #32
Noget helt andet jakob, istedet for at bruge $id = $row[id], er det nogle gange lettere at lave ALLE arrayets "variabler" om til rigtige variabler med
extract($row).

Med denne bliver alle indestående lavet om til variabler, som fx $id...
Avatar billede jakobsynder Nybegynder
02. september 2003 - 15:54 #33
sansalvador >> Ja, jeg kender godt extract, men kan ikke se hvordan jeg kunne have løst mit problem her, med den.

Jeg ved hvor mange variabler der skal tjekkes ud fra antal rækker i databasen, og hver af de rækker indeholder et felt, med en værdi, som vil være navnet på én af de variabler, jeg skal tjekke indhold af. extract tillader mig stadigvæk ikke at identificere dem.

Det eneste jeg kan få ud af en extract($_POST); er en stak variabler, med navne jeg ikke kan skille fra hinanden, og har ingen mulighed for at køre dem gennem en løkke, så jeg kan identificere dem og sammenligne værdier.

Med fare for at lyde ubehøvlet, så virker det som om, du i fællesskab med de andre, ikke har forstået mit problem, men jeg har fået det løst, og jeg er sikker på at andre i samme situation, vil forstå sammenhængen, så dette indlæg er ikke helt nyttesløst.

Til jer andre >> Jeg accepterer gonza.dk's svar i morgen, så smid lige et svar inden hvis i vil have del i point, ok?
Avatar billede sansalvador Nybegynder
02. september 2003 - 18:24 #34
Ja, nu var mit svar heller ikke rettet direkte mod løsningen af dit problem, men bare et lille hint, som er nyttigt for alle dem, der endnu ikke er klar over det :)

Ja, husk at det er aldrig svært at løse nødden, ´det komplicerede ligger i at finde den =)
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