Avatar billede baitianlong Nybegynder
24. august 2004 - 16:59 Der er 5 kommentarer og
1 løsning

To-tre mystiske fejl i side med brugere

Jeg er ved at lave en side hvor en administrator kan oprette eller slette brugere. Men der er nogle ting, der ikke virker som det skal.

For det første havde jeg tænkt mig at man skulle kune markere flere og slette dem samtidig. Det har jeg kodet sådan her:

$userspasses = getUsersAndPasses();
$i = 1;
foreach($userspasses as $up) {
    $plads = strpos($up, "_");
    $user = substr($up, 0, $plads);
    $pass = substr($up, $plads + 1);
    $usernr = "usernr".$i;
    print "<tr><td width=\"10\"><input type=\"checkbox\" name=\"$usernr\" value=\"$user\"></td><td align=\"center\" width=\"290\" class=\"lille\">$user</td><td align=\"center\" class=\"lille\">$pass</td></tr>";
    $i++;
}

Som det fremgår, skulle hver checkbox have navnet usernr1, usernr2 osv. og value med $user (navnet)

Det virker også fint nok, kan jeg se i url'en. Her er så mit mislykkede script, der skulle slette dem fra databasen (med mere):

if(isset($_GET['function'])) {
  $function = $_GET['function'];
  switch($function) {
    case("Delete selected"):
      $userstodel = array();
      for($i = 1; $i < sizeof($_GET); $i++) array_push($userstodel, $_GET['usernr' + $i]);
      foreach($userstodel as $user) {
        print $user;
        if($user != "admin") deleteUser($user);
        else ?><script type="text/javascript">alert("\"admin\" can not be deleted");</script><?php
      }
    case("Create new user"):
      $create = true;
      case("Save user"):
      if(isset($_GET['newuser'], $_GET['newpass'])) {
        $newuser = $_GET['newuser'];
        $newpass = $_GET['newpass'];
        saveNewUser($newuser, $newpass);
      } else {
        $create = true;
        $fejl = "<tr><td colspan=\"2\" align=\"center\" class=\"fejl\">You didn't fill out the form correctly</td></tr>";
      }
  }
}

Det virker ikke, der kommer ikke noget i arrayet $userstodel. Desuden kommer den med alerten uanset hvem man vælger (og det antal gange som man har valgt personer)

Sidst men ikke mindst: $fejl bliver sat hver gang, uanset hvad. Det synes jeg også er underligt.

Her er mine submit knapper:

<input type="submit" name="function" value="Save user">
<input type="submit" name="function" value="Delete selected" style="width:120px;">
<input type="submit" name="function" value="Create new user" style="width:120px;">

Det er en del at rode med, men derfor giver jeg 200 points :)

PFT
Avatar billede baitianlong Nybegynder
24. august 2004 - 17:07 #1
ok, jeg kan godt se at jeg nok skal skrive print "<script>alert..." i stedet for min hoppen ud af php koden. Det er hermed gjort, men den er ikke smuk endnu. Langtfra
Avatar billede baitianlong Nybegynder
24. august 2004 - 17:13 #2
Jeg bør måske også nævne at jeg nogen gange (hvis Create new user er valgt) har to forms, der submitter til samme side (den selv). Det er noget rod, tror jeg. Jeg kopierer lige hele siden ind til spot og rettelser :)

<?php
session_start();

include 'newsfunc.php';

checkSession();
if(!isAdmin()) header("Location: ".$url."newsmain.php");

if(isset($_GET['function'])) {
    $function = $_GET['function'];
    switch($function) {
        case("Delete selected"):
            $userstodel = array();
            for($i = 1; $i < sizeof($_GET); $i++) array_push($userstodel, $_GET['usernr' + $i]);
            foreach($userstodel as $user) {
                print $user;
                if($user != "admin") deleteUser($user);
                else print"<script type=\"text/javascript\">alert(\"\"admin\" can not be deleted\");</script>";
            }
        case("Create new user"):
            $create = true;
        case("Save user"):
            if(isset($_GET['newuser'], $_GET['newpass'])) {
                $newuser = $_GET['newuser'];
                $newpass = $_GET['newpass'];
                saveNewUser($newuser, $newpass);
            } else {
                $create = true;
                $fejl = "<tr><td colspan=\"2\" align=\"center\" class=\"fejl\">You didn't fill out the form correctly</td></tr>";
            }
    }
}

