ugrás a tartalomhoz

profil betöltése hogyan

kriszrap · 2010. Szep. 18. (Szo), 12.34
Sziasztok azt hogy lehet meg csinálni
mindt például itt ezen a forumon hogy rá kattintunk a nevére és a saját profilját hozzabe?? én probálkoztam de mindig csak az enyémethozta be.
elöre is ksözönöm
 
1

Részletes

janoszen · 2010. Szep. 18. (Szo), 13.33
Szia!

A profil adatokat adatbázisban kell tárolni. Amikor megjeleníted a fórum hozzászólásokat, le kell kérni a felhasználói azonosítót, amivel meg kell csinálni a linket. Itt például így van: /tagok/12345, ahol 12345 az adatbázisban tárolt felhasználói azonosító.

Tekintve, hogy a kérdésedben semmilyen bővebb kritériumot nem mondtál, nagyjából ennyit tudok segíteni. Ha szeretnél bővebb segítséget, mondd el, kérlek, hogy milyen rendszerhez szeretnél ilyen funkciót illeszteni, milyen programozási nyelvben és adatbázissal szeretnéd megvalósítani és hol akadtál el benne.

János
2

<?php $email=

kriszrap · 2010. Szep. 18. (Szo), 13.54

<?php
$email= "".$_SESSION['email']; 
$result = mysql_query("SELECT * FROM users WHERE email='$email'");
$row = mysql_fetch_array($result);


$conn = include "config.php";
mysql_select_db("users");

if(empty($_POST))
{
$query = mysql_query("SELECT * FROM chat ORDER by id DESC");
while($a=mysql_fetch_assoc($query)){
$message=$a['message'];
$message= str_replace("<", "&lt;", $message);
$message= str_replace(">", "&gt;", $message);
$message= str_replace(":D","<img src='smiley/sm01.gif' alt='sm01' />", $message);
$message= str_replace(":P","<img src='smiley/sm02.gif' alt='sm02' />", $message);
$message= str_replace("[sm03]","<img src='smiley/sm03.gif' alt='sm03' />", $message);
$message= str_replace("[sm04]","<img src='smiley/sm04.gif' alt='sm04' />", $message);
$message= str_replace(":(","<img src='smiley/sm05.gif' alt='sm05' />", $message);
echo '
#'.$a['id'].' Név: <a class="b" href="adat?.php'.$row['id'].'">'.$a['name'].'</a> ||Dátum: '.$a['date'].'<br>||Üzenet: '.$message.'||<br><br>';
}

}else{
if($_POST['message'] !== "")
{
mysql_query("INSERT INTO chat (name, message, date) VALUES ('".$row['nick']."' , '".$_POST['message']."', NOW() ) ");
header("Location: ".$_SERVER['PHP_SELF']);
}
}
?>
ez egy chat script
ugye lekérdezem a fel használó nevét aztán fel küldöm az adatbázisba és ki listázom.
és
Név: <a class="b" href="adat.php?'.$row['id'].'">(ez a lényeg)

és azt szeretném elérni hogy a csetbe rá nyomsz a névre be hozza a profilját id szerint(nekem bonyolult):D
krisztián
3

Nnna

janoszen · 2010. Szep. 18. (Szo), 14.45
Nnnna, ezzel már sokkal könnyebb kezdeni valamit. Mielőtt elmondom, had lőjek el néhány általános intelmet:

  • Ha adatbázisba felhasználó által megadott adatot küldesz, mindig escapeld ki, különben könnyen törölhetik akár az egész adatbázisodat. Ezt így teheted meg: mysql_query("SELECT * FROM users WHERE email='" . mysql_real_escape_string($email) . "'");
  • Ha HTML-be írsz felhasználói adatot, mindenképpen alakítsd át a beírt speciális karaktereket, különben könnyen kirakhatnak egy pornóképet az oldaladra, ami minden bizonnyal nem cél. Például így: echo(htmlspecialchars($a['name']));
  • Ha URL-be írsz felhasználó által megadott adatot, át kell alakítanod, különben könnyen olyan link születik, ami hibás. Például így: echo('<a href="adat.php?id=' . htmlspecialchars(urlencode($data)); . '">...'); (Azért van htmlspecialchars is, mert ha megfigyeled, HTML-be írtam ki.)
  • A sessiont illik elindítani session_start() paranccsal, különben néhány szerveren nem fog működni a kódod.


Ennyit a biztonságról, nézzük a megvalósítást. Először is, szerintem, a chat kódod elején van egy hiba, a config include-nak és a select db-nek legelőször kell lefutni, utána minden másnak. Ami a profilt illeti, a titok nyitját ez a sor hordozza:
<a class="b" href="adat?.php'.$row['id'].'">...
A megoldás majdnem jó, csak a kérdőjel rossz helyen van. Ahhoz, hogy a $_GET tömbben megjelenjen az adat, így kell meghívnod a címet: adat.php?id=12345

