Datasmurf Skrevet 13. mai 2009 Del Skrevet 13. mai 2009 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
Gjest Skrevet 13. mai 2009 Del Skrevet 13. mai 2009 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 Lenke til kommentar
Ernie Skrevet 13. mai 2009 Del Skrevet 13. mai 2009 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
Datasmurf Skrevet 13. mai 2009 Forfatter Del Skrevet 13. mai 2009 Jeg er egentlig ikke helt sikker på hva jeg skulle sjekke, får opp sida nå, men den bare looper i en halv evighet Lenke til kommentar
Datasmurf Skrevet 13. mai 2009 Forfatter Del Skrevet 13. mai 2009 (endret) 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 15. mai 2009 av Datasmurf Lenke til kommentar
Wackamole Skrevet 13. mai 2009 Del Skrevet 13. mai 2009 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
Datasmurf Skrevet 13. mai 2009 Forfatter Del Skrevet 13. mai 2009 Ah. Men det er uansett fiksa på nå, og fungerer fortsatt ikke noe særlig. Lenke til kommentar
Wackamole Skrevet 13. mai 2009 Del Skrevet 13. mai 2009 (endret) Har du noen feilmeldinger? - hvilken sql server kjører du? Også anbefaler jeg at du bruker sessions istedenfor cookies, har inget grunnlag for det egentlig, jeg bare synes det er lettere og kode generelt. Endret 13. mai 2009 av Famen Lenke til kommentar
Datasmurf Skrevet 13. mai 2009 Forfatter Del Skrevet 13. mai 2009 Nå gikk det, takket være ColdIces hjelp Lenke til kommentar
Wackamole Skrevet 13. mai 2009 Del Skrevet 13. mai 2009 Hvis du kunne poste en løsning, slik at andre medlemmer har sjangsen til og hva som løste problemet ditt. Lenke til kommentar
Gjest Skrevet 13. mai 2009 Del Skrevet 13. mai 2009 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
OIS Skrevet 13. mai 2009 Del Skrevet 13. mai 2009 (endret) 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 13. mai 2009 av OIS Lenke til kommentar
Datasmurf Skrevet 13. mai 2009 Forfatter Del Skrevet 13. mai 2009 Aha ... Kjekt å vite til neste gang. Bruker en editor, i og for seg. Crimson Editor, gikk lei av Notepad2 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å