?>
<html>
<head>
<title>CEMP - Newsletter Administer</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link rel="stylesheet" type="text/css" href="newsstyles.css">

</head>
<body>
<div align="center">
<p>
  <img src="images/cemp-logo3.gif" width="196" height="134">
</p>
<form action="newsadm.php" name="admform" method="GET">
<table width="630" align="center" cellpadding="5" border="1">
<tr>
<td align="center" class="overskrift">Administer Users</td>
</tr>
<tr>
<td align="center" class="lille">This can only be done by Admin</td>
</tr>
<tr>
<td align="center">
<p><table width="600" align="center" cellpadding="5" border="1">
<?php
$userspasses = getUsersAndPasses();
$i = 1;
foreach($userspasses as $up) {
    $plads = strpos($up, "_");
    $user = substr($up, 0, $plads);
    $pass = substr($up, $plads + 1);
    $usernr = "usernr".$i;
    print "<tr><td width=\"10\"><input type=\"checkbox\" name=\"$usernr\" value=\"$user\"></td><td align=\"center\" width=\"290\" class=\"lille\">$user</td><td align=\"center\" class=\"lille\">$pass</td></tr>";
    $i++;
}
?>
</table></p>
</td>
</tr>
<?php
if(isset($create)) {
    print "<tr><td align=\"center\"><form action=\"newsadm.php\" method=\"GET\"><br><table width=\"350\" cellpadding=\"5\" border=\"1\">";
    print "<tr><td colspan=\"2\" align=\"center\" class=\"stor\">Enter new user</td></tr>";
    print "<tr><td align=\"center\" class=\"lille\">Username</td><td align=\"center\"><input type=\"text\" name=\"newuser\" size=\"30\" maxlength=\"30\"></td></tr>";
    print "<tr><td align=\"center\" class=\"lille\">Password</td><td align=\"center\"><input type=\"password\" name=\"newpass\" size=\"30\" maxlength=\"30\"></td></tr>";
    if(isset($fejl)) print $fejl;
    print "<tr><td colspan=\"2\" align=\"center\"><input type=\"submit\" name=\"function\" value=\"Save user\"></td></tr>";
    print "</table></form></td></tr>";
}
?>
<tr>
<td align="center">
<div align="center">
<input type="submit" name="function" value="Delete selected" style="width:120px;">&nbsp;
<input type="submit" name="function" value="Create new user" style="width:120px;">&nbsp;
<input type="button" value="End" style="width:120px; font-weight:bold;" onClick="window.location.href='newsmain.php'">
</div>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>

Jeg håber ikke i besvimer... :)
Avatar billede baitianlong Nybegynder
24. august 2004 - 17:45 #3
Jeg snakker vist bare med mig selv her... Men hvis der er nogen, der gider være med, så lad os tage een ting ad gangen. Jeg har prøvet dette:

$userstodel = array();
    for($i = 1; $i <= sizeof($_POST); $i++) array_push($userstodel, $_POST['usernr' + $i]);
    print "sizeof(DOLLAR_POST) = ".sizeof($_POST)."<br>sizeof(userstodel) = ".sizeof($userstodel);
    foreach($userstodel as $user) {
        print $user;
        if($user != "admin") deleteUser($user);
        else $adminfejl = true;
    }

Den printer:

sizeof(DOLLAR_POST) = 4
sizeof(userstodel) = 4

Så der kommer ting i arrayet, men ikke kun usernr, for jeg havde kun valgt tre (function kommer altså også med), men den printer ikke user'ne, altså foreach-løkken eksekveres ikke ?!

HJÆLP !
Avatar billede baitianlong Nybegynder
24. august 2004 - 19:12 #4
Nå, men måske får jeg det løst selv. Det her var en vinder:

foreach($_POST as $user) {
    if($user != "admin") deleteUser($user);
    else $adminfejl = true;
}

Jeg roder videre med det, mens jeg snakker med mig selv :)
Avatar billede htx98i17 Professor
24. august 2004 - 19:36 #5
nogen gange hjælper det at snakke med sig selv :)
når man får lavet problemstillingen og selv læser det :-)
Avatar billede baitianlong Nybegynder
25. august 2004 - 18:12 #6
Nå, men nu har jeg fået løst det hele. Jeg manglede nogle elementære ting så som break; i min switch-løkke, og det hele var generelt sat dårligt op.

Men nu virker det - så tak til mig selv (og htx98i17)
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