Forum > Övriga serverspråk > PHP
Hallå.
Jag har en inloggning som fungerar som den ska så länge användarnamn och lösenord inte innehåller å,ä eller ö.
Men så fort jag har en användare som innehåller å,ä eller ö så får jag att det är fel användarnamn eller lösenord. Inget felmeddelande från PHP-koden utan jag skickas bara till fel-sidan som skall säga att det är fel uppgifter.
Varför är det så? Jag måste kunna ha å,ä och ö i både användarnamn och lösenord.
Min inloggningskod:
if (!isset($_POST['login-form'])){
$_POST = db_escape($_POST);
$sql = "SELECT id,companyURL FROM lm_users
WHERE username='{$_POST['username']}'
AND password='{$_POST['password']}'";
$result = mysql_query($sql);
// Hittades inte användarnamn och lösenord
// skicka till formulär med felmeddelande
if (mysql_num_rows($result) == 0){
header("Location: /?fel=ja");
exit;
}
else
{
// Sätt sessionen med unikt index
$_SESSION['sess_id'] = mysql_result($result, 0, 'id');
$_SESSION['sess_user'] = $_POST['username'];
$CompanyURL = mysql_result($result, 0, 'companyURL');
header("Location:" .$CompanyURL);
exit;
}
}
Funktionen db_escape ser ut så här:
function db_escape ($post)
{
if (is_string($post)) {
if (get_magic_quotes_gpc()) {
$post = stripslashes($post);
}
return mysql_real_escape_string($post);
}
foreach ($post as $key => $val) {
$post[$key] = db_escape($val);
}
return $post;
}
Kan e va nåt i den som stälelr till det?
Jag har följt denna guiden: http://www.phpportalen.net/viewtopic.php?t=4403
I min MySQL databas är tabbelens charset utf8 och collation utf8_swedish_ci Har tästat latin1 och latin1_swedish_ci med samma resultat.
Någon som har tips om varför det är så här och hur jag löser det?
| Skriv utHur ser ditt html dokumentet ut då? kolla vad som finns i $_POST objekten
Formuläret ser ut så här:
<form id="login-form" method="post" action="include/login-control.php">
<p>
<label>Användarnamn:</label><br />
<input type="text" name="username" id="username" /> <br />
<label>Lösenord:</label><br />
<input type="password" name="password" id="password" />
<input type="submit" value="Logga in" /> <br />
<span class="errorMessage">Felmeddelande</span>
</p>
</form>
I huvudet har jag bland annat detta;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
Kan inte skicka länken till hela sidan här då sidan är under uppbyggnad och chefen vill hålla det lite hemligt ännu.
Enkel lösning: tillåt inte å, ä, ö i användarnamn. Finns ingen anledning till att göra det.
se till att dokumentet är sparat som UTF-8 med, men vad får du om du skriver å ä ö som användarnamn?
enklaste är att debugar din sql fråga, hur ser den ut med å ä ö?
ÅÄÖ är ju inte helt fel, speciellt på lösenord, ger ännu fler tecken att gå igenom.
Jag måste kunna ha å,ä och ö både i användarnamn och lösenord. Men jag visste att den kommentaren skulle komma.
Jag hoppas att mina filer är sparade som utf8 eftersom det är NetBeans som skapar HTML grunden med UTF8.
Ett utan åäö blir så här och loggas in:
lyckad inloggning
SELECT id,companyURL FROM lm_users WHERE username='anv' AND password='pass'
En misslyckad inloggning med åäö blir såh är i SQL frågan:
ej lyckad inloggning
SELECT id,companyURL FROM lm_users WHERE username='anvåäö' AND password='passåäö'
Vad jag kan se just nu så ser jag inget fel i SQL frågan.
Kollade filen i anteckningar och den är sparad som utf8
kolla din databas att det att det är korrekt, allt lutar ju åt att databasen inte har lagrat korrekt data.
Det är rätt i databasen. Kolla denna bilden så ser du.

Inte krypterade lösenord nu, det kommer när det fungerar som det skall så är det nästa steg så det behövs inga onödiga kommentarer om det just nu.
Kolla funktionen utf8_decode() och se om det hjälper med att ha det för ditt användarnamn och lösenord.
Vi har löst det nu. Tackar för hjälpen med TeamViewer.