Jag jobbar på att skapa ett forum som ligger på min webbserver (Apache). Jag använder mySQL och php. Jag har efter mycket slit lyckats få till det här med sessioner, så att man loggar in sig för att kunna se den phpsida där alla trådarna ska listas. MEN, när jag ska skapa en sida där man kan lägga in nya poster i forumets databas, uppstår två frågor:
Hur gör jag för att det datum då användaren skriver inlägget ska läggas in som en variabel?
$datum = ?
Hur gör jag för att användar-ID för den som är inloggad ska läggas in som en variabel?
$userid = session(userid)..?
Och ett tips, använd unika namn på dina sessions variabler.
Beroende på vilka inställningar du har i php konfigurationen så kan det ställa till problem för dig annars.
Jag brukar ha sess_ i början på alla mina sessionsvariabler. T.ex:
$userid = $_SESSION['sess_userid'];
Och ett tips, använd unika namn på dina sessions variabler.
Beroende på vilka inställningar du har i php konfigurationen så kan det ställa till problem för dig annars.
Jag brukar ha sess_ i början på alla mina sessionsvariabler. T.ex:
$userid = $_SESSION['sess_userid'];
Jag tycker att det är lättare att spara arrayer i session:en.
Exempel hur en $_SESSION kan se ut:
Array
(
[log] => Array
(
[f_name] => Per
[e_name] => Person
[access] => 3
)
[nav] => Array
(
[page] => home
)
)
Sen tar man bara bort $_SESSION['log'] när besökaren loggar ut.
Tack, nu tror jag datumet funkar som det ska, men:
<?php
$User_Name = $_POST["anvandarnamn"];
$Losenord = $_POST["password"];
if(isset($_POST["anvandarnamn"]) && isset($_POST["password"]))
{
if($_POST["anvandarnamn"] == $User_Name && $_POST["password"] == $Losenord)
{
//användarnamnet och lösenordet var korrekt, startar session motorn
session_start();
//registrerar en varibel så vi kan hålla koll på besökaren
$userid = $User_Name;
session_register("userid");
//skickar besökaren till postsidan
header("Location: post.html");
} else {
//användarnamnet eller lösenord var fel, vi skickar tillbaka besökaren till inloggningssidan
header("Location: login.html");
}
} else {
//besökaren har trorligtvis knappat in post.php i webbläsaren, vi skickar tillbaka honom/henne till inloggningssidan
header("Location: login.html");
}
?>
<?php
$Title = $_POST["title"];
$Text = $_POST["text"];
$datum = date("Y-m-d H:i:s");
$Kat = $_POST["kategori"];
$userid = $_SESSION['userid'];
Så fort man trycker på knappen för att gå till posta-nytt-inlägg-sidan, så laddas logga-in-sidan istället..? Antagligen är det någon liten grej som jag har missat, det brukar vara så.
<?php
$User_Name = $_POST["anvandarnamn"];
$Losenord = $_POST["password"];
if(isset($_POST["anvandarnamn"]) && isset($_POST["password"]))
{
if($_POST["anvandarnamn"] == $User_Name && $_POST["password"] == $Losenord)
{
//användarnamnet och lösenordet var korrekt, startar session motorn
session_start();
//registrerar en varibel så vi kan hålla koll på besökaren
$userid = $User_Name;
session_register("userid");
//skickar besökaren tillbaka till indexonline
header("Location: index_online.php");
} else {
//användarnamnet eller lösenord var fel, vi skickar tillbaka besökaren till inloggningssidan
header("Location: login.html");
}
} else {
//besökaren har trorligtvis knappat in login.php i webbläsaren, vi skickar tillbaka honom/henne till inloggningssidan
header("Location: login.html");
}
?>
<?php
$title = $_POST["title"];
$text = $_POST["text"];
$datum = date("Y-m-d H:i:s");
$Kat = $_POST["kategori"];
$userid = $_SESSION['userid'];
// Anslut till MySQL på datorn 'localhost'
$conn = mysql_connect("IP-adress", "root", "lösenord") or die("Could not connect: " . mysql_error());
// Anslut till databasen med namn 'grafiket'
$db_selected = mysql_select_db("grafiket", $conn) or die("Can't use testdb : " . mysql_error());
// Skapa den SQlsats som ska lägga in data i tabellen 'user'
$query = "INSERT INTO thread(title, text, datum, Kat, Forfattare) VALUES ('$title', '$text', '$datum', '$Kat', '$userid')";
// Exekvera SQLsatsen och lagra resultatet i variabeln $result
$result = mysql_query($query);
//Avsluta databaskopplingen
mysql_close($conn);
exit;
?>
Nu har jag tre små problem kvar att lösa:
vilket format ska kolumnen datum ha i databasen? DATETIME?
Varför envisas den med att skicka användaren till loggain-sidan när man försöker skriva in en ny post?
Har du kollat så att $_POST['anvandarnamn'] och $_POST['password'] innehåller något? Eller att du har rätt namn på fälten i formuläret?
Skulle tippa på att felet ligger i första if-satsen som kollar om post-variablarna är satta. Är de inte det så skickas du till login.html. Och om de där två php-blocken ligger på samma sida så kommer du alltid vidarebefordras innan något får chans att sparas, oavsett om du skickas till index_online.php eller login.html.
Din andra if-sats känns lite onödig med. Det enda den gör är ju att kontrollera att post-variablarna stämmer med $User_Name och $Losenord, men det första du gör i koden är ju att ge dessa variablar samma värde som post-variablarna. Med andra ord kommer värdena alltid matcha varandra.
Men om jag inte behöver den översta php:n - vilken jag lade in för att kunna få fram user_Id från session - så funkar det ändå inte, det läggs inte in något i databasen?
Kolla ditt formulär så fälten verkligen heter anvandarnamn och password.
Sen har du session_start() mitt inne i koden.
session_start() måste alltid ligga överst på sidorna, ingen output får finnas före. Inte ens ett mellanslag.
<?php
session_start(); // alltid överst på alla sidor.
// ... resten av din kod
142 ms totalt · 3 externa anrop · v20260731065814-full.b746b907