ZeRKoX Skrevet 6. desember 2007 Del Skrevet 6. desember 2007 (endret) Hei. I forbindelse med at jeg ønsker å lære php, så prøver jeg og kode noen ting. Jeg har laget en funksjon som legger til brukerer i en database, en til å se brukerene med, og så prøver jeg å lage en login. Problemet er at jeg får opp en feilmelding, som jeg ikke skjønner hvordan jeg skal rette opp, kan noen hjelpe meg? Her er koden: <?php if (isset($_SESSION['bruker'])) include('admin.php'); else { if (isset($_POST['bruker'])) { $inbruker = $_POST['bruker']; $inpassord = $_POST['passord']; include('sql/connect.php'); $con = mysql_connect($dbhost,$dbuser,$dbpass); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("eigil", $con); $result = mysql_query("SELECT * FROM bruker WHERE brukernavn='$inbruker'"); $row = mysql_fetch_array($result); $bruker = $row['bruker']; $passord = $row['passord']; $fornavn = $row['fornavn']; $etternavn = $row['etternavn']; $tilgang = $row['tilgang']; if($inpassord = $row['passord']) { $_SESSION['bruker'] = $bruker; $_SESSION['passord'] = $passord; $_SESSION['fornavn'] = $fornavn; $_SESSION['etternavn'] = $etternavn; $_SESSION['tilgang'] = $tilgang; } } else { echo " <form method='post' action='index.php?side=logg'> Brukernavn:<br> <input name='bruker' type='text'><br> Passord:<br> <input name='passord' type='password'><br> <input type='submit' value='Logg deg på'> </form>"; } } ?> Dette scriptet er includert i index.php, hvor session_start ligger. Feilmeldingen jeg får er: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/html/eigil/sider/logg.php on line 23 Endret 6. desember 2007 av obrestad Lenke til kommentar
Gjest Slettet+142 Skrevet 6. desember 2007 Del Skrevet 6. desember 2007 endre $result = mysql_query("SELECT * FROM bruker WHERE brukernavn='$inbruker'"); $row = mysql_fetch_array($result); om til dette: $result = mysql_query("SELECT * FROM bruker WHERE brukernavn='$inbruker'"); echo mysql_error(); $row = mysql_fetch_array($result); og fortell hva den nye feilmeldingen som kommer opp sier Lenke til kommentar
ZeRKoX Skrevet 6. desember 2007 Forfatter Del Skrevet 6. desember 2007 *kremt Jeg hadde skrevet brukernavn istedet for bruker, som var det egentlige navnet på kolonnen... Men tusen takk for hjelpen Lenke til kommentar
ZoRaC Skrevet 6. desember 2007 Del Skrevet 6. desember 2007 if($inpassord = $row['passord']) må være if($inpassord == $row['passord']) ellers vil den godkjenne hva som helst som passord! I tillegg er scriptet åpent for SQL-injections! Se på mysql_real_escape_string(); Lenke til kommentar
Gjest Slettet+142 Skrevet 6. desember 2007 Del Skrevet 6. desember 2007 ...Og siden vi er igang; Du bør alltid sjekke om mysql_query gikk bra: $result = mysql_query("SELECT * FROM bruker WHERE brukernavn='$inbruker'"); // Utfører SQL if(!$result) return "Feil [mysql_query]: ".mysql_error(); // Sjekker om SQL gikk bra if(mysql_num_rows($result)<1) return "Ingen rader returnert"; // Sjekker om noen rader ble returnert // ALT OK! $row = mysql_fetch_array($result); // Henter ut første rad return er gjerne ikke beste valg for å returnere en feilmelding. die() er bra, men vil avslutte parsingen av koden. Lenke til kommentar
ZeRKoX Skrevet 7. desember 2007 Forfatter Del Skrevet 7. desember 2007 Jeg la merke til at dem manglet en =. Hvordan er en kod måte å sjekke variablene? Kan dere gi et kodeeksempel? Lenke til kommentar
Gjest Slettet+142 Skrevet 7. desember 2007 Del Skrevet 7. desember 2007 Kanskje jeg er den eneste, men jeg skjønte ikke helt hva det siste du spurte om nå var? Hvordan sjekke? Om innholdet er av riktig type, eller om den inneholder en spesifik tekst eller tegn? Lenke til kommentar
ZeRKoX Skrevet 7. desember 2007 Forfatter Del Skrevet 7. desember 2007 Jeg tenkte på å sjekke variablene, slik at det ikke kunne kjøres sql-injections og lignende. Lenke til kommentar
Gjest Slettet+142 Skrevet 7. desember 2007 Del Skrevet 7. desember 2007 mysql_real_escape_string() $inbruker = mysql_real_escape_string($_POST['bruker']); $inpassord = mysql_real_escape_string($_POST['passord']); Slik? Lenke til kommentar
ZeRKoX Skrevet 8. desember 2007 Forfatter Del Skrevet 8. desember 2007 tusen takk. Den skal bli brukt Lenke til kommentar
grimjoey Skrevet 15. desember 2007 Del Skrevet 15. desember 2007 Vær obs på at mysql_real_escape_string kan krasje med magic_guotes_gpc. Fører til dobbelslashing. En løsning er: function myescape($msg) { if (!is_numeric($msg)) { if(get_magic_quotes_gpc()) $msg = stripslashes($msg); $msg = mysql_real_escape_string($msg); } return $msg; } 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å