Avatar billede sukos Juniormester
21. november 2004 - 09:53 Der er 7 kommentarer og
1 løsning

session som ændrer sig

hey
Jeg har noget bøvl med en session som ændrer sig!
Og jeg kan ikke finde ud af hvor det går galt.
Hvis man logger ind her:
http://showsource.users.whitehat.dk/users/
og går på siden for at ændre data, og vælger linket "edit brugere"
ja, så får man listen over brugere.
Men vælger man at få dem sorteret efter aktiv, brugernavn ........
ja, så ændres $_SESSION["navn"]
Det virker fint nok på en win maksine!

Det værste er, at hvis jeg logger ind som admin, og klikker på linket "edit brugere", ja så er $_SESSION["navn"] pludselig "test" :O)

Inden jeg "smider om mig" med kode, vil jeg gerne høre evt. forslag til hvad problemet evt. kan være?
Avatar billede agertoft Nybegynder
21. november 2004 - 11:28 #1
Din session-variabel skifter ikke til "test" af sig selv. Du må have angivet det i koden et sted, så uden den bliver det svært at hjælpe :)
Avatar billede Slettet bruger
21. november 2004 - 11:44 #2
Det ser ud til at $_SESSION["navn"] bliver sat til den sidste på aktiv-listen. Måske skal du se koden til at lave den liste efter.

Du extracter vel ikke fra dit query-resultat, så det kommer i en global variabel, som er den samme som er sat med session_register?
Avatar billede sukos Juniormester
21. november 2004 - 11:59 #3
jahh, det er sgu lidt pinligt! Sidder her og laver kode som jeg ikke selv kan hitte ud af!

Anyway, filen til redigering af brugere

