Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z przypisaniem zmiennej wartosci mysql_res
berciak
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.11.2005

Ostrzeżenie: (0%)
-----


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.

Ten post edytował berciak 14.11.2005, 00:41:16
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
-Guest-
post
Post #3





Goście







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.
Go to the top of the page
+Quote Post
SongoQ
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


A co Ci zwraca
  1. <?php
  2. echo mysql_result($result,0,'imie');
  3. ?>


--------------------
Go to the top of the page
+Quote Post
mike
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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ć :?:
Go to the top of the page
+Quote Post
berciak
post
Post #6





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.11.2005

Ostrzeżenie: (0%)
-----


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.

Ten post edytował berciak 14.11.2005, 13:50:14
Go to the top of the page
+Quote Post
mike
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


[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.
Go to the top of the page
+Quote Post
berciak
post
Post #8





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.11.2005

Ostrzeżenie: (0%)
-----


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?

Ten post edytował berciak 14.11.2005, 13:50:39
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
berciak
post
Post #10





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.11.2005

Ostrzeżenie: (0%)
-----


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. ?>




Ten post edytował berciak 14.11.2005, 16:18:27
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 03:31