Har lyckats få ihop en medlemsdatabas med inloggning, registrering osv, nu skulle jag vilja använda det ihop med min kodning för mina zipfiler.
Alltså har då en productlist.php där alla zipfiler visas, klickar man på download så kommer man via en download.php rätt zipfil, använder mig av header (Location $downloadlink); funktion.
Det jag nu skulle vilja är att innan man kommer till rätt zipfil så ska det ckecka av att man är inloggad då jag vill enbart att medlemmar ska ha tillgång till denna mapp.
har försökt använda mig av dne här kod snutten
<?php
session_start();
if (!(isset($username) || isset($siteuser))) // user not login, redirect to login page
{
Header("Location: login.html");
}
else { // add item
// either use cookie or database to store item.
}
?>
ihop med min download.php kod men den fattar inte om jag är inloggad eller inte utan kommer alltid åt zip filen eller så kommer jag enbart till inloggnings sidan
Förmodar att du använder session för att ha koll på inloggad, och att den är satt tidigare. (session_user byter du till den session som är satt)
<?php
session_start();
// Kolla om medlemmen är inloggad.
if (!isset($_SESSION['session_user'])){
header("Location: login.html");
exit;
}
// Här kommer koden om inloggad....
?>
$query = "SELECT username, memberpass from members
where username='$username' and memberpass='$enc_pass' ";
$result= mysql_query($query) or die
("Could not execute query : $query." . mysql_error());
if (mysql_num_rows($result) != "0") // username and pass match, authenticate user
{
session_register($username); // session register the username
setcookie ("siteuser",$username,time()+604800); // set cookie containing username
Header("Location: product.php");
}
else { // user is not authenticated
echo "Error! Username and password does not match or no such user.";
}
ska jag byta det till
session_register
i download.php
sen har jag loginsucces.php och checkuser.php filer
Du kan göra så här på sidor du vill skydda med din inloggning:
<?php // <-- Översta raden längs till vänster
session_start();
if ( !isset($_SESSION['username']) ) // user not login, redirect to login page
{
header("Location: login.html");
exit;
}
// Här kan du lägga in det du vill ha skyddat med din inloggning
?>
<!-- Och för den delen även här :) -->
Jag börjar tro jag har fel nånstans på koden eller så har jag huvudet i sanden för jag kan alltås inte få det att fungera :(
det här är koden på själva download.php den som skickar en till rätt zip fil
$dbname = 'xxxxx'; // the name of the database
$dbhost = 'localhost'; // 99% chances you won't need to change this value
$dbusername = 'xxxxx'; // your MySQL username
$dbpassword = 'xxxxx';
$connection=mysql_connect($dbhost, $dbusername, $dbpassword) or die(mysql_error());
$dbase=mysql_select_db($dbname) or die(mysql_error());
$q="SELECT * from graphics where graphics_id='$id'";
$result= mysql_query($q, $connection) or die
("Could not execute query : $q." . mysql_error());
while ($row = mysql_fetch_array($result))
{
$id=$row["graphics_id"];
$name=$row["graphics_name"];
$cat_id=$row["category_id"];
$designer=$row["designer"];
$email=$row["email"];
$date=$row["date"];
$image=$row["image"];
$dsc = $row["description"];
$viewlink=$row["viewlink"];
$downloadlink=$row["downloadlink"];
$views = $row["views"];
$downloads = $row["downloads"];
header('Location:' .$downloadlink);
$q="update graphics set downloads=downloads+1 where graphics_id='$id'";
$result2= mysql_query($q, $connection) or die
("Could not execute query 2 : $q." . mysql_error());
Det är alltså den jag vill ska skyddas från icke medlemmar.
När jag in allt ihop så kom jag ingen vart från sidan där jag klickade på download länken.
<?php // <-- Översta raden längs till vänster
// Följande två rader är för felsökning och kan tas bort när allt fungerar
error_reporting(E_ALL);
ini_set("display_errors", "1");
session_start();
if ( !isset($_SESSION['username']) ) // user not login, redirect to login page
{
header("Location: login.html");
exit;
}
$dbname = 'xxxxx'; // the name of the database
$dbhost = 'localhost'; // 99% chances you won't need to change this value
$dbusername = 'xxxxx'; // your MySQL username
$dbpassword = 'xxxxx';
$connection=mysql_connect($dbhost, $dbusername, $dbpassword) or die(mysql_error());
$dbase=mysql_select_db($dbname) or die(mysql_error());
$q="SELECT * from graphics where graphics_id='$id'";
$result= mysql_query($q, $connection) or die
("Could not execute query : $q." . mysql_error());
while ($row = mysql_fetch_array($result))
{
// Och så vidare
Ligger login.html i samma katalog som download.php ?
Inkluderar du download.php i någon annan fil ?
Nä, login ligger i en egen mapp tillsammans med resten av medlems koderna, login, register m.m Kom på att dom kanske ska ligga i samma mapp?
download.php är inte includerat i någon annan fil mer än att den är en länk från productlist.php till download.php vilket innehåller koden ovan
Du kan gott ha en egen mapp för inloggning m.m.
Du behöver bara dirigera headern till rätt mapp.
header("Location: /mapp/login.html");
Kör sen koden jag gav dig. Antingen kommer du in på sidan, då är du inloggad, eller så skickas du till login.php, då är du inte inloggad, eller så får du ett eller flera felmeddelande, då har du något fel på sessionshanteringen på servern, eller så har du en PHP-version som är äldre än 4.1.0.
Kommer enbart in till login sidan helatiden nu, så antagligen registrerar den inte att jag är inloggad, även om jag kommer in till loginsucces.php
Jag har PHP Version 4.3.4
Jag kör på webbhotell. Alla sidor som är kopplat till productlist.php har och medlemmar att göra startar med
<?php
session_start();
Hrmm menar du på en sidan man kommer till direkt efter inloggningen? För det gjorde ingen skillnad
Vet inte om det har något med saken att göra men tabellerna heter olika men ligger i samma databas, alltså zipfilerna ligger i tabellen graphics medans medlemmar ligger i tabellen members.
Dessa rader som läggs in efter session_start någonstans
echo "<pre>";
print_r($_SESSION);
echo "</pre>";
ska skriva ut eventuella sessionsvariabler. Finns inga sessionsvariabler satta så skrivs det ut följande:
Array
(
)
Det var en test för att se om det satts några sessionsvariabler vid inloggningen.
Det är nämligen kontroll av om denna sessionsvariabel finns, som avgör om man kan ladda ner eller skickas till login.
Vad jag först ville kolla upp var om några sessionsvariabler överhuvud taget sattes vid inloggningen.
I vissa versioner av IIS går det inte att sätta en sessionscookie i samma skript som man senare använder en header("Location: "), och då kommer istället en ny session att skapas på nästa sida med session_start, en session som inte har med dina sessionsvariabler.
Warning: Cannot modify header information - headers already sent by (output started at /home/nina73/public_html/web/graphics/itemdown.php:4) in /home/nina73/public_html/web/graphics/itemdown.php on line 35
Warning: Cannot modify header information - headers already sent by (output started at /home/nina73/public_html/web/graphics/itemdown.php:4) in /home/nina73/public_html/web/graphics/itemdown.php on line 35
Fattade inte mycket av det här
Men det säger mig en del :)
Vid inloggningen, ändra:
session_register($username);
till
session_register('username');
Sen det andra headerfelet orsakas av vår felsökningskod. Tar du bort felsökningskoden med print_r() så ska det nog fungera.
Nu är jag här igen med samma error på registrerings sidan, det felet kom efter att jag la in skicka mailkod
Warning: Cannot modify header information -
headers already sent by
(output started
at /home/public_html/web/members/register.php:77) in /home/public_html/web/members/register.php on line 79
Kan inte hitta felet
Här är register.php koden
$connection=mysql_connect($dbhost, $dbusername, $dbpassword) or die(mysql_error());
$dbase=mysql_select_db($dbname) or die(mysql_error());
// start tutorial code, check form for valid inputs.
// Check that user entered all required fields.
if (empty($memberpass) || empty($memberpass2) || empty($username)
|| empty($email) || empty($profil))
{
// Cause script to exit with the following error message.
die ("Error! All fields are required. Please try again!");
}
// Check that the 2 passwords match
if ($memberpass != $memberpass2)
{
die ("Error! Passwords do not match. Please try again.");
}
// Check that email is of correct format. ie. [email]user@domain.com[/email] format
if(!eregi('^([._a-z0-9-]+[._a-z0-9-]*)@(([a-z0-9-]+\.)*
([a-z0-9-]+)(\.[a-z]{2,3})?)$', $email))
{
die ("Error! $email does not look like valid email address.");
}
// Check that username is within limits (ie, 1< username < 50)
// strlen is a php function to calculate the length of a string.
If (strlen($username)<2 |
| strlen($username) >50 )
{
die ("Error! Username must be between 1 to 50 characters.");
}
// Check that password are within limits. (ie. 6 < memberpass < 10)
if (strlen($memberpass)<6
|| strlen($memberpass) >10 )
{
die ("Error! password must be between 6 to 10 characters.");
}
// Now that we have checked the input, its time to process them.
// First, encrypt password with hash function.
$enc_pass = md5($memberpass);
$query = "INSERT into members (member_id,username,email,memberpass,url, profil)
VALUES ('','$username','$email','$enc_pass','$url','$profil')";
$result= mysql_query($query) or die
("Could not execute query : $query." . mysql_error());
if ($result)
{
$member_id = mysql_insert_id();
// Let's mail the user!
$subject = "Your Membership at MyWebsite!";
$message = "Dear $username
Thank you for registering at our website,
[url]http://www.xxxx.com[/url] !
You are two steps away from logging in and accessing our exclusive members area.
To activate your membership,
please click here:
[url]http://www.xxxx.com/activate.php?id=
[/url]$userid&code=$db_password
Once you activate your memebership, you will be able to login
with the following information:
Username: $username
Password: $memberpass
Thanks!
The Webmaster
This is an automated response, please do not reply!";
mail($email, $subject, $message,
"From: MyDomain Webmaster< [email]xxx@xxxx.com[/email]>\n
X-Mailer: PHP/" . phpversion());
echo 'Your membership information has been mailed to your email address!
Please check it and follow the directions!';
session_register('username'); // session register the username
setcookie ("siteuser",$username,time()+604800); // set cookie containing username
echo "Tack för att du registerade dig."; // you can also login member directly.
echo "<p>Click <a href=memberprofile.php>here</a> Alla medlemmar.</p>";
}
?>
echo 'Your membership information has been mailed to your email address!
Please check it and follow the directions!';
session_register('username'); // session register the username
setcookie ("siteuser",$username,time()+604800); // set cookie containing username
setcookie är en header, och som alla headers måste den sättas innan något annat skickas till webbläsaren.
Alltså före en header får du inte ha någon HTML-kod, ingen echo eller print, inte ens ett mellanslag eller radbrytning utanför PHP-taggarna. Detta gäller även för filer du inkluderar före en header.
Andra headers är t.ex session_start() eller header().
Lösningen i det här fallet är att flytta ner din echo-sats till efter setcookie().
Hrmm så enkelt. Tack så jätte mycket det fungerar alldeles utmärkt och skickar mail och allt *S*
Några bra förslag på böcker för en nybörjare att börja med?
Tyvärr vågar jag inte rekommendera någon bok, då jag inte har något som hels begrepp av hur de står sig inbördes.
Det jag kan säga är att du ska köpa en bok som är reviderad sista 1-1½ året någonting.
Äldre böcker kan leda dig på avvägar i exempel.
Du ska däremot få en länk som du kan ha nytta av om du kör Windows.
Det är PHP-manualen inklusive användarnoteringarna, i chm-format, som du kan ha lokalt på din maskin. Speciellt användarnoteringarna är guld värda.