Avatar billede supersquirrel Nybegynder
12. juni 2008 - 15:03 Der er 21 kommentarer

Flere opdateringer vha. checkbokse

Hejsa,

Nu er jeg igang med et administrator system, og vil lave det sådan at man har mulighed for at give de funktioner man vil vha. checkbokse.

Eventuelt således:
[x] Opret nyhed
[ ] Ret/slet nyhed
[x] Opret download
[ ] Ret/slet download

Her er det så Opret nyhed/download der bliver givet.
Men hvordan gør jeg det sådan her?
Avatar billede w13 Novice
12. juni 2008 - 15:09 #1
Jeg forstår ikke helt spørgsmålet. Du er jo godt på vej.
Hvad er det, du er i tvivl om?
Avatar billede w13 Novice
12. juni 2008 - 15:10 #2
Du modtager vel de afkrydsede felter i form af et array, og så er det jo bare at løbe det igennem.
Avatar billede jakobdo Ekspert
12. juni 2008 - 15:38 #3
Du kan jo gøre det som:

$opret_nyhed = (isset($_POST['opret_nyhed']) ? 'on' : 'off';
$ret_slet_nyhed = (isset($_POST['ret_slet_nyhed']) ? 'on' : 'off';
$opret_download = (isset($_POST['opret_download']) ? 'on' : 'off';
$ret_slet_download = (isset($_POST['ret_slet_download']) ? 'on' : 'off';

Så kan du gemme on eller off i en database, som igen styrer adgangen.
of/off kan jo blot være 0 eller 1.
Avatar billede jakobdo Ekspert
12. juni 2008 - 15:52 #4
Se noget ala: http://www.codebreaker.dk/exp/834694exp.php
Så kan du løbe arrayet: $_POST['adgang'] igennem.
Avatar billede supersquirrel Nybegynder
12. juni 2008 - 15:58 #5
Ja okay. Kan jeg få dig til at smide dit script ind, så jeg kan kigge på det jakobdo?
Avatar billede jakobdo Ekspert
12. juni 2008 - 17:37 #6
Scriptet er meget basic:

<?php
//http://www.eksperten.dk/spm/834694

if(isset($_POST['test'])){
    echo '<pre>';
    print_r($_POST);
    echo '</pre>';
}

?>
<form action="834694exp.php" method="post">
<input type="checkbox" name="adgang['opret_nyhed']" /> Opret nyhed<br />
<input type="checkbox" name="adgang['ret_slet_nyhed']" /> Ret/slet nyhed<br />
<input type="checkbox" name="adgang['opret_download']" /> Opret download<br />
<input type="checkbox" name="adgang['ret_slet_download']" /> Ret/slet download<br />
<input type="submit" name="test" value="Test" />
</form>
Avatar billede supersquirrel Nybegynder
12. juni 2008 - 20:10 #7
mm.. kan ikke lige forestille mig hvordan man kunne lave det desværre..
mysql_query("INSERT INTO admin(brugernavn, funktion) VALUES('$_POST[brugernavn]','$_POST[funktion]')") or die("Fejl: " . mysql_error());

Men hvordan jeg får det til at køre i et array, ved jeg ikke..
Avatar billede jakobdo Ekspert
12. juni 2008 - 20:18 #8
Hvordan vil du gerne have din SQL til at se ud i sidste ende ?
Avatar billede supersquirrel Nybegynder
12. juni 2008 - 20:21 #9
CREATE TABLE `administrator` (
`id` INT( 9 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`modtager` VARCHAR( 255 ) NOT NULL ,
`funktion` VARCHAR( 255 ) NOT NULL ,
`afgiver` VARCHAR( 255 ) NOT NULL ,
`dato` VARCHAR( 255 ) NOT NULL ,
`ip` VARCHAR( 15 ) NOT NULL
) ENGINE = MYISAM ;

Sådan havde jeg forestillet mig
Avatar billede supersquirrel Nybegynder
12. juni 2008 - 20:45 #10
Men kunne det være noget i stil med:

mysql_query("INSERT INTO admin(brugernavn, funktion) VALUES('$_POST[brugernavn]','adgang[]')") or die("Fejl: " . mysql_error());
Avatar billede jakobdo Ekspert
12. juni 2008 - 20:57 #11
Så skal det være noget i stil med:

foreach($_POST['adgang'] AS $function){
mysql_query("INSERT INTO admin(brugernavn, funktion) VALUES('$_POST['brugernavn']','$function')") or die("Fejl: " . mysql_error());
}
Avatar billede supersquirrel Nybegynder
12. juni 2008 - 21:25 #12
Uh det virker fint med at det add'er i databasen og det hele.
Nu tænker jeg på om jeg kan give checkbox'sne et ekstra navn som fx. "Opret nyhed", så jeg kan genkende dem i databasen - hvis du forstår?

Så database inputtet ser såleds ud:

ID    Modtager      Funktion_navn      Funktion_status        Afgiver      Dato  ip
1      Blablabla    Opret nyhed        on                    blablabla    bla    bla
Avatar billede jakobdo Ekspert
12. juni 2008 - 21:32 #13
Det kunne du godt gøre ja, men det vil ikke være smart.
Så bør du hellere bruge et ID, og så have en funktions-tabel.
Hvor du har opret_nyhed, ret/slet_nyhed, opret_download osv...
Og så referere til deres ID.
Avatar billede supersquirrel Nybegynder
12. juni 2008 - 21:44 #14
Ja okay det ville nok være smart, men hvordan tilføjer jeg dette ID til inputtet?
Avatar billede jakobdo Ekspert
12. juni 2008 - 21:46 #15
Det skal du så allerede gøre i din form.
Smid det i formen i stedet for opret_nyhed:
<input type="checkbox" name="adgang['opret_nyhed']" />

og så bruger du i din sql:

foreach($_POST['adgang'] AS $id => $status){
mysql_query("INSERT INTO admin(brugernavn, funktion_id, status) VALUES('$_POST['brugernavn']','$id','$status')") or die("Fejl: " . mysql_error());
}
Avatar billede supersquirrel Nybegynder
12. juni 2008 - 22:07 #16
Nu mener jeg at hvis jeg har en tabel med fx:

ID  Funktion
1    Opret nyhed
2    Ret/slet nyhed
3    Opret download
4    Ret/slet download
osv...

Med:
foreach($_POST['adgang'] AS $id => $status){
mysql_query("INSERT INTO admin(brugernavn, funktion_id, status) VALUES('$_POST['brugernavn']','$id','$status')") or die("Fejl: " . mysql_error());
}
bliver inputtet i db:
ID  brugennavn  funktion_id    status  ......
1  ....        'opret_nyhed'  on      ......
osv...

Hvordan kan jeg så refere til et ID i en anden tabel? Med det der er nu, kunne jeg jo skrive i toppen på siden:

$sql = mysql_query("SELECT funktion_id FROM administrator WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
if(mysql_num_rows($sql) == "opret_nyhed"){ }

Og på den måde er det jo kun dem der har den funktion der kan komme videre på siden..
Jeg ved ikke helt om du mener jeg skal gøre det på en anden måde, hvis du gør vil jeg da gerne høre det
Avatar billede jakobdo Ekspert
12. juni 2008 - 22:24 #17
Nu er jeg lige stået af... :o)
Avatar billede supersquirrel Nybegynder
12. juni 2008 - 22:31 #18
Hehe :P

Altså du mener jeg skal lave en seperat tabel hvori funktioner står med deres eget ID
(sådan har jeg forstået det)

Og så vil du have at jeg referer til den bestemte funktions ID i denne tabel - men hvordan skal jeg gøre det?

Lige nu ser inputtet i min admin tabel således ud:

id     modtager     funktion_id             status    
1     ....              'opret_nyhed'             on    
2     ....              'opret_download'     on

Hvis jeg så i toppen af min fx. opret nyhed fil skriver:

$sql = mysql_query("SELECT funktion_id FROM administrator WHERE brugernavn='$_SESSION[brugernavn]'") or die("Fejl: " . mysql_error());
if(mysql_num_rows($sql) == "opret_nyhed"){ opret nyhed indhold her }

Så ville alle brugere der ikke har denne funktion ikke få adgang til siden, kan vi ikke blive enige om det? :P

Jeg håber du forstår mig nu *G*
Avatar billede jakobdo Ekspert
13. juni 2008 - 06:33 #19
Du skal jo så lave et udtræk baseret på baggrund af et ID istedet for, men det skulle stadig være korrekt ja.
Avatar billede supersquirrel Nybegynder
13. juni 2008 - 13:50 #20
<?php
if($_GET[action] == "add"){
    foreach($_POST['adgang'] AS $id => $status){
    mysql_query("INSERT INTO administrator(modtager, funktion_id, status, afgiver, dato, ip) VALUES('$_POST[brugernavn]','$id','$status','$_SESSION[brugernavn]','$date','$ip')") or die("Fejl: " . mysql_error());
    echo "<script>document.location.href='?p=addAdmin'</script>";
    }
}
?>
<table border="0" cellspacing="0" cellpadding="0" align="center">
    <tr>
        <td background="gfx/design/top.png" width="456" height="2"></td>
    </tr>
    <tr>
        <td background="gfx/design/middle.png" width="456" height="30">
            <div style="padding-left:3px">
                <form action="?p=addAdmin&action=add" method="post">
                <table border="0" cellspacing="0" cellpadding="0">
                    <tr>
                        <td width="150">
                            <?php
                            $sql = mysql_query("SELECT * FROM administrator_funk ORDER BY funktion_small ASC") or die("Fejl: " . mysql_error());
                            while($funk = mysql_fetch_assoc($sql)){
                            ?>
                                <input type="checkbox" name="adgang[<?=$funk[funktion_small]?>]" style="width:15px" /> <?=$funk[funktion_long]?><br />
                            <? } ?>
                            <input type="submit" name="Opret administrator " value="Test" class="login" />
                        </td>
                    </tr>   
                </table>
                </form>
            </div>   
        </td>
    </tr>
    <tr>
        <td background="gfx/design/end.png" width="456" height="6"></td>
    </tr>
    <tr>
        <td height="10"></td>
    </tr>
</table>


... Og det virker fint for mig.
Men nu har jeg den idé at jeg vil have opstilt mine funktioner i flere rækker (automatisk).

Her har jeg kig på:
<?php
$i = 1;
for (; ; ) {
if ($i > 5 ) {
echo "</td><td>";
break;
}
$i++;
}
?>

Hvis jeg kan bruge det, hvordan kan jeg så sætte det sammen, således at når der er ect. 10 funktion i én række - så skifter den til en ny?
Avatar billede jakobdo Ekspert
17. juni 2008 - 21:52 #21
Hej Superegern, jeg kan desværre ikke lige udtænke en løsning på nuværende tidspunkt, så håber du evt. selv har fået info nok til at komme lidt videre...
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