Benutzer sperren: Fehler in Funktion?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Benutzer sperren: Fehler in Funktion?

    Hallo

    Hab da ein Problem, das schon schwieriger für mich ist. Und zwar versuche ich in meinem Script user sperren zu können, so dass sie dann die Meldung bekommen, dass sie halt gesperrt sind.

    das ist meine function die ich in der funktion.php habe

    Quellcode

    1. function test($id)
    2. {
    3. if($users['blocked']==1 && $users['blocktime']>=time()) {
    4. $sperrdauer=date("d.M.Y H:i:s" , $users['blocktime'] );
    5. $time=date("d.M.Y H:i:s" , time() );
    6. echo" Ihr Account wurde von einem Administrator gesperrt. <br> Die Sperre dauert bis : $sperrdauer. (Aktuelle zeit beträgt : $time)<br> Bitte wenden sie sich für genauere Informationen an einen Administrator " ;
    7. session_unregister("userid");
    8. session_destroy();
    9. exit();
    10. }
    11. }
    Alles anzeigen



    Und hier der code den ich in der login php habe zum Prüfen. PS mir wurde es so gesagt das es so funktionieren soll. Jedoch klappt es bei mir nicht

    Quellcode

    1. $db->query("SELECT * FROM users WHERE id='$id';");
    2. $row = $db->fetch();
    3. $row['blocked'];
    4. $row['blocktime'];
    5. if($users['blocked']==1 && $users['blocktime']>=time()) {
    6. $sperrdauer=date("d.M.Y H:i:s" , $users['blocktime'] );
    7. $time=date("d.M.Y H:i:s" , time() );
    8. echo" Ihr Account wurde von einem Administrator gesperrt. <br> Die Sperre dauert bis : $sperrdauer. (Aktuelle zeit beträgt : $time)<br> Bitte wenden sie sich für genauere Informationen an einen Administrator " ;
    9. session_unregister("userid");
    10. session_destroy();
    11. exit();
    12. }
    Alles anzeigen



    In der datenbank unter users sind 2 tabellen angelegt einmal mit blocked und blocktime jeweils mit nem wert drine.

    Kann mir da jemand helfen?

    Gruss Euer Dragon
  • d0nUt

    Leider habe ich da ein selsamen fehler. Undzwar kann ich jetzt sperren jedoch greift es nur bei administratoren anscheinen oder nur auf den ersten user.

    Wenn ich ich spere bekomme ich die meldung das ich gespert bin. Sperre ich jedoch einen normalen user kann er sich ohne weitere einlogen. Hast du dazu ne idee?

    Hier mal die login.php

    Quellcode

    1. <?
    2. error_reporting(E_ALL);
    3. require("config.inc.php");
    4. $PATH=$CONFIG['internal']['path'];
    5. require("$PATH/mysql.inc.php");
    6. require("$PATH/config.inc.php");
    7. define('SMARTY_DIR', $CONFIG['internal']['smarty_dir']);
    8. require(SMARTY_DIR.'Smarty.class.php');
    9. $smarty = new Smarty;
    10. $smarty->assign("CONFIG_game_name",$CONFIG["game"]["name"]);
    11. $smarty->assign("CONFIG_internal_serverpath",$CONFIG["internal"]["serverpath"]);
    12. $smarty->assign("CONFIG_version",$CONFIG["game"]["int_version"]);
    13. session_start();
    14. if(isset($_GET['name']))
    15. {
    16. $db = new cl_extended_database;
    17. if($_GET["name"] == $CONFIG["game"]["admin"] || $db->get_system_lock('wartung', '') == '0')
    18. {
    19. $id = $db->user_get_id($_GET["name"]);
    20. if($id == -1)
    21. {
    22. $smarty->display("login_false.thtml");
    23. die();
    24. }
    25. if($db->user_get_pass($id) != $_GET['pw'])
    26. {
    27. $smarty->display("login_false.thtml");
    28. die();
    29. }
    30. $_SESSION["id"] = $id;
    31. }
    32. else
    33. {
    34. $smarty->display("wartung.thtml");
    35. die();
    36. }
    37. }
    38. // user Sperren
    39. function blocked($id)
    40. {
    41. $this->query("SELECT * FROM users WHERE id='$id';");
    42. $users = $this->fetch();
    43. $this->err();
    44. return $users['blocked'];
    45. }
    46. $db->query("SELECT * FROM users WHERE id='$id';");
    47. $users = $db->fetch();
    48. $users['blocked'];
    49. $users['blocktime'];
    50. if($users['blocked']==1 && $users['blocktime']>=time()) {
    51. $sperrdauer=date("d.M.Y H:i:s" , $users['blocktime'] );
    52. $time=date("d.M.Y H:i:s" , time() );
    53. echo" Ihr Account wurde von einem Administrator gesperrt. <br> Die Sperre dauert bis : $sperrdauer. (Aktuelle zeit beträgt : $time)<br> Bitte wenden sie sich für genauere Informationen an einen Administrator " ;
    54. session_unregister("userid");
    55. session_destroy();
    56. exit();
    57. }
    58. if(isset($_SESSION["id"]))
    59. {
    60. if(!isset($db))
    61. {
    62. $db = new cl_extended_database;
    63. }
    64. $id = $_SESSION["id"];
    65. if(!isset($_SESSION["name"]))
    66. {
    67. $_SESSION["name"] = $db->user_get_name($id);
    68. }
    69. if(isset($_GET['gal']) && isset($_GET['sys']) && isset($_GET['plan']))
    70. {
    71. $idp = $db->planets_get_userid($_GET['gal'],$_GET['sys'],$_GET['plan']);
    72. //echo "ID: $id; IDP: $idp<br>";
    73. if($user['adstime']>time()) $noads=1;
    74. else $noads=0;
    75. if($idp == $_SESSION['id'])
    76. {
    77. $_SESSION['coords']['gal'] = $_GET['gal'];
    78. $_SESSION['coords']['sys'] = $_GET['sys'];
    79. $_SESSION['coords']['plan'] = $_GET['plan'];
    80. }
    81. else
    82. {
    83. //Cheater... :-)
    84. echo "<br><br><br><center>Hi Cheater! Sorry - diese Lücke wurde geschlossen!!! :-)</center>";
    85. }
    86. }
    87. else
    88. {
    89. $_SESSION['coords'] = $db->planets_get_coords($_SESSION['id']);
    90. }
    91. $smarty->assign("cv",$_SESSION['coords']);
    92. $smarty->assign("sessionname",session_name());
    93. $smarty->assign("sessionid", session_id());
    94. $smarty->display("login-frame.thtml");
    95. }
    96. else
    97. {
    98. $smarty->display("index.thtml");
    99. }
    100. ?>
    Alles anzeigen



    Und die fehlermeldung kommt wenn ich einen anderenplani auswähle

    Notice: Undefined variable: db in /var/www/vhosts/dragon.space-server.org/subdomains/uni1/httpdocs/login.php on line 53

    Fatal error: Call to a member function query() on a non-object in /var/www/vhosts/dragon.space-server.org/subdomains/uni1/httpdocs/login.php on line 53
  • Hab das nun hinbekommen und leüft auch wunderbar aber wenn ich dafür ein extra fomular mache wo hc dann beispielsweise den user und die zeit eintrage wie lange ich ihn sperren möchte macht er das nicht. Ich weiss einfach nicht warum weil eigendlich müsste das so funzen.

    hier mal die function in der mysql.php

    Quellcode

    1. //User Sperren
    2. function sperren($user, $btime)
    3. {
    4. $btime = time() + $time;
    5. $user;
    6. $this->query("UPDATE cc".$n."users SET blocked = '1' , blocktime='$btime' WHERE userid='$user'");
    7. }


    hier das in der index_acp.php

    Quellcode

    1. //User Sperren
    2. if($_GET['action'] == 10) {
    3. $btime = $_GET['btime'];
    4. $user = $_GET['user'];
    5. $db->query("UPDATE cc".$n."users SET blocked = '1' , blocktime='$btime' WHERE userid='$user'");
    6. $smarty->display("acp/acp_sperren.thtml");
    7. }



    und hier die thtml datei

    Quellcode

    1. <tr>
    2. <form id="form1" name="form1" method="post" action="index_acp.php?action=10">
    3. <br />
    4. <input name="user" type="text" class="form" id="name" value="Username" size="30" />
    5. Username
    6. <input name="btime" type="text" class="form" id="time" value="Sperr Zeit" size="15" />
    7. Stunden
    8. <input type="submit" name="Submit" value="Senden">
    9. </form>
    10. </td>
    11. </tr>
    Alles anzeigen


    Weis einfach nicht warum das nicht geht

    Vieleicht habt ihr ne idee

    Gruss Dragon
  • Habs dann so versuch

    Quellcode

    1. $db->query("UPDATE users SET blocked='1' , blocktime ='$btime' WHERE userid='$user'");


    bekomm bei error_reporting diese meldungen

    Notice: Undefined index: btime in /var/www/vhosts/dragon.space-server.org/subdomains/uni1/httpdocs/index_acp.php on line 426

    Notice: Undefined index: user in /var/www/vhosts/dragon.space-server.org/subdomains/uni1/httpdocs/index_acp.php on line 427
  • heh kennst das doch vorallem wenn man selber was schreibt sieht man meist die eigenen fehler nicht:P

    Hab da mal eine frage an dich undzwar versuche ich wenn der user gesperrt wird das er die aktuelle urzeit auch in der db gespeichert wird jedoch ohne erfolg. Er legt immer den wert in der tabelle ab 0000-00-00 00:00:00


    hab es so versucht mit now(); oder mit time(); leider ohne erfolg. Selbst mit der eigenen Variabel ging es net

    Quellcode

    1. $aktuellezeit = +time();
    2. $db->user_sperren($id, $name, $blocked, $blocktime, $adminname, $grund, time());
    3. $aktuellezeit = +time();
    4. $db->user_sperren($id, $name, $blocked, $blocktime, $adminname, $grund, now());
    5. $aktuellezeit = +time();
    6. $db->user_sperren($id, $name, $blocked, $blocktime, $adminname, $grund, $aktuellezeit );




    und hier die funktion

    Quellcode

    1. function user_sperren($id, $name, $blocked, $blocktime, $adminname, $grund, $aktuellezeit)
    2. {
    3. $this->query("INSERT INTO users_gesperrt SET id='$id', user='$name', blocked='$blocked', blocktime='$blocktime', grund='$grund', adminname='$adminname', aktuellezeit='$aktuellezeit'");



    Hier mal die if schleife

    Quellcode

    1. if(isset($_GET['sperre_user'])) {
    2. //echo "Action: User speeren";
    3. print_r($_GET);
    4. $id = $_GET['Id'];
    5. $name = $_GET['Name'];
    6. $blocked = $_GET['blocked'];
    7. $grund = $_GET['grund'];
    8. $adminname = $_GET['adminname'];
    9. $blocktime = $_GET['blocktime'] + time();
    10. $aktuellezeit = +time();
    11. $db->user_sperren($id, $name, $blocked, $blocktime, $adminname, $grund, time());
    12. $smarty->assign("change","User");
    13. $smarty->assign("art","bearbeitet");
    14. $smarty->display("acp/ok.thtml");
    15. }
    Alles anzeigen


    Hier das selbe. Da hatte ich es auch mit now(); usw versucht aber entweder bekomme ich nur error meldungen oder es funzt garnix mehr. Das übersteigt ein wenig mein wissen.

    Vieleicht hast du ne Idee. :roll:

    Gruss Dragon
  • hi!

    hast du denn auch das db feld mit integer typ angelegt? timestamp in mysql != timestamp in php...

    funzt also so nicht!

    deshalb besser die php time() funktion benutzen und den wert in der db in nem integer feld speichern... beim auslesen mit date() wieder umwandeln

    mfg da BendIt
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!