Ki vagyok én? my account-username

hellstar képe

Hello,

A kérdésem az lenne, hogy a rendszer (4.7.6) milyen globális változóban tárolja a "My Account" felhasználónevét.

Írok egy saját modult amiben ki szeretném írni, hogy aki éppen bejelentkezett annak mi a neve.

(Nem az összes bejelentkezett felhasználót akarom listázni)

köszi
Hellstar

Illyés Edith képe

<?php
global $user;
print $user->name;
?>
0
0
hellstar képe

köszönöm szépen!

0
0
hellstar képe

még egy kérdésem lenne:
a felhsználónevet akarom betenni egy táblába, de valahogy nem akar működni.

$sql="insert into lemezhaboru (lemezcim,pont,ertekelo,ertekeles)
values ('$_POST[lemezek]','$_POST[pont]','{$user[name]}','$_POST[szoveg]')";

if (!mysql_query($sql))
{
die('Error: ' . mysql_error());
}

A lemezcim, pont, ertekeles ok, de az ertekelo nem íródik be a táblába.

A $_POST -ok egy form-ból jönnek és azok működnek is.

Mi a rossz fenti lekérdezésben? vagy hogy kell a form-ból átadni a $user->name -t?
köszi
Hs.

0
0
crt képe

Szia.

Én így próbálkoznék vele:

$sql="insert into lemezhaboru (lemezcim,pont,ertekelo,ertekeles) values ('".$_POST['lemezek']."','".$_POST['pont']."','".$user->name."','".$_POST['szoveg']."')";

Üdv: Zoli

0
0
hellstar képe

köszi a javaslatot a vonatkozó oszlop így is üres maradt :-( :-(

0
0
andrew képe

előszöris NE(!) használj mysql_query -t hanem a drupal db_query() függvényét /ha nem ismerős akkor nézd meg a drupal api oldalát/

másrészről véletlenül se form -ban tárold a felhasználót és azt mentsd el, hanem ahogy a említve lett a $user globális objektumot használd.

szóval a global $user sor feltétlenül kell a függvényed elejére és amikor menteni akarod akkor $user->name alakban kell rá hivatkozni

0
0
hellstar képe

köszi az ötletet, a felhasználót nem form-ban tárolom, csak a többit.
A felhasználónevet szeretném betenni egy oszlopba a $user->name -ből csak egyelőre nem tudom az insert into-ba hogyan kell paraméterezni.

megnézem a db_query()-t, de nem az insert into -val van baj?

0
0
andrew képe

<?php
function a_fuggvenyed_neve($parameterek) {
global $user;
 
db_query("INSERT INTO {lemezhaboru} SET lemezcim='%s', pont=%d, ertekelo='%s', ertekeles=%s", $_POST['lemezek'], $_POST['pont'], $user->name, $_POST['ertekeles']);
}
?>

amennyiben a lemezcím és az értékelés string és a pont egész típusú.

mellesleg ha a későbbiekben megváltozik az értékelő neve akkor nem valós információkat fog mutatni az ide vonatkozó legkérdezés, ellenben ha $user->uid kerül tárolásra az alapján mindig korrektül lekérdezheted az adott uid -hez tartozó nevet v bármi mást

0
0
hellstar képe

próbálgatom, de sehogy sem megy...esetleg másik megközelítés??? :-) :-)

0
0
andrew képe

másold be a kódodat ill a vonatkozó mysql tábla deklarációt

0
0
hellstar képe

ez van egy node-ban php-ban: (előtte persze a kapcsolat felépítése)

 
mysql_query('SET NAMES "utf8"');
 
echo '<form id="form1" name="form1" method="post" action="ertekeles.php">';
 
echo "<b>Értékelendő lemez: </b>";
echo'<select name="lemezek">';
 
 
$res=mysql_query("select title from node where type='flexinode-1' order by title");
if(mysql_num_rows($res)==0) echo "there is no data in table..";
else
for($i=0;$i<mysql_num_rows($res);$i++) {
$row=mysql_fetch_assoc($res);
echo"<option>$row[title]</option>";
}
echo'</select>';
 
echo "<p>";
 
echo "<b>Rövid értékelés: </b>";
print ("<textarea name='szoveg'>$szoveg</textarea>");
echo "<p>";
echo "<b>Pontszám: </b>";
echo "<select name='pont'>";
for($j=1;$j<11;$j++) 
{
echo"<option>$j</option>";
}
echo'</select>';
 
 
echo "<p>";
echo "<b>Értékelő: </b>";
 
 
global $user;
print $user->name;
 
 
echo "<p>";
 
 
 
echo '<label>';
echo '<input name="&Eacute;rt&eacute;kel" type="submit" id="&Eacute;rt&eacute;kel" value="&Eacute;rt&eacute;kel" />';
echo '</label>';
echo '</form>';

Ez az ertekeles.php:

 
 
global $user
 
mysql_query('SET NAMES "utf8"');
 
