Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z przypisaniem zmiennej wartosci mysql_res
Forum PHP.pl > Forum > PHP
berciak
Witam wszystkich,
Mam bardzo ciekawy problem.
Wykonuje zapytanie do bazy danych w pliku login.php po czym ustawiam zmienne globalne. Nastepnie w pliku profil.php odpalam query ktore pobiera te same dane i zapisuje je do zmiennych.

$sql = "SELECT * FROM users WHERE
email = '$email' AND haslo = PASSWORD('$haslo')";
$result = mysql_query($sql);

No i teraz sie zaczyna problem: bo przypisanie:

a) $imie = mysql_result($result,0,'imie');

Nie dziala, natomiast zauwazylem ze dziala

B) $$imie = mysql_result($result,0,'imie');

Nie pytajcie dlaczego, nie wiem po prostu wrzucalem kod na chybil trafil.

1 Pytanie: Dlaczego nie moge przypisac normalnie do zmiennej - ad.a choc wczesniej moglem to zrobi (login.php)

Teraz dalej wyswietlam te dane w formularzu za pomoca

<tr><td align="right"><b>Imi&ecirc;:</b> </td><td><input type="text" name="imie" value="<?echo $imie?>"></td>

I tutaj probowalem wszystkiego $imie i $$imie oba nie dzialaja.
Natomiast co ciekawe dziala bezposrednie:
<?echo mysql_result($result,0,'imie')?>

2 Pytanie: Jak zrobic by wyswietlic to w formularzu

Pomozcie bo spedzilem nad tym wiele bezsennych nocy a moi userzy sie powoli zaczynaja nieceirpliwic ze nie dziala zmiana profila.
nospor
No jakos se nei wyobrazam ze przypisanie:
  1. <?php
  2.  
  3. $imie = mysql_result($result,0,'imie');
  4.  
  5. ?>

nie dziala. Moze nie masz kolumny o nazwie imie to i ci nic nie przypisuje smile.gif
Daj se pozatym zaraz po tym przypisaniu echo i powiedz czy oby na pewno nic nie ma (i upewnij sie do tej kolumny )

  1. <?php
  2.  
  3. $imie = mysql_result($result,0,'imie');
  4. echo 'Imie: '. $imie;
  5.  
  6. ?>


ps: i uzywaj bbcode

ps2: jesli nadal ci nie bedzoe dzialac to pokaz moze caly kod (jesli nie zadlugi smile.gif ) i strukture tabeli
Guest
Jest kolumna, bo dziala mi przypisanie $$imie. Dalem echo i przy $imie nic nie pokazuje przy $$imie pokazuje.

Poza tym pisalem ze mi wyswietla calosc w postaci:

mysql_result($result,0,'imie')

Oto kod:

  1. <? // profil.php
  2.  
  3. include("include/common.php");
  4. include("include/db.php");
  5.  
  6. echo "Witaj ", $_SESSION['nick'], " ",$_SESSION['email'], " ", $_SESSION['haslo'];
  7. if (!isset($_POST['submitok'])):
  8.     // Display the user profile
  9.  
  10. $email = $_SESSION['email'];
  11. $haslo = $_SESSION['haslo'];
  12.  
  13. dbConnect("etcg_etcg");
  14. $sql = "SELECT * FROM users WHERE 
  15. email = '$email' AND haslo = PASSWORD('$haslo')";
  16. $result = mysql_query($sql);
  17. if (!$result) {
  18.   error('Pojawil sie blad bazy danych podczas sprawdzania '.
  19.         'informacji przy logowaniu.nJesli ten blad bedzie sie powtarzal, prosze '.
  20.         'o kontakt berto@etcg.pl.');
  21. }
  22. if (mysql_num_rows($result) == 1) {
  23.  
  24. $$imie = mysql_result($result,0,'imie');
  25. echo " imie: ", $imie;
  26. }
  27. ?>
  28. <center>
  29. <h4>Twoj Profil: </h4>
  30. <form method="post" action="index.php?action=Profil"> 
  31. <table cellspacing="0" cellpadding="3" align="center" border="1" bordercolor="#333333" bgcolor="#272424">
  32. <tr><td align="right" width="98">
  33. <b>Adres e-mail:</b> </td><td><input type="text" name="email" value="<?=$email?>"></td>
  34. <td align="right" width="98"><b>Nick:</b> </td><td><input type="text" name="nick" value="<?=$nick?>"></td></tr>
  35. <tr><td align="right"><b>Imię:</b> </td><td><input type="text" name="imie" value="<?=mysql_result($result,0,'imie')?>"></td>
  36. </td></tr>
  37. </table>
  38. </form>
  39. </center>
  40. <?
  41. endif;
  42. ?>