<?php
if (false == admintjek()) {

echo"<b>Du ikke har rettigheder til at se requested (includefil) side!</b>";

return;
}else{
$b_string = "?useredit=brugere";
?>
<h3>Brugeradmin</h3>
<?php

array_push($sortlist, "aktiv");

if(!isset($_GET[$sort_get_var]) || !in_array(strtolower($_GET[$sort_get_var]), $sortlist)) {
$sort = "`navn`";
$nextuser_str = $b_string;
}else{
$sortvar = strtolower($_GET[$sort_get_var]);
$sort = "`". $sortvar ."`";
    if($sortvar == "oprettid" || $sortvar == "admin") {
    $sort = $sort ." DESC";
    }

$nextuser_str = $b_string ."&". $sort_get_var ."=". $sortvar;

}

$id_list = array();
$allusers = mysql_query("SELECT `id`, `aktiv` FROM `". $usertable ."` ORDER BY ". $sort ."") or die (mysql_error());
$active = 0;

while($i_d = mysql_fetch_object($allusers)) {
$id_list[] = $i_d->id;

if($i_d->aktiv > 0) {
$active++;
}

}
mysql_free_result($allusers);
$antal = count($id_list);


if(isset($_GET["edit"]) && in_array($_GET["edit"], $id_list)) {
$getuser = mysql_query("SELECT * FROM `". $usertable ."` WHERE `id` = '". $_GET["edit"] ."'") or die(mysql_error());

$v = mysql_fetch_object($getuser);

echo"Redigering af <b>". toHtml($v->navn) ."</b> &nbsp; &nbsp; ". make_link($nextuser_str, "Annuller");

echo"<p>\n";

if($antal > 1) {
$first = current($id_list);
$last = end($id_list);
reset($id_list);

if(true == get_id($_GET["edit"])) {

$a = make_link($nextuser_str ."&edit=". get_id($_GET["edit"]), "forrige");
    if($antal > 3) {
    $$a = make_link($nextuser_str ."&edit=". $first, "<<")." - ". $a;
    }else{
    $$a = $a;
    }
}else{
$a = "";
$$a = "&nbsp;";
}

if(true == get_id($_GET["edit"], 1)) {
$b = make_link($nextuser_str ."&edit=". get_id($_GET["edit"], 1), "næste");
    if($antal > 3) {
    $$b = $b ." - ". make_link($nextuser_str ."&edit=". $last, ">>");
    }else{
    $$b = $b;
    }
}else{
$b = "";
$$b = "&nbsp;";
}

echo"<table width=\"360\"><tr>\n";
echo"    <td width=\"100\">". $$a ."</td>\n";
echo"    <td align=\"center\">";
for($x=0; $x < $antal; $x++) {
if($id_list[$x] == $_GET["edit"]) {
echo $x+1;
    }
}
echo" af ". $antal ."</td>\n";
echo"    <td width=\"100\" align=\"right\">". $$b ."</td>\n";
echo"</tr></table><br>\n";

}

if($v->admin == $adminstatus && $_SESSION["navn"] != $superuser) {
echo"Sorry, men kun \$superuser kan &aelig;ndre andre admin's";
return;
}

if($v->navn == $superuser) {
echo"Sorry, men \$superuser kan IKKE &aelig;ndres her";
return;
}

?>

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post">
<input type="hidden" name="<?php echo $globalvar; ?>" value="admin_update_user">
<input type="hidden" name="admin_update" value="<?php echo $v->id; ?>">
<input type="hidden" name="back" value="<?php echo $_SERVER["REQUEST_URI"]; ?>">
<table><tr>
    <td>Nyt password:</td>
    <td><input type="text" name="admin_update_pass" class="input" size="24"></td>
</tr><tr>
    <td>Email:</td>
    <td><input type="text" name="admin_update_email" value=<?php echo toForm($v->email); ?> class="input" size="24"> <span class="small">(Skal v&aelig;re udfyldt)</span></td>
</tr><tr>
    <td>Admin:</td>
    <td><?php
for($i = 1; $i <= $adminstatus; $i++) {
echo $i ." <input type=\"radio\" name=\"admin_update_admin\" value=\"". $i ."\"";
if($i == $v->admin) {
echo" checked";
}
echo">";
}
?> <span class="small">Admin <b><?php echo $adminstatus; ?></b> == adminstatus</span></td>
</tr><tr>
    <td>Aktiv:</td>
    <td><?php
for($b = 0; $b <= 1; $b++) {
echo $b ." <input type=\"radio\" name=\"admin_update_aktiv\" value=\"". $b ."\"";
if($b == $v->aktiv) {
echo" checked";
}
echo">";
}

?>
<span class="small">Er aktiv == <b>0</b> kan der ikke logges ind</span></td>
</tr><tr>
    <td colspan="2" align="center"><input type="submit" class="submit" value="Opdater bruger"></td>
</tr></table>

</form>

<?php

mysql_free_result($getuser);

}else{


if(!isset($_GET[$users_next_var]) || !is_numeric($_GET[$users_next_var])) {
$start = 0;
}else{
    if($_GET[$users_next_var] >= $antal) {
    $start = $antal-1;
    }else{
    $start = $_GET[$users_next_var];
    }
}

$users = mysql_query("SELECT `id`, `navn`, `oprettid`, `aktiv`, `admin` FROM `". $usertable ."` ORDER BY ". $sort ." LIMIT ". $start .",". $visantal ."") or die(mysql_error());
if(mysql_num_rows($users) !=0) {

echo $antal ." brugere i DB'en. ". $active ." aktive, og ". ($antal-$active) ." inaktive<br>\n";
echo"Er brugeren admin, er &quot;admin&quot; == ". $adminstatus ."\n";
echo"<table><tr class=\"small\">\n";
echo"    <td>&nbsp;</td>\n";
echo"    <td>". make_link($b_string ."&". $sort_get_var ."=navn", "Brugernavn") ."</td>\n";
echo"    <td style=\"padding-left: 8px;\">". make_link($b_string ."&". $sort_get_var ."=aktiv", "Aktiv") ."</td>\n";
echo"    <td align=\"center\">". make_link($b_string ."&". $sort_get_var ."=oprettid", "Oprettet") ."</td>\n";
echo"    <td align=\"center\">". make_link($b_string ."&". $sort_get_var ."=admin", "Admin") ."</td>\n";
echo"    <td>&nbsp;</td>\n";
while($u = mysql_fetch_object($users)) {


$a_text = "ja";
$class = "green";

if($u->aktiv != 1) {
$a_text = "nej";
$class = "red";
}

if($u->admin == $superuserstatus && $superuser != $_SESSION["navn"]) {
$u->admin = $adminstatus;
}

$navn = str_replace("'", "\'", $u->navn);
$navn = str_replace("\"", "&quot;", $navn);

    echo"<tr>\n";
    echo"    <td class=\"small\" style=\"padding-right: 8px;\"><a href=\"#\" onclick=\"MakeConfirm('". $userfile ."?". $globalvar ."=deluser&id=". $u->id ."&navn=". urlencode($navn) ."&tab=". $u->admin ."','Slet brugeren ". $navn ." fra databasen???\\nDeaktivering g&oslash;res under edit'); return false\">Slet</a></td>\n";
    echo"    <td class=\"". $class ."\">". toHtml($u->navn) ."</td>\n";
    echo"    <td class=\"small\" align=\"center\">". $a_text ."</td>\n";
    echo"    <td class=\"small\" style=\"padding-left: 8px;\"><small>". tidspunkt($u->oprettid) ."</small></td>\n";
    echo"    <td class=\"small\" align=\"center\">". $u->admin ."</td>\n";
    echo"    <td class=\"small\">". make_link($nextuser_str ."&edit=". $u->id, "Edit") ."</td>\n";
    echo"</tr>";
    }
echo"</table>";

make_sublinks($visantal, $antal, $users_next_var, $nextuser_str);


}else{
echo"Hmm, ingen brugere i DB'en???";
}
mysql_free_result($users);

}

}
?>
Avatar billede sukos Juniormester
21. november 2004 - 12:07 #4
Hvis man logger ind som admin, bliver man til brugeren "test", som sidenhen bliver til brugeren "nytestbruger"
pass for admin er "help" :O)
Avatar billede Slettet bruger
21. november 2004 - 12:37 #5
Prøv i den sidste del af koden at rette