mysql_query("insert into lemezhaboru (lemezcim,pont,ertekelo,ertekeles) 
values ('$_POST[lemezek]','$_POST[pont]','$user->uid','$_POST[szoveg]')");

A táblák pedig:

id tinyint(4) auto_increment
lemezcim varchar(255) utf8_general_ci
pont tinyint(4)
ertekelo varchar(255) utf8_general_ci
ertekeles varchar(255) utf8_general_ci

Arra sem jöttem rá, hogy ha az ertekeles.php lefut, akkor miért kapok tök fehér képernyőt.
Ide kéne valami includes, vagy requred a theme-ből, de nem tudom mi. (Ez már egy következő probléma...)

köszönöm hogy segítesz
Hs.

0
0
RaptoR képe

Az a probléma, hogy nem a Drupal modulrendszerét használod, hanem írtál egy teljesen különálló php szkriptet. Ekkor természetes, hogy a $user objektum üres lesz, mivel a Drupal hozzá se szól ehhez a fájlhoz, nem is tud a létezéséről. Szóval először javaslom hogy ismerkedj meg a Drupal modulkezelő részével, nem túl bonyolult, de annál kényelmesebb, ha megszokta az ember, a Drupal.org-on van egy elég jó kis leírás hozzá. További nagyon jó dokumentáció maga a forrás, nézz bele mondjuk a poll, vagy a watchdog alapmodulba, és nézd meg, hogy ott hogyan épül föl egy modul.

0
0
hellstar képe

aha...köszi

ez kicsit olyan mintha valaki meg akarna tanulni vezetni és azt mondanánk neki, hogy menjen el egy könyvesboltba és vegyen egy KRESZ könyvet :-) :-)

majd megbírkózom ezzel valahogy.

köszi
Hs.

0
0
andrew képe

belekukkantottam én is, h mi a szitu...
hát ez így tényleg gáz és nem csoda h nem megy, azthiszem eddig mindenki azt hitte h rendes modul kódjáról beszélgetünk.

nem olyan bonyolult ám, indulj ki innen a példákat végignézve.

0
0
RaptoR képe

Igen, de a könyvben le van írva (remélem), hogy hol a sebességváltó. Miután beraktad ötösbe, utána gyorsabban fog menni az autó. :)

0
0
hellstar képe

rögtön megakadtam, és erre nem találok példát, leírást az említett helyen
A kód most így néz ki:

A gondom, hogy a combo box üres, nem tölti fel a lemezcímekkel.

$sql="select title from node where type='flexinode-1' order by title";
$lemez=db_query($sql);
 
function lemezhaboru() {
$form['lemezhaboru']['lemezek'] = 
array(
    '#type' => 'select', 
    '#title' => t('Értékelhető lemezek '), 
    '#options' => array($lemez), -> //itt lehet a baj nem????
    );
$output = drupal_get_form('lemezhaboru', $form);
return $output; 
}
echo "<b>Értékelő neve: </b>".$user->name;
echo lemezhaboru();
0
0
pp képe

Vagy figyelmetlen voltál...

function lemezhaboru() {
/////////////////////
  global $lemez;
/////////////////////

Persze ettől jó nem lesz, mert az #options egy tömb kell, hogy legyen, nem pedig egy erőforrás leíró.

Az egész kód nagyon érdekes... ha nem adod meg a $form-ot akkor egy végtelen ciklus lesz, talán... na ha lesz időm kipróbálom...

pp

0
0
hellstar képe

hát persze hogy nem vagyok tisztában...azt hittem ez kiderült
Most tanulgatom az egészet, eddig a drupal moduljaival dolgoztam, meg azokkal a modulokkal ami letölthető.

Most szeretnék valami saját dolgot csinálni és ehhez kellene segítség.

az általatok adott api-n vannak példák, de mondjuk pont azt nem találom ami nekem kellene.
(hogyan lehet a form select-jét egy sql adatbázisból feltölteni.) ennyi a kérdés.

0
0
RaptoR képe

Ajánlom ezt az oldalt, itt fel van sorolva, hogy az egyes űrlap elemek milyen értékeket várnak, kaphatnak. :) A select egy asszociatív tömböt vár opciói számára, így legkényelmesebb írni egy függvényt, ami lekérdezi a lemezeket, és visszatérési értéke egy ilyen tömb lesz. Pl:

function lemezek() {
  $lemezek_tomb = array();
  $sql = db_query("SELECT * FROM {lemezek}");
  while ($lemez = db_fetch_object($sql)) {
    $lemezek_tomb[$lemez->lemez_id] = $lemez->lemez_cime;
  }
  return $lemezek_tomb;
}

Ezután a select-nél '#options' = lemezek(), -et kell beállítani, a függvény pedig legyártja a tömböt. Most azt nem tudom, hogy a lemezeidet hogyan tárolod az adatbázisban, természetesen hozzá kell igazítani a példában leírt függvényt.

0
0
hellstar képe

Köszönöm, ez volt a hiányzó láncszem! most már minden müxik, fejlesztem tovább a dolgot. Még lehet hogy lesz kérdésem.. :-)

0
0
pp képe

Mondjuk azon elgondolkodhatnál, hogy honnan is lenne neked $user objektumod. Szerintem ez megy, de nem próbáltam.

Felhívnám mindenki figyelmét, hogy ezt a kódot ne használja, mert biztosnsági réseket tartalmaz, ezért betörési lehetőséget biztosít a gonosz behatolók számára.

//////////////////////////
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//////////////////////////
 
global $user
 
mysql_query('SET NAMES "utf8"');
 
mysql_query("insert into lemezhaboru (lemezcim,pont,ertekelo,ertekeles)
values ('$_POST[lemezek]','$_POST[pont]','$user->uid','$_POST[szoveg]')");
//////////////////////////
drupal_goto('node/3'); // vagy ahova akarod
//////////////////////////

Ez a megoldás lehet, hogy működik, de olyan szintű gányolás amiből egy bőven elég egy portálban. Ajánlom tanuld meg hogyan kell Drupal modult írnod (page_example) és hogyan kell a formokat használnod (Forms API Quickstart Guide). (Andrew leírta hol vannak ezek.)

Valamint erősen javasolt elolvasnod:

http://wfsz.njszt.hu/projektek_biztonsag.php

pp

0
0
hellstar képe

tudnál egy kódot küldeni?, a db_query elég bonyolultnak tűnik...a db_create_record-ot kéne használnom?

0
0