Avatar billede mads1987 Nybegynder
14. september 2004 - 20:22 Der er 20 kommentarer og
1 løsning

"Tænd/sluk" billede

Hej,
jeg sidder og arbejder på en ”tænd/sluk” billede funktion. Det foregår på den måde at jeg har to billeder A og B, når jeg trykker på A skal billede A lyse, og billede B slukke og omvendt, eller sagt på en anden måde, de skal begge skifte stien på det billede de henter.

For at lette forståelsen, har jeg lavet et eksempel :)
http://www.2665.dk/ ( Prøv at trykke på smileys’ne)

Det virker fint kan i se, bortset fra at det er hele kolonnen som skifter, og ikke bare et enkelt billede.
Jeg så gerne at man kunne de omtalte regler fra før med billede A og B som tænder og slukker, galt for hver række (altså to smileys’ne), og ikke alle billederne.

Jeg bruger en løkke til at udskrive hvor mange rækker jeg vil have ud, og det er et tal som variere, derfor kan jeg ikke bare opsætte en masse if sætninger.

Min kode ser nu sådan ud:


<form action="" method="post">
<?
$antal = 7;

    while($tal <= $antal-1){

    if (!$billede1_x) {
        echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede1' src='1s.gif'></td>";}

    if ($billede1_x) {
        echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede1' src='1.gif'></td>";}

    if (!$billede2_x) {
        echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede2' src='2s.gif'></td>";}

    if ($billede2_x) {
        echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede2' src='2.gif'></td>";}

echo "<td><br></td></tr>";
$tal=$tal+1;}
?>
</form>
Avatar billede detox Nybegynder
14. september 2004 - 20:47 #1
Dette eksempel virker på et billede, istedet for en hel række. Det er osse forenklet lidt. Men hvis du vil have den til at huske de enkelte valg, skal det laves noget anderledes.

<form action="" method="post">
<?
$antal = 7;
$tal = 0;
while($tal < $antal) {
    if (!isset($_POST["billede1{$tal}_x"])) {
        echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede1{$tal}' src='1s.gif'></td>";
    } else {
        echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede1{$tal}' src='1.gif'></td>";
    }
    if (!isset($_POST["billede2{$tal}_x"])) {
        echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede2{$tal}' src='2s.gif'></td>";
    } else {
        echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede2{$tal}' src='2.gif'></td>";
    }
echo "<td><br></td></tr>";
$tal++;}
?>
</form>
Avatar billede mads1987 Nybegynder
14. september 2004 - 20:49 #2
Jah den går ikke helt, fordi det skal gælder for hver rækker. Altså når man har udfyldt det hele på http://www.2665.dk/ vil der være 7 "tændte" og 7 "slukkede"
Avatar billede detox Nybegynder
14. september 2004 - 20:51 #3
Ja, det tænkte jeg nok. Så skal det laves anderledes. Tænker lige....
Avatar billede mads1987 Nybegynder
14. september 2004 - 20:57 #4
Okay :) hvis det har nogen betydning, er meningen at svarene skal skrives til en database. Antallet af smileys skal ligeledes hentes fra en database ( Sammen med en masse andre data)
Avatar billede detox Nybegynder
14. september 2004 - 21:07 #5
Tja, jeg er faktisk ikke sikker på hvordan det skal gøres :o(
Avatar billede mads1987 Nybegynder
14. september 2004 - 21:35 #6
Vi håber på et andet klogt hoved kommer til ;)
Jeg har også selv kæmpet forgæves i flere dage nu.
Avatar billede mads1987 Nybegynder
15. september 2004 - 15:23 #7
Da endnu ingen har meldt sig på banen, har jeg sat point antallet op til 200, i håb om hjælp.
Avatar billede detox Nybegynder
15. september 2004 - 22:20 #8
Måske kan du bruge sessions:

<?
session_start();
if (isset($_POST['billede'])) {
    $kol = key($_POST['billede']);
    $row = key($_POST['billede'][$kol]);
    $_SESSION['billede'][$kol][$row] = true;
    $kol = $kol == 1 ? 0 : 1;
    unset($_SESSION['billede'][$kol][$row]);
}
?>
<form action="" method="post">
<?
$antal = 7;

for ($tal=0;$tal<$antal;$tal++) {
    if (!isset($_SESSION['billede'][0][$tal])) {
        echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede[0][$tal]' src='1s.gif'></td>";
    } else {
        echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede[0][$tal]' src='1.gif'></td>";
    }
    if (!isset($_SESSION['billede'][1][$tal])) {
        echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede[1][$tal]' src='2s.gif'></td>";
    } else {
        echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede[1][$tal]' src='2.gif'></td>";
    }
    echo "<td><br></td></tr>";
}
?>
</form>
Avatar billede Slettet bruger
15. september 2004 - 22:56 #9
Det burde kunne klares ved at bruge sessions:

<?php

session_start();

$antal=7;

if(!isset($_SESSION['onoff'])){
  $tal=0;
  while($tal < $antal) {
    $_SESSION['onoff'][$tal]='unset';
    $tal+=1;
  }
}

$tal=0;
while ($tal < $antal) {
  if (isset($_POST["on{$tal}_x"])) {
    $_SESSION['onoff'][$tal]='on';
  }
  if (isset($_POST["off{$tal}_x"])) {
    $_SESSION['onoff'][$tal]='off';
  }
  $tal+=1;
}

//HTML-sidehoved indsættes her.

echo '<form action="" method="post">';

$tal=0;
while ($tal < $antal) {
  echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='on{$tal}' src='1";
  if ($_SESSION['onoff'][$tal]!='on') echo 's';
  echo ".gif'></td>";
  echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='off{$tal}' src='1";
  if ($_SESSION['onoff'][$tal]!='off') echo 's';
  echo ".gif'></td>";
}

echo '</form>';

//HTML-sidefod

?>
Avatar billede Slettet bruger
15. september 2004 - 22:57 #10
Detox: Ikke pænt af dig at komme med en løsning mens jeg tænker ;-)
Avatar billede detox Nybegynder
15. september 2004 - 23:00 #11
Sandbox -> Du skal huske at gøre opmærksom på du tænker ;o)
Avatar billede Slettet bruger
15. september 2004 - 23:06 #12
Kunne du ikke høre det? Du må øve dine telepatiske evner lidt mere. ;-)