$navn = str_replace("'", "\'", $u->navn);
$navn = str_replace("\"", "&quot;", $navn);

til

$brugernavn = str_replace("'", "\'", $u->navn);
$brugernavn = str_replace("\"", "&quot;", $brugernavn);

Så skal du naturligvis også rette $navn til $brugernavn de par steder i udskriften lige nedenunder.

Jeg tror stadig mest på at det er et problem relateret til register_globals, og løsningen må være at lade være med at bruge variabelnavne i det globale scope, som er magen til dine nøgler i $_SESSION. Optimalt ville det naturligvis være at få register_globals slået fra, men det får du nok ikke whitehat til.

PS. Du bør lave & i alle dine links om til &amp;
Avatar billede sukos Juniormester
21. november 2004 - 12:46 #6
damn, du havde sgu ret!
Smid et svar, og få nogle velfortjente point!
Har selv tidligere undgået at bruge samme navn, til forskellige variabler, men det er så'n gået lidt i glemembogen, men aldrig mer'!!!

Mange tak!

(og jow, tror jeg også jeg gør, ændrer & til kode)
Avatar billede Slettet bruger
21. november 2004 - 12:56 #7
Du kan gøre det lidt lettere at undgå navnesammenfald ved at "snyde" lidt. Bare brug et array i $_SESSION. Det kunne for eksempel være $_SESSION['UserInfo'], som så kan indeholde $_SESSION['UserInfo']['name'] og de andre.
Avatar billede sukos Juniormester
21. november 2004 - 12:58 #8
ja, kunne man jo også.

Anyway, mange tak for hjælp!!! Nu kan jeg endelig få det lavet "færdigt"
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