poprawiam
jak pisalem "używaj bbcode" w domyśle było jeszcze"używaj poprawne bbcode"
---
nospor



To co widzisz $$imie to moje proby, tak jak pisalem wczesniej samo $imie nie dziala z jakis powodow. Dlaczego dziala $imie to juz wielka tajemnica dla mnie.
SongoQ
A co Ci zwraca
  1. <?php
  2. echo mysql_result($result,0,'imie');
  3. ?>
mike
1. mysql_close() powinno być po pobraniu wyników a nie przed tym faktem.
2. Najpierw zapisujesz dane to bazy, potem pobierasz dokładnie te same dane. Co to za poroniony pomysł i czemu to ma służyć :?:
berciak
Cytat(mike_mech @ 2005-11-14 12:24:49)
1. mysql_close() powinno być po pobraniu wyników a nie przed tym faktem.
2. Najpierw zapisujesz dane to bazy, potem pobierasz dokładnie te same dane. Co to za poroniony pomysł i czemu to ma służyć :?:

1. Nie wiem, to znalazlem na necie: http://www.freewebmasterhelp.com/tutorials/phpmysql/4
Poza tym dziala bo funkcja mysql_result($result,0,'imie') wyswietla poprawnie zawartosc.

2. Widze ze musze troche wiecej wytlumaczyc. Aplikacja jest chroniona systemem autentyfikacji. W pliku login.php klient wpisuje sie do bazy wypelniajac formularz rejestracyjny. W pliku profil.php odczytuje te dane jeszcze raz z tabeli by klient mogl je sobie pozmieniac i zapisac z powrotem. Taka jest idea profil.php. Startuje sesje w pliku index.php, ale nie ma sensu przekazywac wszystkich 30 pol formularza jako zmienne globalne sesji ! Wiec w plikuu login zapisuje tylko 3 potrzebne w dalszym dzialaniu serwisu. Jesli gostek sobie wejdzie na profil wykonuje dodatkowe zapytanie SQL pobierajac jeszcze raz jego dane i przedstawiajac je w formularzu do zmiany.
mike
[quote=berciak,2005-11-14 13:40:55] [QUOTE=mike_mech,2005-11-14 12:24:49]2. Widze ze musze troche wiecej wytlumaczyc. Aplikacja jest chroniona systemem autentyfikacji. W pliku login.php klient wpisuje sie do bazy wypelniajac formularz rejestracyjny. W pliku profil.php odczytuje te dane jeszcze raz z tabeli by klient mogl je sobie pozmieniac i zapisac z powrotem. Taka jest idea profil.php. Startuje sesje w pliku index.php, ale nie ma sensu przekazywac wszystkich 30 pol formularza jako zmienne globalne sesji ! Wiec w plikuu login zapisuje tylko 3 potrzebne w dalszym dzialaniu serwisu. Jesli gostek sobie wejdzie na profil wykonuje dodatkowe zapytanie SQL pobierajac jeszcze raz jego dane i przedstawiajac je w formularzu do zmiany. [/quote]
Przekazywanie danych w sesji (nawet tej ilości o której mówisz) jest bardziej optymalne niż nękanie bazy danych kolejnym zapytaniem. Kolejne zapytanie jest po prostu nieoptymalne i spowalnia serwis.
berciak
Cytat(SongoQ @ 2005-11-14 10:58:17)
A co Ci zwraca
  1. <?php
  2. echo mysql_result($result,0,'imie');
  3. ?>

Pokazuje to poprawna wartosc imienia.

Podsumowujac:

