Gå til innhold

Parse error: syntax error, unexpected T_ELSE


Anbefalte innlegg

Hei!

Driver å mekker sammen et aldri så lite brukersystem fra scratch, men har kommet til en error som jeg virkelig ikke klarer å finne ut hva er, eller hvordan jeg kan fikse den. Feilmelding som kommer opp er: "Parse error: syntax error, unexpected T_ELSE in line.."

 

Etter hva jeg har forstått har dette noe å gjøre med flere "else" etter hverandre, uten å kombinere denne med "if", men er veldig usikker på dette. Tenkte kanskje noen andre kloke hodet kunne ha hjulpet meg med å få rensket opp i koden? Btw. godt mulig at koden er veldig rotete i.o.m. at jeg prøvde å finne feilen, fjernet noe, la til noe osv.

<?php

echo "<h1>Register</h1>";

$submit = $_POST['submit'];

//form data
$name = strip_tags($_POST['name']);
$username = strip_tags($_POST['username']);
$password = strip_tags($_POST['password']);
$repeatpassword = strip_tags($_POST['repeatpassword']);
$date = date("Y-m-d");

if ($submit)

{

//sjekk om det finnes fra før
if ($name&&$username&&$password&&$repeatpassword);
{

if ($password==$repeatpassword)

{

//sjekker lengde på brukernavn og navn
if (strlen($username)>25||strlen($name)>25)
{
echo "Lengden på brukernavnet og/eller passordet er for langt!";
}
else
{

//sjekker lengde på passord
if (strlen($password)>25||strlen($password)<6);
{
echo "Passordet må være mellom 6 og 25 tegn.";
}
else
{
//registrer brukeren

//encrypting
$password = md5($password);
$repeatpassword = md5($repeatpassword);


//åpne databasen
$connect = mysql_connect("host","brukernavn","passord") or die ("Kunne ikke koble til 
database!");
mysql_select_db("databasenavn") or die ("Kunne ikke finne database!"); //velger database

$querytreg =mysql_query("

INSERT INTO users VALUES ('','$name','$username','$password','$date')

");

echo ("Du er registrert! <a href='index.php'>Klikk her</a> for å logge inn.");



}
else
echo 'Vennligst fyll inn alle feltene!';


}
else
echo 'Passordene matcher ikke hverandre!';

?>



<html>
<form action='registrer.php' method='POST'>
<table>

<tr>
<td>
Ekte navn:
</td>
<td>
<input type='text' name='name' value='<?php echo $name; ?>'>
<td>
</tr>

<tr>
<td>
Brukernavn:
</td>
<td>
<input type='text' name='username' value='<?php echo $username; ?>'>
<td>
</tr>

<tr>
<td>
Passord:
</td>
<td>
<input type='password' name='password'>
<td>
</tr>

<tr>
<td>
Gjenta passord:
</td>
<td>
<input type='password' name='repeatpassword'>
<td>
</tr>

</table>
<p>
<input type='submit' name='submit' value='Register'>
</form>
</html>

På forhånd, tusen hjertelig takk!

 

 

OBS: Hovedsakelig sier diverse PHP-sjekkere på nettet at det er noe feil med følgende avsnitt:

 

}
else
echo 'Vennligst fyll inn alle feltene!';

Endret av Hans-Martin
Lenke til kommentar
Videoannonse
Annonse

Indenter koden din skikkelig, så vil feil som dette vare lett å spotte. Ville antagelig skrevet om koden så du ikke får så dyp if-else-nøsting, men det får du fikse selv.

 

 

 

<?php
 
echo "<h1>Register</h1>";
 
$submit = $_POST['submit'];
 
//form data
$name = strip_tags($_POST['name']);
$username = strip_tags($_POST['username']);
$password = strip_tags($_POST['password']);
$repeatpassword = strip_tags($_POST['repeatpassword']);
$date = date("Y-m-d");
 
if ($submit) {
  
  //sjekk om det finnes fra før
  if ($name && $username && $password && $repeatpassword) {
 
    if ($password == $repeatpassword) {
 
      //sjekker lengde på brukernavn og navn
      if (strlen($username) > 25 || strlen($name) > 25) {
        echo "Lengden på brukernavnet og/eller passordet er for langt!";
      } else {
 
        //sjekker lengde på passord
        if (strlen($password)>25||strlen($password)<6); {
          echo "Passordet må være mellom 6 og 25 tegn.";
        } else {
          //registrer brukeren
 
          //encrypting
          $password = md5($password);
          $repeatpassword = md5($repeatpassword);
 
          //åpne databasen
          $connect = mysql_connect("host","brukernavn","passord") or die ("Kunne ikke koble til 
          database!");
          mysql_select_db("databasenavn") or die ("Kunne ikke finne database!"); //velger database
 
          $querytreg = mysql_query("INSERT INTO users VALUES ('','$name','$username','$password','$date')");
 
          echo 'Du er registrert! <a href="index.php">Klikk her</a> for å logge inn.';
        }
      }
    } else {
      echo 'Passordene matcher ikke hverandre!';
    }
  } else {
    echo 'Vennligst fyll inn alle feltene!';
  }
}
?>

 

 

 

Koden din er forøvrig vidåpen for SQL-injections.

Endret av Alex Moran
Lenke til kommentar

Heisann,

 

Jeg anbefaler deg å lese om PDO slik at du kan kommunisere med database på en mer sikker måte, det er også en del elementer som ikke er avsluttet, noen tr og td.

Her har jeg nøstet litt opp i koden din, prøv å plasser else statementene selv og kom tilbake om du sliter med det.

<?php
echo "<h1>Register</h1>";
$submit = $_POST['submit'];
//form data
$name = strip_tags($_POST['name']);
$username = strip_tags($_POST['username']);
$password = strip_tags($_POST['password']);
$repeatpassword = strip_tags($_POST['repeatpassword']);
$date = date("Y-m-d");
if ($submit) {
	//sjekk om det finnes fra før
	if ($name&&$username&&$password&&$repeatpassword) {
		if ($password==$repeatpassword) {
			//sjekker lengde på brukernavn og navn
			if (strlen($username)>25||strlen($name)>25)	{
				echo "Lengden på brukernavnet og/eller passordet er for langt!"; 
			} else {
				//sjekker lengde på passord
				if (strlen($password)>25||strlen($password)<6) {
					echo "Passordet må være mellom 6 og 25 tegn.";
				} else {
					//registrer brukeren
					//encrypting
					$password = md5($password);
					$repeatpassword = md5($repeatpassword);
					//åpne databasen
					$connect = mysql_connect("host","brukernavn","passord") or die ("Kunne ikke koble til
					database!");
					mysql_select_db("databasenavn") or die ("Kunne ikke finne database!"); //velger database
					$querytreg =mysql_query("
							INSERT INTO users
							VALUES ('','$name','$username','$password','$date')
						");
					echo ("Du er registrert! <a href='index.php'>Klikk her</a> for å logge inn.");
				}
			?>
			<form action='registrer.php' method='POST'>
				<table>
					<tr>
						<td>Ekte navn:</td>
						<td>
							<input type='text' name='name' value='<?php echo $name; ?>'>
						</td>
					</tr>
					<tr>
						<td>Brukernavn:</td>
						<td>
							<input type='text' name='username' value='<?php echo $username; ?>'>
						</td>
					</tr>
					<tr>
						<td>Passord:</td>
						<td>
							<input type='password' name='password'>
						</td>
					</tr>
					<tr>
						<td>Gjenta passord:</td>
						<td><input type='password' name='repeatpassword'></td>
					</tr>
				</table>
				<input type='submit' name='submit' value='Register'>
			</form>
			<?php
			}
		}
	}
}
?>

Edit: Så nå at Alex Morgan hadde skrevet nesten akkurat det samme, skjønner ikke hvordan jeg ikke så den posten.

Endret av JanTerjeRiisOttoJohansen
Lenke til kommentar

Jeg anbefaler deg før du går videre nå at du leser deg opp på PDO, slik at du lærer dette riktig med en gang.

 

mysql_connect() er foreldet og fjernes i PHP versjon 5.5.0.

 

phpacademy har noen glimrende videoer liggende på youtube, sjekk dem ut her :)

 

For å se feilmeldinger kan du skrive:

error_reporting(E_ALL); 
ini_set('display_errors', 1);

på første linje etter første php taggen <?php

Endret av JanTerjeRiisOttoJohansen
Lenke til kommentar

Er akkurat disse videoene jeg prøver å lage noe utifra, hehe.

Fikk error-kode ut av registrer.php-siden, får nå ingen error-kode ved å bruke de kodene dere postet, men kun en blank side..

 

Hva mente du med "error_reporting(E-ALL), Alex? :)

Lenke til kommentar

Okei, takk - skal gjøre det etterhvert, men tenkte bare å få et kjapt innblikk i simpel og enkel systemlaging, og ville prøve dette da det så veldig simpelt og greit ut.

 

Fikk følgende feilmeldinger:

Notice: Undefined index: submit in /home/../registrer.php on line 7

Notice: Undefined index: name in /home/../registrer.php on line 9

Notice: Undefined index: username in /home/../registrer.php on line 10

Notice: Undefined index: password in /home/../registrer.php on line 11

Notice: Undefined index: repeatpassword in /home/../registrer.php on line 12
Lenke til kommentar

Den forklarer at variablene er udefinerte.

Dette skriptet trenger å ta imot $_POST informasjon fra en annen side via ett skjema :)

 

Sånn som dette f.eks

<form action="registrer.php" method="POST" role="form">
	<legend>Form title</legend>

	<div class="form-group">
		<label for="name">Navn</label>
		<input type="text" class="form-control" id="name" name="name" placeholder="Navn">
	</div>

	<div class="form-group">
		<label for="username">Brukernavn</label>
		<input type="text" class="form-control" id="username" name="username" placeholder="Brukernavn">
	</div>

	<div class="form-group">
		<label for="password">Passord</label>
		<input type="password" class="form-control" id="password" name="pass1" placeholder="Passord">
	</div>

	<div class="form-group">
		<label for="repeatpassword">Gjenta passord</label>
		<input type="password" class="form-control" id="repeatpassword" name="repeatpassword" placeholder="Gjenta passord">
	</div>

	

	<button type="submit" class="btn btn-primary">Send</button>
</form>
Endret av JanTerjeRiisOttoJohansen
Lenke til kommentar

Undefined index i PHP betyr at indeksen du anga for en array ikke finnes, i dette tilfellet er det $_POST['name'] osv. som ikke finnes da siden åpnes første gang (verdier finnes først i $_POST når du har submittet en form).

 

Det er imidlertid mest sannsynlig ikke grunnen til at siden er blank, med mindre hele resten av siden avhenger av at de verdiene finnes.

 

Som nevnt av andre vil jeg også anbefale deg å gå over til PDO med en gang, da det ikke er noen grunn til å lære seg mysql_* først, det er ikke betydelig lettere, og gjør det heller ikke noe særlig enklere å lære PDO seinere.

Videre håper jeg du er klar over at md5() ikke er egnet for å hashe passord, om du har php 5.5 eller nyere så finnes det noen veldig enkle funksjoner for passord-hashing: password_hash() og password_verify(), disse bruker metoder for hashing og salting som mest sannsynlig er mange gange sikrere enn noe annet du vil kunne koke sammen, samt at det er enkelt å bruke. Dersom du ikke har php 5.5 enda, så er det laget støttebibliotek som implementerer de samme funksjonene og kan brukes helt ned til php 5.3.7

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å
×
×
  • Opprett ny...