Gå til innhold

[Løst]Problem med kode i enkelt login-script


Anbefalte innlegg

Hei!

Jeg er ganske newbie når det kommer til php, har prøvd å lære meg det siden 2003 og feila miserabelt.

Nå har det seg sånn at jeg har en eksamensoppgave som skal være inne til fredag kveld og en del av den oppgaven består av å lage et login-script.

Jeg har ei bok - Sam's Teach Yourself PHP, MySQL and Apache - og fant et kjekt og enkelt script der som jeg fant ut jeg kunne skrive av og bare bytte ut ting med det som passer for databasen min etc.

 

Problemet er at jeg får denne feilmeldinga og jeg er ikke stø nok til å finne ut nøyaktig hva som er feil. Prøvde uten { og }, men det hjalp ikke noe særlig. Da fikk jeg bare en parse error om manglende fnutter.

"Parse error: syntax error, unexpected '{' in /hsphere/local/home/sjurvaag/hint.sjurvaage.com/mmt261/userlogin.php on line 4"

 

Første del av koden er som følger:

1 <?php
2	  //check for required field from the form
3	if((!isset($_POST["username"])) || (!isset($_POST["password"]))
4	{
5		header("Location: userlogin.htm");
6		exit;
7	}

 

Noen som ser hva som er galt og kan hjelpe meg?

 

Mvh,

 

Sjur "Datasmurf" - PHP-newbie.

Lenke til kommentar
Videoannonse
Annonse

Hei!

Er direkte god men kanskje:

<?php
$username = $_POST["username"]; //øverst i filen!
$password = $_POST["password"]; //øverst i filen!
if ($username=="") {
	header("Location: userlogin.htm");
exit;
}
if ($password=="") {
	header("Location: userlogin.htm");
exit;
}

?>

 

Hvis du skulle sjekke om feltene var tomme :wee:

Lenke til kommentar

:no: Det får fint an å sjekke om begge indeksene i POST er satt samtidig. Problemet her er alt for mange paranteser og man ser derfor ikke helt enkelt at det mangler en ) tilslutt på if-linjen. Her er en litt klarere versjon

<?php
//check for required field from the form
if(isset($_POST["username"]) === false || isset($_POST["password"]) === false)
{
header("Location: userlogin.htm");
exit;
}

Lenke til kommentar

Om noen skulle være interessert i å se hele koden, ligger den her i spoiler:

 

 

 

<?php
//check for required field from the form
if(isset($_POST["username"]) === false || isset($_POST["password"]) === false)
{
	header("Location: loginform.htm");
	exit;
}

//connect to server and select database
$mysqli = mysqli_connect("mysql2.hosted.servetheworld.net", "xxxxx", "xxxxx", "authusers");

//create and issue the query
$sql = "SELECT first_name, last_name FROM auth_user WHERE
		username = '".$_POST["username"]."' AND
		password = PASSWORD('".$_POST["password"]."')";
$result = mysqli_query($mysqli, $sql) or die(mysqli_error($mysqli));

//get the number of rows in the result set; should be 1 if a match
if (mysqli_num_rows($result) == 1)
{
	//if authorized, get the values of first_name last_name
	while ($info = mysqli_fetch_array($result))
	{
		$first_name = stripslashes($info['first_name']);
		$last_name = stripslashes($info['last_name']);
	}

	//set authorization cookie
	setcookie("auth", "1", 0, "/", "http://hint.sjurvaage.com/mmt261", 0);

	//create display string
	$display_block = "
	<p>".$first_name." ".$last_name." is authorized!</p>
	<p>Authorized Users Menu:</p>
	<ul>
	<li><a href=\"index.php\">Index</a></li>
	</ul>";
}
else
{
	//redirect back to login form if not authorized
	header("Location: loginform.htm");
	exit;

}
?>
<html>
<head>
	<title>User Login</title>
</head>

<body>
<?php echo "$display_block"; ?>
</body>
</html>

 

 

 

edit: For øyeblikket skjer det generelt lite når jeg prøver å logge meg inn for å få tilgang til sida.

 

http://hint.sjurvaage.com/mmt261/loginform.htm

Endret av Datasmurf
Lenke til kommentar

1 <?php
2	  //check for required field from the form
3	if((!isset($_POST["username"]) || (!isset($_POST["password"]))
4	{
5		header("Location: userlogin.htm");
6		exit;
7	}

 

Dette var din gamle kode, feilen din var at du hadde etter: $_POST["username"] to paranteser for mye. if(!isset($_POST["username"]))..

Lenke til kommentar
Hvis du kunne poste en løsning, slik at andre medlemmer har sjangsen til og hva som løste problemet ditt.

Problemer:

Den valgte feil database

Skrivefeil i koden.

Lenke til kommentar
3	if((!isset($_POST["username"])) || (!isset($_POST["password"]))
4	{

Tell antall parentes begynnelse og slutt. Det skal være likt.

 

En rask telling gjøres slik:

  12	  3				  21	 2	  3				 21
if((!isset($_POST["username"])) || (!isset($_POST["password"]))

Skal slutte med 0, altså har du 1 uavsluttet parentes. Får du negativt tall til slutt har du avsluttet for mange parenteser.

 

Det enkleste er å bruke en editor eller IDE som markerer den parentesen, bracketen e.l. den tilhører.

 

Men du kan også skrive if setningene over flere linjer. Som du ser her er det 1 start parenteser på siste linje i if-setning logikken, og den er på første indentering, så den skal avsluttes med 1+1 slutt parenteser.

if (!isset($_POST["username"]) ||
!isset($_POST["password"]))
{
}

 

Som du ser her er funksjonskallet something() i andre indentering, så den skal avsluttes med 2 parenteser (etter parentesene i funksjonskallet).

if (!isset($_POST["username"]) ||
!isset($_POST["password"]) ||
(isset($_POST["password"]) &&
 something()))
{
}

 

Som ColdIce pekte ut på en måte: isset sjekker kun om feltene username og password var i posten, ikke om det inneholdt en tom streng som input text gjør uten innhold.

Endret av OIS
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...