1. mysql_result($result,0,'imie') zawsze pokazuje poprawna wartosc (zarowno poprzez echo jak i formularz.
2. $imie = mysql_result($result,0,'imie')
echo $imie nic nie pokazuje jak rowniez formularz
3. $$imie = mysql_result($result,0,'imie')
echo $$imie pokazuje poprawna wartosc exclamation.gif!! niestety nie w formularzu

Rozumiecie cos z tego bo ja zglupialem.

mike_mech:

Niby tak tylko zastanow sie jak czesto gostek bedzie do profila zagladal? Zwlaszcza ze dane w nim sa w 90 % statyczne. Niech zagladnie raz na kilka miesiecy i wygeneruje selecta, za to kilkarazy dziennie zamias przekazywc 30 parametrow przekaze 3 rachunek chyba jest prosty?

Poza tym mimo oczywistej zalety powyzej chcialbym wiedziec czemu zwykle przypisanie zmiennej nie dziala?questionmark.gif Co jest grane? Problem moge rozwiazac stosujac wszedzie crappy mysql_result($result,0,'imie') ale nie o to chyba w tym wszystkim chodzi?
nospor
Oglądam Twoj kod i widze coś takiego, że zmienną $imie inicjujesz tylko wtedy, gdy znajdzie ci dokladnie jeden rekord:
  1. <?php
  2.  
  3. if (mysql_num_rows($result) == 1) {
  4.  
  5. ?>

natomiast do formularza wkladasz mysql_result($result,0,'imie') niezaleznie od ilosci rekordów.
Tak wiec nasuwa sie bardzo proste wyjasnienie: masz w bazie kilka rekordów o tym samym loginie i hasle i nie wyswietla ci imienia bo ty go warunkujesz tym warunkiem smile.gif
Daj se wiec wyswieltanie imienia bez warunku:
  1. <?php
  2.  
  3. $imie = mysql_result($result,0,'imie');
  4. echo 'Imie: '. $imie;
  5.  
  6. ?>


no i daj te mysql_close() gdzie na koncu
berciak
Cytat(nospor @ 2005-11-14 12:51:07)
1. Tak wiec nasuwa sie bardzo proste wyjasnienie: masz w bazie kilka rekordów o tym samym loginie i hasle i nie wyswietla ci imienia bo ty go warunkujesz tym warunkiem smile.gif

2. Daj se wiec wyswieltanie imienia bez warunku:
  1. <?php
  2.  
  3. $imie = mysql_result($result,0,'imie');
  4. echo 'Imie: '. $imie;
  5.  
  6. ?>


3. no i daj te mysql_close() gdzie na koncu

Dzieki wam wszystkim za pomoc, widze ze ten problem tez nie jest dla was czyms oczywistym a tera jedziem z odpowiedziami.

1. Nie mam zduplikowanych rekordow w bazie, sa sprawdzane przy dopisywaniu, a zeby miec pewnoscx wykonalem to zapytanie w Phpmyadmin i dostalem dokladnie jeden row.

2. Zmienilem i bez zmian, nie wyswietla zawartosci zmiennej $imie.

3. przenioslem przed ?> bez zmian

Jeszcze raz kod na prosbe nospora:

  1. <? // profil.php
  2.  
  3. include("include/common.php");
  4. include("include/db.php");
  5.  
  6. if (!isset($_POST['submitok'])):
  7. // Display the user profile
  8.  
  9. $email = $_SESSION['email'];
  10. $haslo = $_SESSION['haslo'];
  11.  
  12. dbConnect("etcg_etcg");
  13. $sql = "SELECT * FROM users WHERE 
  14. email = '$email' AND haslo = PASSWORD('$haslo')";
  15. $result = mysql_query($sql);
  16. if (!$result) {
  17. error('Pojawil sie blad bazy danych podczas sprawdzania '.
  18. 'informacji przy logowaniu.nJesli ten blad bedzie sie powtarzal, prosze '.
  19. 'o kontakt berto@etcg.pl.');
  20. }
  21.  
  22. $imie = mysql_result($result,0,'imie');
  23. echo "Witaj : ", $imie;
  24.  
  25. ?>
  26. <center>
  27. <h4>Twoj Profil: </h4>
  28. <form method="post" action="index.php?action=Profil"> 
  29. <table cellspacing="0" cellpadding="3" align="center" border="1" bordercolor="#333333" bgcolor="#272424">
  30. <tr><td align="right" width="98">
  31. <td align="right" width="98"><b>Nick:</b> </td><td><input type="text" name="nick" value="<?=$nick?>"></td></tr>
  32. <tr><td align="right"><b>Imię:</b> </td><td><input type="text" name="imie" value="<?=$imie?>"></td>
  33. <tr><td colspan="2"><center><b>Pogrubienie</b> oznacza pola obowiązkowe!</center></td>
  34. <td colspan="2"><center><input type="Submit" name="submitok" value=" ZMIEN "></center></td>
  35. </td></tr>
  36. </table>
  37. </form>
  38. </center>
  39. <?
  40. endif;
  41. ?>


i output:



output przy zmienionym kodzie:

  1. <?php
  2. $$imie = mysql_result($result,0,'imie');
  3. echo "Witaj : ", $$imie;
  4. ?>


To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.