webForumDet fria alternativet

Hur lägger man in dessa data som variabler?

PHPur PHP

10 svar · 675 visningar · startad av PollyJuice

Medlem sedan mars 2006124 inlägg
Frågan#1

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:

  1. Hur gör jag för att det datum då användaren skriver inlägget ska läggas in som en variabel?
    $datum = ?

  2. 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)..?

Medlem sedan aug. 2004903 inlägg
#2

Om du döpt sessionsvariablen till userid
$userid = $_SESSION['userid'];

Se till att du filtrerar all data du skrickar och hämtar från databasen

Datum lägger man till på följande sätt
$datum = date("Y-m-d H:i:s");

Genom att ändra det som finns inom ( ) kan du påverka formateringen på datumet. Läs mer här

Medlem sedan apr. 2006409 inlägg
#3

Tulork skrev:

Datum lägger man till på följande sätt
$datum = date("Y-m-d H:i:s");

Det blir mycket enklare för honom att använda värdena på tiden om han spara tiden som timestamp.

Medlem sedan aug. 2004903 inlägg
#4

Går det me. Förövrigt vill jag tipsa dig om två sidor

1. google.se (Här hittar du det mesta)
2. php.net (Ett måste för PHP programmerare)

Medlem sedan juni 20006 031 inlägg
#5

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'];

Medlem sedan apr. 2006409 inlägg
#6

Pedda skrev:

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.

Medlem sedan mars 2006124 inlägg
#7

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å.

Medlem sedan mars 2006124 inlägg
#8
<?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:

  1. vilket format ska kolumnen datum ha i databasen? DATETIME?
  2. Varför envisas den med att skicka användaren till loggain-sidan när man försöker skriva in en ny post?
  3. Varför hamnar de nya posterna inte i databasen?
Medlem sedan juli 20011 222 inlägg
#9

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.

Medlem sedan mars 2006124 inlägg
#10

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?

Medlem sedan juni 20006 031 inlägg
#11

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
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)