Hallo!
Hab grad ein kleines Registrierungssystem auf objektorientierung umgebaut und seither funktioniert es nicht mehr ( ja ich weiß es gibt fertige reg-systeme, aber ich muss das für die uni selbst machen *g* )
das problem liegt darin dass $userList nach dem befüllen in userLoad() leer bleibt ( scheint zumindest so ) kann mir da jemand helfen?
hier die userverwaltung:
und hier die registierungs.php
danke!
Hab grad ein kleines Registrierungssystem auf objektorientierung umgebaut und seither funktioniert es nicht mehr ( ja ich weiß es gibt fertige reg-systeme, aber ich muss das für die uni selbst machen *g* )
das problem liegt darin dass $userList nach dem befüllen in userLoad() leer bleibt ( scheint zumindest so ) kann mir da jemand helfen?
hier die userverwaltung:
PHP-Code:
<?php
define("FILENAME","users.xml");
function createParser() {
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");
return $parser;
}
function startElement($parser, $element, $attributes) {
global $currentElement;
global $users;
global $newUser;
$newUser = $users->getuserList();
$currentElement = $element;
switch ($currentElement) {
case "userlist":
$newUser = array();
break;
case "user":
$newUser[] = array();
break;
case "timestamp":
$newUser[sizeof($newUser) - 1][] = $attributes["date"];
$newUser[sizeof($newUser) - 1][] = $attributes["time"];
break;
}
$users->setuserList($newUser);
}
function endElement($parser, $element) {
global $currentElement;
$currentElement = "";
}
function characterData($parser, $data) {
global $currentElement;
global $newUser;
global $users;
$newUser = $users->getuserList();
switch ($currentElement) {
case "name":
case "password":
case "email":
case "time":
$newUser[sizeof($newUser) - 1][] = $data;
break;
}
$users->setuserList($newUser);
}
class users{
private $userList;
function AddUser($user, $email, $password) { //User hinzufügen
$this->userLoad();
$timestamp = time();
$date = date("d.m.Y",$timestamp);
$time = date("H:i:s",$timestamp);
$length = sizeof($this->userList);
$this->userList[$length][0] = $user;
$this->userList[$length][1] = $email;
$this->userList[$length][2] = sha1($password."hmp");
$this->userList[$length][3] = $date;
$this->userList[$length][4] = $time;
$this->userSave();
}
function userSave() { //User speichern
$writer = xmlwriter_open_memory();
xmlwriter_set_indent($writer, true);
xmlwriter_start_document($writer, "1.0", "UTF-8");
xmlwriter_write_dtd($writer, "userlist", NULL, "http://www.coding-monkey.net/ue05/userlist.dtd");
xmlwriter_start_element($writer, "userlist");
foreach ($this->userList as $eintrag) {
xmlwriter_start_element($writer, "user");
xmlwriter_write_element($writer, "name", $eintrag[0]);
xmlwriter_write_element($writer, "email", $eintrag[1]);
xmlwriter_write_element($writer, "password", $eintrag[2]);
xmlwriter_start_element($writer, "timestamp");
xmlwriter_write_attribute($writer, "date", $eintrag[3]);
xmlwriter_write_attribute($writer, "time", $eintrag[4]);
xmlwriter_end_element($writer);
xmlwriter_end_element($writer);
}
xmlwriter_end_element($writer);
xmlwriter_end_document($writer);
$xmlContent = xmlwriter_output_memory($writer);
if (!file_exists(FILENAME)) {
$fp = fopen(FILENAME, "w");
}
else {
$fp = fopen(FILENAME, "r+");
}
$lock = flock($fp, LOCK_EX);
if ($lock) {
ftruncate($fp, 0);
fwrite($fp, $xmlContent);
flock($fp, LOCK_UN);
}
else {
print("An error occurred writing to the XML file!");
}
fclose($fp);
}
function existsalready($useru,$mail){ // berpr fen ob user/mail bereits registriert sind
for($i = 0; $i < sizeof($this->userList); $i++ ){
if(strcmp($this->userlist[$i][0], $useru) == 0){
return true;
}
if(strcmp($this->userlist[$i][1], $mail) == 0){
return true;
}
}
return false;
}
function userLoad() {
if (file_exists(FILENAME)) {
$fp = fopen(FILENAME, "r");
$lock = flock($fp, LOCK_SH);
if ($lock) {
$parser = createParser();
while ($data = fread($fp, 4096)) {
if (!xml_parse($parser, $data, feof($fp))) {
$this->newUser = array();
}
}
flock($fp, LOCK_UN);
xml_parser_free($parser);
}
else {
$this->newUser = array();
}
}
else {
$this->newUser = array();
}
$this->userList = $this->newUser;
}
public function setuserList($userlist) {
$this->userList = $userList;
}
public function __construct() {
$this->userList = array();
}
public function getuserList() {
return $this->userList;
}
}
?>
und hier die registierungs.php
PHP-Code:
<?php
session_start();
include("users.php");
define("FORWARD_CONTENT","Location: index.php?" . SID);
define("PASSWD2","passwd2");
define("PASSWD","passwd");
define("EMAIL","email");
define("USER","user");
define("TOKEN", "_token");
global $users;
$users = new users();
function sanitizeFilter($str) {
return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}
function printXHTMLHeader($pageTitle) {
echo '<?xml version="1.0" encoding="utf-8"?>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $pageTitle; ?></title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<?php
}
function printXHTMLFooter() {
?>
</body>
</html>
<?php
}
function printForm() {
echo "<h3>Register</h3>";
printErrMsg();
?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" enctype="multipart/form-data" method="post">
<p> <input type ="hidden" name ="<?php echo session_name(); ?>" value="<?php echo session_id(); ?>" /></p> <!-- Um Sessions ohne Cookies zu ermöglichen -->
<table>
<tr>
<td>Username:</td>
<td><input type="text" size="50" name="<?php echo USER ?>" value="<?php echo param(USER) ?>" /></td>
</tr>
<tr>
<td>EMail:</td>
<td><input type="text" size="50" name="<?php echo EMAIL ?>" value="<?php echo param(EMAIL) ?>" /></td>
</tr>
<tr>
<td>Passwort:</td>
<td><input type="password" size="50" name="<?php echo PASSWD ?>" value="<?php echo param(PASSWD) ?>" /></td>
</tr>
<tr>
<td>Passwort erneut:</td>
<td><input type="password" size="50" name="<?php echo PASSWD2 ?>" value="<?php echo param(PASSWD2) ?>" /></td>
</tr>
<tr>
<td><?php printToken(); ?></td>
<td><input type="submit" name="submit" value="Registrieren" /></td>
</tr>
</table>
</form>
<p> <a href="login.php">Zum Login</a></p>
<?php
printXHTMLFooter();
}
function param($name) {
return isset($_POST[$name]) ? sanitizeFilter($_POST[$name]):"";
}
function printToken() {
$token= session_id() . time() . mt_rand();
$_SESSION[TOKEN] = $token;
echo "<input type=\"hidden\" name=\"".TOKEN."\" value=\"".$token."\" />\n";
}
function printErrMsg() {
global $errMsg;
if (isset($errMsg)) {
echo "<p>Bitte folgende Fehler korrigieren:</p>\n";
echo "<ul>\n";
foreach ($errMsg as $e) {
echo "<li>$e</li>\n";
}
echo "</ul>\n";
}
}
function isTokenValid() {
return((strlen(trim($_POST[TOKEN])) > 0) &&
isset($_SESSION[TOKEN]) &&
(strcmp($_POST[TOKEN], $_SESSION[TOKEN]) == 0));
}
function invalidateToken() {
unset($_SESSION[TOKEN]);
}
function isEmpty($name) {
return (strlen(trim($_POST[$name])) == 0);
}
function isValidForm() {
global $errMsg;
global $users;
global $userList;
if (isEmpty(USER)) {
$errMsg[USER]= "User eingeben!";
}
if (isEmpty(PASSWD)) {
$errMsg[PASSWD]= "PASSWORT eingeben!";
}
if (isEmpty(PASSWD2)) {
$errMsg[PASSWD2]= "PASSWORT erneut eingeben!";
}
if(param(PASSWD) != param(PASSWD2)){
$errMsg["PASSWD_dont_match"]= "PASSWORT stimmt nicht überein!";
}
if(strpos(param(EMAIL),"@") ==false){
$errMsg[EMAIL]= "EMail nicht gueltig!";
}
if($users->existsalready(param(USER),param(EMAIL))){
$errMsg["exist"]= "User oder EMAIL bereits vorhanden!";
}
return !isset($errMsg);
}
function isFormSubmission() {
return ($_SERVER['REQUEST_METHOD']=='POST');
}
function normForm() {
// auf HTTPS weiterleiten
if(!isset($_SERVER["HTTPS"]) || strcmp($_SERVER["HTTPS"], "off") == 0) {
header("Location: https://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]);
}
global $users;
global $userList;
if (isFormSubmission()) {
if (isValidForm()) {
if(isTokenValid()) {
$users->userLoad();
$users->AddUser(param(USER),param(EMAIL),param(PASSWD));
$_SESSION[USER] = param(USER);
//header(FORWARD_CONTENT);
}
printXHTMLHeader("Registrierung");
printForm();
} else {
printXHTMLHeader("Registrierung");
printForm();
}
} else {
printXHTMLHeader("Registrierung");
printForm();
}
}
normform();
?>
danke!
Kommentar