Jag har nu setat och försökt finna vad som är felet med denna kod, utan att lyckas. Följande två felmeddelanden visas i browsern:
**Warning: require(includes/register_funcs.inc) [function.require]: failed to open stream: No such file or directory in D:\wwwroot\cvsite\register.php on line 2
Fatal error: require() [function.require]: Failed opening required 'includes/register_funcs.inc' (include_path='.;C:\php5\pear') in D:\wwwroot\cvsite\register.php on line 2**
Så här ser koden ut i register.php:
<?php
require('includes/register_funcs.inc');
if ($submit == 'Mailbekräftelse') {
$feedback = user_register();
$feedback_str = "<P class=\"errormess\">$feedback</P>";
} else {
$feedback_str = '';
}
// ----------------
// VISA FORMULÄR
// ----------------
include_once('includes/header_footer.php');
site_header('Medlemsregistrering');
$php_self = $_SERVER['PHP_SELF'];
$reg_str = <<< EOREGSTR
<TABLE CELLPADDING=0 CELLSPACING=0 BORDER=0 ALIGN=CENTER
WIDTH=621>
<TR>
<TD ROWSPAN=10><IMG WIDTH=15 HEIGHT=1
SRC="../images/spacer.gif"></TD>
<TD WIDTH=606></TD>
</TR>
<TR>
<TD>
$feedback_str
<P CLASS="left"><B>REGISTRERA</B><BR>
Efter att Du fyllt i detta formulär så kommer en bekräftelse att skickas till Din emailadress.
När Du sedan klickar på den länk som medföljer mailet kommer Ditt medlemskonto att gälla och
Du kan skapa Ditt CV.</P>
<FORM ACTION="$php_self" METHOD="POST">
<P CLASS="bold">Förnamn<BR>
<INPUT TYPE="TEXT" NAME="first_name" VALUE="$first_name"
SIZE="20" MAXLENGTH="25"></P>
<P CLASS="bold">Efternamn<BR>
<INPUT TYPE="TEXT" NAME="last_name" VALUE="$last_name" SIZE="20"
MAXLENGTH="25"></P>
<P CLASS="bold">Användarnamn<BR>
<INPUT TYPE="TEXT" NAME="user_name" VALUE="$user_name" SIZE="10"
MAXLENGTH="25"></P>
<P CLASS="bold">Lösenord<BR>
<INPUT TYPE="password" NAME="password1" VALUE="" SIZE="10"
MAXLENGTH="25"></P>
<P CLASS="left"><B>Lösenord</B> (upprepa det första)<BR>
<INPUT TYPE="password" NAME="password2" VALUE="" SIZE="10"
MAXLENGTH="25"></P>
<P CLASS="left"><B>Email</B> (behövs för bekräftelse)<BR>
<INPUT TYPE="TEXT" NAME="email" VALUE="$email" SIZE="30"
MAXLENGTH="50">
</P>
<P><INPUT TYPE="SUBMIT" NAME="submit"
VALUE="Mail confirmation">
</P>
</FORM>
</TD>
</TR>
</TABLE>
EOREGSTR;
echo $reg_str;
site_footer();
?>
Hej, Igen!
Efter lite letande så har jag funnit info om att det kan bero på vissa inställningar i min php.ini-fil. Man skall tydligen ange rätt sökväg för include-filer (eller något sånt) :l
Återkommer med mina problem om det kvarstår efter inställningarna :e
Din include_path i php.ini är bortkommenterad. Då används en default include_path, vilket enligt ditt felmeddelande är '.;C:\php5\pear'.
Med denna include_path ska du kunna inkludera med relativa sökvägar.
Under din katalog 'cvsite' ska du ha en katalog som heter 'includes'. I katalogen 'includes' ska du ha en fil som heter 'register_funcs.inc'. Det måste stämma exakt med versaler/gemener.
Om detta stämmer så ska din include fungera.
Tog mod till mig och la in koden i register_funcs.inc (fast att det kanske är lite mycket kod §jr )
Kanske är detta till hjälp?
<?php
// En fil med databasens host, user, password, och
// vald databas
include_once('db_vars.inc');
// En sträng för md5-kryptering.
$supersecret_hash_padding = 'En sträng som används för att fylla ut
korta strängar för md5-kryptering.';
function user_register() {
// Denna funktion kommer bara att fungera med superglobala arrayer,
// för att det inte skickas med några värden eller deklaration av globaler.
global $supersecret_hash_padding;
// Finns alla variabler och matchar lösenord?
if (strlen($_POST['user_name']) <= 25 &&
strlen($_POST['password1']) <= 25 && ($_POST['password1'] ==
$_POST['password2']) && strlen($_POST['email']) <= 50 &&
validate_email($_POST['email'])) {
// Validera användarnamn och lösenord.
if (account_namevalid($_POST['user_name']) ||
strlen($_POST['password1'] >= 6)) {
$user_name = strtolower($_POST['user_name']);
$user_name = trim($user_name);
// Single quotes är inte tillåtna.
$email = $_POST['email'];
// Accepterar inte dubletter av användarnamn och email.
$query = "SELECT user_id
FROM user
WHERE user_name = '$user_name'
AND email = '$email'";
$result = mysql_query($query);
if ($result && mysql_num_rows($result) > 0) {Tip
$feedback = 'FEL UPPSTOD -- Användarnamnet eller lösenordet som Du angav finns redan i vår databas, försök med att ange något annat alternativ';
return $feedback;
} else {
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$password = md5($_POST['password1']);
$user_ip = $_SERVER['REMOTE_ADDR'];
// Skapa ett nytt hash att föra in i db
// och bekräftelse-mailet.
$hash = md5($email.$supersecret_hash_padding);
$query = "INSERT INTO user (user_name, first_name,
last_name, password, email, remote_addr, confirm_hash,
is_confirmed, date_created)
VALUES ('$user_name', '$first_name', '$last_name',
'$password', '$email', '$user_ip', '$hash', '0',
NOW())";
$result = mysql_query($query);
if (!$result) {
$feedback = 'FEL UPPSTOD -- Databasfel';
return $feedback;
} else {
// Skicka bekräftelse med email.
$encoded_email = urlencode($_POST['email']);
$mail_body = <<< EOMAILBODY
Tack för Din medlemsregistrering på hemsida.com. Klicka på denna länk
för att bekräfta Din medlemsregistrering:
http://localhost/confirm.php?hash=$hash&email=$encoded_email
När Du ser meddelandet "bekräftelse", kommer Du att loggas in
på hemsida.com
EOMAILBODY;
mail ($email, 'hemsida.com Bekräftelse om medlemsregistrering',
$mail_body, 'From: p.norell@gmail.com');
// Visa meddelande om lyckd registrering
$feedback = 'LYCKAD MEDLEMSREGISTRERING.
Du kommer snart att få en bekräftelse skickad till Din emailadress';
return $feedback;
}
}
} else {
$feedback = 'FEL UPPSTOD -- Användarnamnet eller lösenordet är inte giltigt';
return $feedback;
}
} else {
$feedback = 'FEL UPPSTOD -- Vänligen fyll i alla fält korrekt!';
return $feedback;
}
}
function account_namevalid() {
// parameter för användning med strspan
$span_str = "abcdefghijklmnopqrstuvwxyz" .
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-";
// måste bestå av minst ett tecken.
if (strspn($_POST['user_name'],$span_str) == 0) {
return false;
}
// måste bestå av enbart giltiga tecken.
if (strspn($_POST['user_name'],$span_str) != strlen($name)) {
return false;
}
// min and max längd
if (strlen($_POST['user_name']) < 5) {
return false;
}
if (strlen($_POST['user_name']) > 25) {
return false;
}
// icke giltiga namn
if
(eregi("^((root)|(bin)|(daemon)|(adm)|(lp)|(sync)|(shutdown)|
(halt)|(mail)|(news)|(uucp)|(operator)|(games)|(mysql)|
(httpd)|(nobody)|(dummy)|(www)|(cvs)|(shell)|(ftp)|(irc)|
(debian)|(ns)|(download))$", $_POST['user_name'])) {
return false;
}
if (eregi("^(anoncvs_)", $_POST['user_name'])) {
return false;
}
return true;
}
function validate_email () {
return (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'. '[-
!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.' . '[-!#$%&\'*+\\./0-9=?AZ^_`
a-z{|}~]+$', $_POST['email']));
}
function user_confirm() {
// Denna funktion kommer enbart att fungera med superglobala arrayer,
// för att det inte skickas med några värden eller deklaration av globaler.
global $supersecret_hash_padding;
// Verifiera att de inte manipulerat med emailadressen.
$new_hash = md5($_GET['email'].$supersecret_hash_padding);
if ($new_hash && ($new_hash == $_GET['hash'])) {
$query = "SELECT user_name
FROM user
WHERE confirm_hash = '$new_hash'";
$result = mysql_query($query);
if (!$result || mysql_num_rows($result) < 1) {
$feedback = 'FEL UPPSTOD -- Lösenordet finns ej';
return $feedback;
} else {
// Bekräfta emailet och sätt kontot till aktivt.
$email = $_GET['email'];
$hash = $_GET['hash'];
$query = "UPDATE user SET email='$email',
is_confirmed='1' WHERE confirm_hash='$hash'";
$result = mysql_query($query);
return 1;
}
} else {
$feedback = 'FEL UPPSTOD -- Värden kunde inte matchas';
return $feedback;
}
}
?>
Sedan förstår jag inte vad du menar med att du skapar kataloger "som jag har sagt".
Tänk på att du när inkluderar filer i skript som du återigen inkluderar i andra skript, så kommer alla sökvägar för inkluderingarna att utgå från det "yttersta" skriptet.
Ligger inte då alla filer i samma katalog så måste du använda absoluta sökvägar.
Du försöker i ditt skript inkludera filen 'register_funcs.inc' från katalogen 'includes'
Jo jag menade include-katalogen...
Tänk på att du när inkluderar filer i skript som du återigen inkluderar i andra skript, så kommer alla sökvägar för inkluderingarna att utgå från det "yttersta" skriptet.
Ok, jag förstår vad du menar. det ser ut som så här:
-D:
|
-wwwroot
|
-sitemapp "här ligger register.php"
|
-includes "här ligger register_funcs.inc"
Nej, jag hänger med; visste dock inte om dina filer låg så från början.
I register_func.inc inkluderar du db_vars.inc. I och med att du har inkluderat register_func.inc i register.php kommer skriptet att leta efter db_vars.inc i katalogen sitemapp.
Därför kan det vara lämpligt att istället inkludera db_vars.inc direkt i register.php, annars måste du ha en absolut sökväg till den.
En annan sak, ge dina include-filer filändelse php. db_vars låter som ett skript med anslutningsuppgifter till MySQL, och med filändelse 'inc' kan de läsas direkt i klarttext i webbläsaren.