webForumDet fria alternativet

Finn fem fel?

PHP

12 svar · 481 visningar · startad av jaxpax

Medlem sedan aug. 200598 inlägg
Frågan#1

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();

?>
Medlem sedan aug. 200598 inlägg
#2

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

Medlem sedan aug. 200598 inlägg
#3

Om ovanstående fel beror på inställningarna i min php.ini-fil så verkar jag vara illa ute :p .

I php.ini så ser det ut som följer:

;include_path = ".:c:\php\includes"

DETTA SÄGER MIG INGENTING! :bla

Någon som vet och kan koppla ihop det med ovanstående problem? :e

Medlem sedan aug. 20002 975 inlägg
#4

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.

Medlem sedan aug. 200598 inlägg
#5

Det är nog andra gången du räddar dagen för mig Matte :birp
Så du menar att med sökvägen bortkommenterad så skall jag alltså skapa denna mapp?

Medlem sedan aug. 20002 975 inlägg
#6

Nu förstår jag inte vad du frågar efter :)

Du försöker i ditt skript inkludera filen 'register_funcs.inc' från katalogen 'includes' (som ligger under den katalog där register.php ligger).

Det finns inget i dina PHP-inställningar som skulle förhindra detta. Du behöver alltså inte ändra i php.ini.

Min fråga var då ifall du dubbelkollat att dina sökvägar och filnamn är rätt, för annars borde din kod fungerat.

Medlem sedan aug. 200598 inlägg
#7

skapade en katalog som du sa men fick nu ett annat felmeddelande:

Parse error: syntax error, unexpected T_VARIABLE in D:\wwwroot\cvsite\includes\register_funcs.inc on line 34

:p

Medlem sedan aug. 200598 inlägg
#8

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;
}
}
?>
Medlem sedan aug. 20002 975 inlägg
#9

Din rad 33 ser ut så här:

if ($result && mysql_num_rows($result) > 0) {Tip

Vad har 'Tip' där att göra ?

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.

Medlem sedan aug. 200598 inlägg
#10

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"

Hoppas detta inte krånglar till det :l

Medlem sedan aug. 20002 975 inlägg
#11

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.

Medlem sedan aug. 200598 inlägg
#12

db_vars.inc är redan inkluderad i register_func.inc. Förstår om det inte framgick så tydligt med tanke på all den kod som jag la in.

Jag får fortsätta problemlösningen i morgon *GÄSP

Tack så otroligt mycket för ditt engagemang (y)

Medlem sedan aug. 20002 975 inlägg
#13

jaxpax skrev:

db_vars.inc är redan inkluderad i register_func.inc.

Det var det jag konstaterade av din kod. Sökvägen kommer därför att bli fel vid inkludering om du inte har en absolut sökväg, eller ändrar sökvägen.

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)