15. september 2007 - 22:20Der er
18 kommentarer og 1 løsning
Mangende variable på tværs af inkluderede PHP-filer
Hej eksperter!
Jeg har til min PHP-baserede hjemmeside en fil, core.php, der indeholder funktioner til oprettelse af forskellige elementer på siden. core.php inkluderes i starten af min hovedside (indholder er her irrelevant), index.php. core.php inkluderer desuden en tredje fil, settings.php, i første linie. settings.php indeholder variable med præferencer for udførslen af funktionerne i core.php. Problemet er så bare, at settings.php aldrig bliver inkluderet - alle variablene er i hvert fald udefinerede. Hvordan kan det være?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Det mest relevante er måske i virkeligheden indholdet af core.php. I det hele taget er netop indholdet af dine filer af stor betydning for at kunne svare fornuftigt. "Du gør noget forkert" er nok det tætteste, man kan komme det :)
- eller bruger du måske en forkert sti til inkluderingen af 'settings.php'? Hvorfra 'ser' du stien? Fra det dokument, der inkluderer 'core.php' - eller fra 'core.php' selv?
Uden indholdet af dine filer kan det blive en lang quiz ;o)
Synes godt om
Slettet bruger
16. september 2007 - 14:03#4
Hmm... Tjekker lige filplaceringerne.
Synes godt om
Slettet bruger
16. september 2007 - 14:03#5
Hehe ja, jeg skriver et eksempel, hvis det bliver nødvendigt :)
Synes godt om
Slettet bruger
16. september 2007 - 14:05#6
Argh ok, her kommer alt indholdet - der er intet galt med filnavnene.
// MySQL function ConnectToDatabase() { mysql_connect("localhost", $MYSQL_username, $MYSQL_password); mysql_select_db($MYSQL_database); }
// SCRIPT FUNCTIONS
// Convert marks function ConvertMarks($string) { return str_replace("\"", "\\\"", $string); }
// SESSION FUNCTIONS
// Get username function GetUsername() { if (isSet($_SESSION["username"])) { return $_SESSION["username"]; } else { return false; } }
// Set username function SetUsername($username) { return $_SESSION["username"] = $username; }
// Get password function GetPassword() { if (isSet($_SESSION["password"])) { return $_SESSION["password"]; } else { return false; } }
// Set password function SetPassword($passwprd) { return $_SESSION["password"] = $password; }
// DATABASE FUNCTIONS
// Create profile function CreateProfile($username, $password, $mail) { mysql_query("INSERT INTO ".$MYSQL_tables["users"]." (username, password, mail) VALUES ('$username', '$password', '$mail')"); }
// Check profile function CheckProfile($username) { if (mysql_result(mysql_query("SELECT COUNT(*) FROM ".$MYSQL_tables["users"]." WHERE username='$username'"), 0)) { return true; } else { return false; } }
// Edit profile function EditProfile($username, $newUsername, $newPassword, $newMail) { if ($newUsername !== false) { mysql_query("UPDATE ".$MYSQL_tables["users"]." SET username='$newUsername' WHERE username='$username'"); } if ($newPassword !== false) { mysql_query("UPDATE ".$MYSQL_tables["users"]." SET password='$newPassword' WHERE username='$username'"); } if ($newMail !== false) { mysql_query("UPDATE ".$MYSQL_tables["users"]." SET mail='$newMail' WHERE username='$username'"); } }
// Delete profile function DeleteProfile($username) { mysql_query("DELETE FROM ".$MYSQL_tables["users"]." WHERE username='$username'"); }
// DRAWING FUNCTIONS
// Draw body style function DrawBodyStyle() { return "style=\"background-color:$DRAWING_Body_BackgroundColor;font-family:$DRAWING_Body_TextFont;font-size:$DRAWING_Body_TextSize\""; }
Jamen, for at en funktion skal få fat på en variabel som er sat uden for funktionen, bliver du nød til at fortælle funktionen at den skal lede globalt og ikke inden i funktionen.
Synes godt om
Slettet bruger
16. september 2007 - 15:11#14
Okay, sådan. Der er tilsyneladende stadig mange basale ting, jeg endnu ikke ved om PHP ;)
Synes godt om
Slettet bruger
16. september 2007 - 15:49#15
Så, nu virker det! global var roden til problemet... Bare smid nogle svar.
Hvordan variabler administreres i forhold til forskellige scopes varierer (som så meget andet) fra sprog til sprog.
I JavaScript er variabler således i udgangspunktet globale. Regel #2 for JS siger, at variabler hører til det scope, i hvilket de er erklæret med 'var'.
I PHP er variabler derimod i udgangspunktet lokale. Regel #2 siger, at variabler 'gøres tilgængelige i' eller 'hentes fra' det globale scope med 'global'.
Synes godt om
Slettet bruger
16. september 2007 - 18:26#18
Okay, begge dele lyder jo meget logisk - man skal bare være opmærksom på det :) Tak igen.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.