I det mindste er der så stor forskel på vores kode, at jeg ikke kan beskyldes for bare at skrive samme svar.
Avatar billede mads1987 Nybegynder
16. september 2004 - 10:15 #13
Jeg valgte at arbejde videre med detox forslag ( Det var jo, trods alt, ham der kom først :0) ) Der skal flere smileys på, og det burde jeg jo kunne fixe selv, men tror at sessionen driller, kan du evt. smide en 3. på i sessionen, så må jeg kunne se hvad der skal foregå for at få flere på.
Avatar billede detox Nybegynder
16. september 2004 - 10:33 #14
Ok, har måtte ændre lidt på strukturen. Nu er den meget mere fleksibel og du kan frit vælge antal rækker og kolonner:

<?
session_start();

$antal_row = 7; // Antal rækker
$antal_kol = 3; // Antal kolonner (svarmuligheder)

if (isset($_POST['billede'])) {
    $row = key($_POST['billede']);
    $kol = key($_POST['billede'][$row]);
    unset($_SESSION['billede'][$row]);
    $_SESSION['billede'][$row][$kol] = true;
}
?>
<form action="" method="post">
<?
for ($tal=0;$tal<$antal_row;$tal++) {
    for ($i=0;$i<$antal_kol;$i++) {
        if (isset($_SESSION['billede'][$tal][$i])) {
            echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede[$tal][$i]' src='1.gif'></td>";
        } else {
            echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede[$tal][$i]' src='1s.gif'></td>";
        }
    }
    echo "<td><br></td></tr>";
}
?>
</form>
Avatar billede detox Nybegynder
16. september 2004 - 10:34 #15
Ps: og så sparer du 2 billeder, da du kun behøver: '1.gif' og '1s.gif'
Avatar billede mads1987 Nybegynder
16. september 2004 - 11:15 #16
Jah men ville faktisk gerne kunne have forskellige billeder :-) Det kunne du selvfølgelig ikke vide. Men der skal være 7 forskellige billeder at vælge i mellem. 1s.gif 2s.gif osv. som så skal skifte til 1.gif 2.gif osv.
Avatar billede detox Nybegynder
16. september 2004 - 11:21 #17
Du kan evt. lave løkken sådan:

for ($tal=0;$tal<$antal_row;$tal++) {
    for ($i=0;$i<$antal_kol;$i++) {
        if (isset($_SESSION['billede'][$tal][$i])) {
            echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede[$tal][$i]' src='{$i}.gif'></td>";
        } else {
            echo "<td colspan='2' align='center' valign='middle' class='skema'><input type='image' name='billede[$tal][$i]' src='{$i}s.gif'></td>";
        }
    }
    echo "<td><br></td></tr>";
}

Så skal billederne bare hedde hhv.: '0.gif', '0s.gif', '1.gif', '1s.gif', '2.gif', '2s.gif', osv.
Avatar billede mads1987 Nybegynder
16. september 2004 - 11:48 #18
Ja den burde jeg jo selv havde luret, men nu virker det! Jeg står i den situation, at alle smileysne skal optræde under forskellige skemaer, kan man derfor give sessionen på hver side et unikt navn så "svarene" ikke allerede er givet (gemt i sessionen) på forhånd, hvis du forstår.
Avatar billede detox Nybegynder
16. september 2004 - 11:50 #19
Ja, i dette tilfælde hedder den jo: $_SESSION['billede'], men den kunne hedde hvad som helst.
Avatar billede mads1987 Nybegynder
17. september 2004 - 08:55 #20
Det er ganske simpelt alletiders detox, nu virker alt som jeg havde tænkt mig! Du må meget gerne svare.
Avatar billede detox Nybegynder
17. september 2004 - 09:39 #21
Perfekt :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