Hans-Martin Skrevet 14. mai 2014 Del Skrevet 14. mai 2014 (endret) 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: }elseecho 'Vennligst fyll inn alle feltene!'; Endret 14. mai 2014 av Hans-Martin Lenke til kommentar
Alex Moran Skrevet 14. mai 2014 Del Skrevet 14. mai 2014 (endret) 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 14. mai 2014 av Alex Moran Lenke til kommentar
Dan-Levi Skrevet 15. mai 2014 Del Skrevet 15. mai 2014 (endret) 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 15. mai 2014 av JanTerjeRiisOttoJohansen Lenke til kommentar
Hans-Martin Skrevet 15. mai 2014 Forfatter Del Skrevet 15. mai 2014 Tusen hjertelig takk! Men registrer.php-siden, hvor den koden dere skrev er plassert, er dessverre blank - av ukjent grunn. Noen tips? Lenke til kommentar
Dan-Levi Skrevet 15. mai 2014 Del Skrevet 15. mai 2014 (endret) 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 15. mai 2014 av JanTerjeRiisOttoJohansen Lenke til kommentar
Hans-Martin Skrevet 15. mai 2014 Forfatter Del Skrevet 15. mai 2014 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
Dan-Levi Skrevet 15. mai 2014 Del Skrevet 15. mai 2014 Bra, se på PDO eller mysqli, ikke bruk gamle mysql_ la til informasjon om error reporting i innlegget ovenfor. Lenke til kommentar
Hans-Martin Skrevet 15. mai 2014 Forfatter Del Skrevet 15. mai 2014 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
Dan-Levi Skrevet 15. mai 2014 Del Skrevet 15. mai 2014 (endret) 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 15. mai 2014 av JanTerjeRiisOttoJohansen Lenke til kommentar
Thorbear Skrevet 15. mai 2014 Del Skrevet 15. mai 2014 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå