oturumları ile dizi, tek bir mektup yazdırır

3 Cevap php

Oturum açma:

$result = mysql_query("SELECT `id`, `username`, `email` FROM `users`
                   WHERE `username` = '$username'
        AND `password` = '$passwd'");
$userdata = array('id','username','email');
$_SESSION['user'] = mysql_result($result, 0, $userdata);

Yazdırmak istediğiniz zaman ve kullanıcıları kullanıcı adı:

echo $_SESSION['user']['username']

yalnızca ilk harfini yazdırır :/

Ne oldu?

3 Cevap

Sorun burada yatıyor belirlemek için var_dump () kullanarak her aşamada değişkenleri, hata ayıklama. Daha az çaba ile aynı şeyi yapacak gibi de, bu tarzda mysql_result kullanarak gereksiz, ben mysql_fetch_assoc() kullanmanızı tavsiye ediyorum.

Bu deneyin

$_SESSION['user']['id'] = mysql_result($result, 0, 'id');
$_SESSION['user']['username'] = mysql_result($result, 0, 'username');
$_SESSION['user']['email'] = mysql_result($result, 0, 'email');

Ayrıca veritabanının kendisi başlangıçta sadece ilk harf içermediğinden emin olun.

Ben muhtemelen mysql_fetch_assoc() yerine mysql_result() kullanılarak istiyorum düşünüyorum. mysql_result() sadece size sonuç kümesinden tek bir hücre değerini verir, böylece $_SESSION['user'] = mysql_result($result,0,$userdata); atarken, yalnızca sonuç satırın ilk hücre değerini alıyorsanız. Bir dizi değil çünkü bir ilişkisel anahtarla erişerek (yani $_SESSION['user']['username']), mümkün değildir.

Eğer mysql_fetch_assoc() kullanıyorsanız, birlikte çalışmak için sütun adları ve değerleri bir anahtar / değer çifti olacak:

$result = mysql_query("SELECT `id`, `username`, `email` FROM `users`
                   WHERE `username` = '".mysql_real_escape_string($username)."'
        AND `password` = '".mysql_real_escape_string($passwd)."'");
$_SESSION['user'] = mysql_fetch_assoc($result);

Bir yan fayda olarak, mysql_fetch_assoc() mysql_result() çok daha hızlıdır.

Note: Ben de size güvenli olduğundan emin olmadıkça, bir şekilde sorgu verileri kaçmak için emin olması gerektiği gibi, orada bir mysql_real_escape_string() koydu.