A kódodat egy kicsit átalakítva, így nézne ki:
<a class="b" href="profil.php?id='.htmlspecialchars(urlencode($row['id'])).'">
Ha valaki így rákattint a névre, a profil.php?id=1234 oldalra fog jutni. Ebben a PHP-ban nincs más dolgod, mint a profil táblából kiolvasd a megfelelő adatokat:

session_start();
$conn = include "config.php";
mysql_select_db("users");
/* Megvizsgaljuk, hogy van-e id és szam-e */
if (array_key_exists('id', $_GET) && is_int($_GET['id'])) {
 $r = mysql_query("SELECT * FROM profile WHERE user_id='" . mysql_real_escape_string($_GET['id']) . "' LIMIT 1");
  while ($a = mysql_fetch_assoc($r)) {
    foreach($a as $kulcs => $ertek) {
      echo($kulcs . ": " . $ertek . "<br />\n);
    }
  }
}
Ez természetesen nagyon fapados, de demonstrálja a megvalósítás lényegét. Ha kaptunk $_GET['id']-ben ID-t, akkor lekérdezzük az ilyen user_id-jú sorokat, majd a kapott adatot megjelenítjük (ez alapesetben egy sor lesz). Ezek után már csak azt kell megoldani, hogy az editprofile.php-ban el lehessen menteni a beállításokat. Megint egy fapados példa következik:

session_start();
$conn = include "config.php";
mysql_select_db("users");
$email= "".$_SESSION['email'];
$result = mysql_query("SELECT * FROM users WHERE email='$email'");
$user = mysql_fetch_array($result);

if (!$user) {
  echo("Hiba!");
  exit;
}

$r = mysql_query("INSERT INTO profile user_id, field1 VALUES ('" . mysql_real_escape_string($user['id']) . "', '" . mysql_real_escape_string($_POST['field1']) . "')");

if ($r) {
  echo("Sikeres mentés");
} else {
  echo("Hiba");
}
(Lehet, hogy van benne hiba, hasból írtam, az elvet próbáld meg megérteni.)

Namost, ez azért még vérzik néhány sebből. A legfőbb, hogy a kódot a Te programozási stílusodhoz igazítottam, ami nem a legoptimálisabb. Próbáld meg a belépett felhasználói adataidat egy egységes változóba tenni, a kódot, ami betölti pedig egy közös include fájlba. Ezen felül próbálj meg megismerkedni a függvényekkel is és próbáld meg elválasztani a megjelenítést az adatlekérdezésektől. Ez azt jelenti, hogy kérd le az adatokat, rakd be őket egy tömbbe, majd egy külön helyen jelenítsd meg. Így tisztább lesz a kódod.
4

áá nagyon sókat segitettél

kriszrap · 2010. Szep. 18. (Szo), 20.39
kérdésem lenne:

mysql_query("SELECT * FROM users WHERE email='" . mysql_real_escape_string($email) . "'");

ez miért más mint ez:
mysql_query("SELECT * FROM users WHERE email='$email'");

mysql_real_escape_string($email) ez a aprancs mit csinál irás védetté teszi ??

<a class="b" href="adat.php?id='.htmlspecialchars(urlencode($row['id'])).'">
ezzel az a baj bár meik felhasználóra fellépek és rányomok a névre akkor a saját idemet kapom ($row['id'] az lekérdezi a saját idemet)
erre kéne más megoldás
5

mysql_real_escape_string($ema

Poetro · 2010. Szep. 18. (Szo), 20.52
mysql_real_escape_string($email) ez a aprancs mit csinál irás védetté teszi ??

A speciális karaktereket kódolja benne, lásd: mysql_real_escape_string
ezzel az a baj bár meik felhasználóra fellépek és rányomok a névre akkor a saját idemet kapom ($row['id'] az lekérdezi a saját idemet)

Akkor kérdeyd le a másik felhasználó IDjét, ami nem te vagy.
6

hát igen és azt hogy kell??

kriszrap · 2010. Szep. 18. (Szo), 21.56
hát igen és azt hogy kell??

na de új fejlemény:

<?php
session_start(); 
ob_start(); 
include "config.php";
mysql_select_db("users"); 
if (array_key_exists('id',$_GET) && is_int($_GET['id'])) {  
$result = mysql_query("SELECT * FROM users WHERE id='" . mysql_real_escape_string($_GET['id']) . "'");  
 while ($a = mysql_fetch_assoc($result)) {  
    foreach($a as $kulcs) {  
      echo($kulcs ['nick']);  
    }  
  }    
}
?>
mi a hiba nem jeleniti meg:(
7

ob_start

Poetro · 2010. Szep. 19. (V), 09.16
Ha mondjuk nem használnál ob_start-ot, vagy a kimenetet kiküldenéd végre mondjuk ob_end_flush akkor talán látnál valamit.
8

igy se jó

kriszrap · 2010. Szep. 19. (V), 15.41
sajna nem sikerült de még van egy krédés
Akkor kérdeyd le a másik felhasználó IDjét, ami nem te vagy.

azt hogy kell??
9

Már leírtam

janoszen · 2010. Szep. 19. (V), 16.57
Már leírtam, csak el kellett volna olvasnod:
mysql_query("SELECT * FROM profile WHERE user_id='" . mysql_real_escape_string($_GET['id']) . "' LIMIT 1")
Ennél egyértelműbben nem tudom leírni. ?id=1234-ben kell átadni az ID-t.

Egyébként meg légyszi kezdj el kódszínezőt használni, mert olvashatatlan a csak úgy beokádott kódod. Azt, hogy a chatben hogy kapod meg az ID-t, az meg a chat.php dolga, ott nézz körül.

Update: ja látom már. Sajnos elsőre nem vettem észre az olvashatatlan kód miatt, hogy nem $row kell Neked, hanem $a. Látod, mennyit számít az értelmes változónév? Ha a $row neve logindata lett volna, biztos nem jut eszébe senkinek elkövetni a hibát.
10

köszönöm szépen és használni

kriszrap · 2010. Szep. 19. (V), 20.29
DE mindig a saját idemet kapom help:(
11

Tanulj meg kérdezni.

janoszen · 2010. Szep. 19. (V), 20.47
Figyelj, nem akarlak bántani, de tanulj meg kérdezni. Szerinted, itt mindenki gondolatolvasó? Ha nem másolod be a kódot, akkor honnan szagoljuk meg, mi a gond?
12

sikerült:D

kriszrap · 2010. Szep. 20. (H), 17.34
Sikerült megcsináltam köszönöm szépet a sok segitséget
13

Mi volt a megoldás?

janoszen · 2010. Szep. 20. (H), 18.30
Azért az illendőség úgy kívánja, hogy mondd is el, mi volt a megoldás. Már csak azért is, hogy mások is tanulhassanak belőle.
14

az adatok

kriszrap · 2010. Szep. 21. (K), 16.20
az adatok megjelenités:

<?php
 $result = mysql_query("SELECT * FROM users WHERE id='" . mysql_real_escape_string($_GET['id']) . "' LIMIT 1");  
  while ($row = mysql_fetch_assoc($result)) {
  echo '
  Teljes Név: '.$row['rendesnev'].'<br>Lakhely: '.$row['city'].'<br>Regisztráció kezdete: '.$row['date'].'<br>';
}
?>

<?php
$email= "".$_SESSION['email']; 
$result = mysql_query("SELECT * FROM users WHERE email='$email'");
$row = mysql_fetch_array($result);


$conn = include "config.php";
mysql_select_db("users");

if(empty($_POST))
{
$query = mysql_query("SELECT * FROM chat ORDER by id DESC");
while($a=mysql_fetch_assoc($query)){
$message=$a['message'];
$message= str_replace("<", "&lt;", $message);
$message= str_replace(">", "&gt;", $message);
$message= str_replace(":D","<img src='smiley/sm01.gif' alt='sm01' />", $message);
$message= str_replace(":P","<img src='smiley/sm02.gif' alt='sm02' />", $message);
$message= str_replace("[sm03]","<img src='smiley/sm03.gif' alt='sm03' />", $message);
$message= str_replace("[sm04]","<img src='smiley/sm04.gif' alt='sm04' />", $message);
$message= str_replace(":(","<img src='smiley/sm05.gif' alt='sm05' />", $message);
echo '
#'.$a['id'].' Név: <a class="b" href="profil.php?id='.htmlspecialchars(urlencode($a['idje'])).'">'.$a['name'].'</a> ||Dátum: '.$a['date'].'<br>||Üzenet: '.$message.'||<br><br>';
}

}else{
if($_POST['message'] !== "")
{
mysql_query("INSERT INTO chat (idje,name, message, date) VALUES ('".$row['id']."','".$row['nick']."' , '".$_POST['message']."', NOW() ) ");
header("Location: ".$_SERVER['PHP_SELF']);
}
}
?>
kész és még egy utólsó kérdés
azt hogy lehet hogy ha nincs olyan id akkor ki irjon a honlapom valami hiba üzenetet??
?
15

ha nincs megfelelő elem

ironwill · 2010. Szep. 23. (Cs), 13.09

<?php
$result = mysql_query("SELECT * FROM users WHERE id='".
mysql_real_escape_string($_GET['id']) . "' LIMIT 1");

$hasValue = 0;

while ($row = mysql_fetch_assoc($result)) {
  $hasValue++;

  echo 'Teljes Név: '.$row['rendesnev'].'<br>Lakhely: '.
  $row['city'].'<br>Regisztráció kezdete: '.
  $row['date'].'<br>';
}
if ($hasValue==0) {
  echo 'Nincs megfelelő elem!';
}
?>