[PHP] Registrering + PunBB
Jag sitter och pillar med en registreringssida kopplad mot PunBB-databasen. Jag har krånglat fram lösningar för det mesta nu känns det som, men jag vet inte vilken kvalitet koden håller eller hur den kan förbättras. PHP är nytt för mig så tips som inte hör till just den här koden uppskattas också.
Det skulle vara kul att vakna upp och få se några svar i den här tråden som hjälper mig
Seriösa och konstruktiva svar uppskattas! Om det är av intresse kan jag ladda upp resten av koden som inte hör till just den här sidan men jag tycker det framgår ganska bra i namnen på funktionerna, etc. vad de gör.
Ursäkta om jag skriver lite luddigt eller tänker oklart.
<?php
if (!session_id()) {
session_start();
}
require 'common.php';
htmlStart('TEST AREA');
// MYSQL CONNECTION
$dbHost = "127.0.0.1";
$dbUsername = "root";
$dbPassword = "";
$dbDatabase = "testarea";
// CONNECT TO SERVER
$dbConnection = mysql_connect($dbHost, $dbUsername, $dbPassword);
if (!$dbConnection)
{
die('Could not connect: '.mysql_error());
}
// SELECT DATABASE
mysql_select_db($dbDatabase, $dbConnection);
echo '<div id="content">';
// FIRST TIME OUTPUT (FIRST STEP)
if (!$_GET['action'] && !$registrationFailed) {
?>
<div class="window">
<h2>Skapa ett konto:</h2>
<form method="post" action="?action=next">
<table class="registerInput">
<tr>
<td><strong>Användarnamn</strong></td>
<td><input type="text" name="username" size="20" tabindex="1" /></td>
</tr><tr>
<td><strong>Förnamn</strong></td>
<td><input type="text" name="firstname" size="20" tabindex="2" /></td>
</tr><tr>
<td><strong>Efternamn</strong></td>
<td><input type="text" name="surname" size="20" tabindex="3" /></td>
</tr><tr>
<td><strong>E-post</strong></td>
<td><input type="text" name="email" size="20" tabindex="4" /></td>
</tr><tr>
<td><strong>Lösenord</strong></td>
<td><input type="password" name="password" size="15" tabindex="5" /></td>
</tr><tr>
<td><strong>Upprepa lösenord</strong></td>
<td><input type="password" name="password2" size="15" tabindex="6" /></td>
</tr><tr>
<td> </td><td><input type="submit" value="Nästa" tabindex="7" /></td>
</tr>
</table>
</form>
<?php
}
// PERFORM TESTS ON FORM DATA
if ($_GET['action'] == 'next' && !$passed) {
// GET FORM DATA
$username = $_POST['username'];
$firstname = ucfirst($_POST['firstname']);
$surname = ucfirst($_POST['surname']);
$email = strtolower($_POST['email']);
$password = $_POST['password'];
$password2 = $_POST['password2'];
$_SESSION['username'] = $username;
// VALIDATION
function checkForm($username, $firstname, $surname, $email, $password, $password2) {
echo "\n".'<div class="registerNotices">'."\n<ul class=\"window\">\n<strong>Följande fel uppstod:<br /></strong>\n";
// PERFORM THESE TESTS IF YOU PLAN TO USE THE SAME USER TABLE AS PUNBB
if (!strcasecmp($username, 'Guest') || !strcasecmp($username, 'Gäst'))
error('Användarnamnet får inte vara "Gäst" eller "Guest".');
if (preg_match('/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/', $username))
error('Användarnamnet får inte vara en IP-adress.');
if ((strpos($username, '[') !== false || strpos($username, "]") !== false) && strpos($username, "'") !== false && strpos($username, "'") !== false)
error('Användarnamnet innehåller otillåtna tecken.');
if ('funkar inte så bra här')
error('Användarnamnet innehåller BBCode.');
$sqlUsername = mysql_real_escape_string($username);
// CHECK IF USERNAME EXIST IN DATABASE
$dbQuery = "SELECT * FROM forum_users WHERE username='".$sqlUsername."'";
$dbResult = mysql_query($dbQuery);
// IF ROW IS FILLED THAN REPORT ERROR
if (mysql_num_rows($dbResult) != 0)
{
error('Användarnamnet används redan.');
}
// CHECK THAT NO STRING IS TOO LONG OR TOO SHORT
function checkLength($var, $type, $min, $max) {
global $passed;
$short = 'et du angav är för kort.';
$long = 'et du angav är för långt.';
if (strlen($var) < $min) {
error($type.$short);
}
elseif (strlen($var) > $max) {
error($type.$long);
} else {
$passed = true;
}
}
checkLength($username, 'Användarnamn', 2, 20);
checkLength($firstname, 'Förnamn', 2, 20);
checkLength($surname, 'Efternamn', 2, 20);
checkLength($password, 'Lösenord', 4, 15);
// CHECK THAT E-MAIL ADDRESS IS VALID
function checkEmail($var) {
global $passed;
if (!ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*$", $var)) {
error('E-postadressen du angav är ogiltig.');
} else {
$passed = true;
}
}
checkEmail($email);
// CHECK THAT PASSWORDS MATCH
function checkPassword($password, $password2) {
global $passed;
if ($password == $password2) {
$passed = true;
} else {
error('Lösenorden du angav matchar inte.');
}
}
checkPassword($password, $password2);
echo "\n</ul>\n</div>\n";
}
checkform($username, $firstname, $surname, $email, $password, $password2);
}
// DO THIS IF FORM DOESN'T VALIDATE
if ($registrationFailed == true) {
?>
<div class="window">
<h2>Gör om, gör rätt:</h2>
<form method="post" action="?action=next">
<table class="registerInput">
<tr>
<td><strong>Användarnamn</strong></td>
<td><input type="text" name="username" size="20" tabindex="1" value="<?php echo $username; ?>" /></td>
</tr><tr>
<td><strong>Förnamn</strong></td>
<td><input type="text" name="firstname" size="20" tabindex="2" value="<?php echo $firstname; ?>" /></td>
</tr><tr>
<td><strong>Efternamn</strong></td>
<td><input type="text" name="surname" size="20" tabindex="3" value="<?php echo $surname; ?>" /></td>
</tr><tr>
<td><strong>E-post</strong></td>
<td><input type="text" name="email" size="20" tabindex="4" value="<?php echo $email; ?>" /></td>
</tr><tr>
<td><strong>Lösenord</strong></td>
<td><input type="password" name="password" size="15" tabindex="5" /></td>
</tr><tr>
<td><strong>Upprepa lösenord</strong></td>
<td><input type="password" name="password2" size="15" tabindex="6" /></td>
</tr><tr>
<td> </td><td><input type="submit" value="Försök igen" tabindex="7" /></td>
</tr>
</table>
</form>
<?php
}
// ONLY DO THIS IF FORM IS VALID (SECOND STEP)
if ($_GET['action'] == 'next' && !$registrationFailed) {
$authorized = true;
echo '<div class="window"';
echo '<h2>Är uppgifterna rätt?</h2>'."\n";
echo '<p>';
echo 'Användarnamn: '.$username.'<br />'."\n";
echo 'Riktigt namn: '.$firstname." ".$surname.'<br />'."\n";
echo 'E-postadress: '.$email."<br />\n";
echo "\n".'</p>'."\n<br />\n";
?>
<strong><a href="?action=register">Ja, registrera mig nu!</a></strong><br/><br />
<a href="index.php">Nej, registrera mig inte.</a><br />
<?php
}
// REGISTER USER (FINAL STEP)
if ($_GET['action'] == 'register' && $authorized && !$registrationFailed)
{
$now = time();
// ADD USER IN DATABASE
$dbQueryAdd = "'INSERT INTO forum_users (username, group_id, password, email, email_setting, save_pass, timezone, language, style, registered, registration_ip, last_visit)" .
" VALUES('".$username."', '4', '".sha1($password)."', '".$email."', '1', '1', '1', 'Swedish', 'Sulfur', '".$now."', '".get_remote_address()."', '".$now."'";
$dbAdd = mysql_query($dbQueryAdd) or error(mysql_error());
mysql_query($dbQueryAdd) or error(mysql_error($dbConnection));
}
// ERRORS
function error($message) {
global $passed, $registrationFailed;
$passed = false;
$registrationFailed = true;
echo "<li>\n";
echo $message."\n";
echo "</li>\n";
}
echo '<br class="clear" />';
echo '</div>'."\n";
echo '</div>'."\n";
htmlEnd();
// CLOSE DATABASE CONNECTION
mysql_close($dbConnection);
?>
Edit:
// Formaterar namnen
// MAKE PROPER NAME
function formatName($firstname) {
$string = ucwords(ereg_replace("()-", "\\1 ", $firstname));
return (str_replace(" ", "-", $string));
}
// Exempel
$firstname = formatName('sven bertil'); // Sven-Bertil
$surname = str_replace("-", " ", formatName('bergkvist-andersson')); // Bergkvist Andersson
"'We're pro-life.' Eww, you look it! You look like you're filled with life."
UNIX man pages online, GNU/Linux-schemaprogram för LiU