ugrás a tartalomhoz

javascript és php

kriszrap · 2011. Jan. 15. (Szo), 15.09
sziasztok van egy kis problémám vane az kód:
<script language="JavaScript" type="text/javascript">

function cimzett() {
document.beir.cimzett.value +="<?php
include "config.php";
$query = mysql_query("SELECT * FROM users");
while($name=mysql_fetch_assoc($query))
{
echo htmlspecialchars(urlencode($name['nick']));
}
?>";

az a baj hogy ha rákatintok egy névre akkor nem azt az egy nevet irja rublikába hanem az összes nevet mi a baj??
 
1

Mi a probléma?

Poetro · 2011. Jan. 15. (Szo), 15.47
Kezdjük azzal, hogy nem teljesen tiszta, mi a probléma? Én nem látok sehol kattintást, vagy hasonló esemény kezelését JavaScript oldalon. Előbb jó lenne azt is látni. Másik dolog, hogy ugye azt tudod, hogy ebben az esetben a JavaScript a böngészőben, míg a PHP a szerver oldalon fut, és nem igazán tudnak egymásról semmit. Azaz a
<?php
include "config.php"; 
$query = mysql_query("SELECT * FROM users");
while($name=mysql_fetch_assoc($query))
{
echo htmlspecialchars(urlencode($name['nick']));
}
?>
rész, már akkor lefut, amikor a böngésző letöltötte a weboldalt, és később nincs is kapcsolata a PHP-vel a JavaScript-nek. Nézd csak meg az oldal forrását a böngészőben. Ott már csak a PHP által generált tartalom van, ami nem fog változni, hacsak nem adsz ki újabb kérést a szervernek például AJAX vagy más hasonló technika segítségével.

Előbb tehát jó lenne megtanulnod, a programod melyik része hol, milyen környezetben fut – ebben az esetben 3 környezetről beszélünk:
  1. van az SQL ami a MySQL szerveren fut,
  2. van a PHP ami a HTTP szervereden fut,
  3. és van a JavaScript ami a látogató böngészőjében fut.

Ha ezzel megvagy, akkor azt kell tisztázni, mi, hogyan építhet fel kapcsolatot a másikkal. Például a MySQL szervered hogyan tud kapcsolatba lépni a PHP-vel, és fordítva, a böngésző a PHP-vel és fordítva. Azt se felejtsd, hogy ezek általában egyirányú kapcsolatok, mint az iménti példában, tehát a kommunikációt csak az egyik fél kezdeményezheti!

Ha ezeket megtanultad és érted, valamint le tudod írni, mit is szeretnél pontosan, és hogyan próbáltad ezt elérni, és mit kaptál helyette eredményül, na akkor térjünk vissza a kérdésre.
2

Poetro

Totti 1986 · 2011. Jan. 15. (Szo), 16.58
Poetro, én csodálom, hogy neked van még időd, energiád, türelmed, szabad idegszálad, hogy minden egyes alkalommal minden Kérdeznisetudok Jóskának hajlandó vagy az alapoktól minden elmagyarázni, hogy mit hogyan kéne először átgondolni, aztán megtervezni, meg összeállitani és csak utána belevágni, aztán kérdezni, és még hajlandó lennél megoldáshoz is segiteni.
Néha olyan érzés ezeket olvasni, mintha én anyámnak próbálnék PHP-ről, meg JS-ről magyarázni.

Egyébként a témához kapcsolódóan, én még ilyen JS-be belekotort PHP-t nem is láttam, meg nem is merészelnék. :)
3

Widget-ek

Poetro · 2011. Jan. 15. (Szo), 18.12
Pedig rengeteg felhasználása van, amikor maga a PHP állítja elő a JavaScript widgetet, nem csak a tartalmát adja vissza valami AJAX-szerű kapcsolaton keresztül. Így megspórolunk még egy HTTP lekérdezést, valamint olyan böngészőkben is működni fog, ahol nincs AJAX támogatás, illetve a cross domain problémák miatt esetleg nem is lehet kiszolgálni a tartalmat.

Vegyük például a következő példát. Itt magát a JavaScript fájlt is a PHP generálja. Persze ha JavaScript-et generálunk PHP-val akkor általában illik a json_encode függvényt használni még String-ekhez is, ugyanis ez megfelelően escape-eli a benne levő speciális jeleket, például idézőjelet, illetve backslash-t. Egy sima echo esetén esetleg gondban lehetünk, hogy mi okozza a JavaScript hibákat egyes oldalakon, másokon pedig nincs, pedig a különbség csak annyi, hogy nem jól escape-eltük az adatunkat.

Persze ha a szerver oldalon nem PHP van, hanem JavaScript, mind Node.js esetén, akkor a JavaScript-ben levő JSON.stringify függvényt kell használni.
4

akkor hogyan tudnám meg oldani!!

kriszrap · 2011. Jan. 15. (Szo), 18.22
hogy tudnám meg oldani? Mert egy email küldö php-t csinálok nem külsöleg ha nem belsöleg.
Belsöleg azt ugy értendö hogy aki a honlapomon van azt tud a másik társának emailt küldeni.(nem smtp-s)
Nekem ugye van egy táblázatom ahol a nevek vannak és kétt felhazsnáló van éppen. Ha Rákattintok az egyikre akkor a cimzet rublikába az összes nevet bele irja. Nekem csak az kell ameikre rákattintottam értehtö?:D javascript azért kell mert az onclick miadt.
kód:
<?php
$query = mysql_query("SELECT * FROM users");
while($names=mysql_fetch_assoc($query))
{
echo'<a class="b" onclick="cimzett();return false">'.$names['nick'].'</a><br>';
}
?>
ez hogy a névre kattintanak mi történjen

<script language="JavaScript" type="text/javascript">

function cimzett() {
document.beir.cimzett.value +="<?php
include "config.php";
$query = mysql_query("SELECT * FROM users");
while($name=mysql_fetch_assoc($query))
{
echo htmlspecialchars(urlencode($name['nick']));
}
?>";
}
ez pedig az onclick utasitása vagy is a nevet hova irja
<form name="beir" method="post">
cimzett:<br>
<input type="text" name='cimzett' style='width:65%';>
</from>
ez pediga rublika ahola név lesz
5

Írd le magyarul

Poetro · 2011. Jan. 15. (Szo), 18.45
Ha nem mennek az ékezetek, akkor ne írj ékezeteket. De írd le magyarul, helyes központozással. Ma már minden böngészőben van helyesírás ellenőrző, talán az IE-t kivéve, bár valahogy abba is biztosan bele lehet szuszakolni valamit. És felejtsd el azt, amit írtál a cimzett függvénybe. Tanuld meg a JavaScript-es események használatát, például, hogy az eseménykezelőben hogyan kell megtudni, mi is váltotta ki az eseményt. Ha megvan, akkor nézd meg annak az elemnek a tartalmát, és azt írd be az űrlap megfelelő mezőjébe. Amíg nem írod le a kérdésed magyarul, nem válaszolok több kérdésedre, és ajánlom, hogy mindenki tegyen hasonlóan.
12

(Nincs téma)

gphilip · 2011. Jan. 19. (Sze), 00.27
6

tényleg nem gondolod át :(

Totti 1986 · 2011. Jan. 15. (Szo), 19.08
Ahogy én értelmezem, van egy táblázat az oldalon, ahol minden regisztrált felhasználód neve ott van, és ha rákattintok valaki nevére, akkor egy levélküldő egységnél az e-mail cím mezőbe bekerül az adott ember címe.

Akkor először kiolvasod mindenkinek a nevét és címét, ezekre van szükséged.
Aztán, mivel onclick-re, oldaltöltődés nélkül akarod beírni a nevet az input mezőbe, ezért szerintem a legértelmesebb módszer, ha létrehozol egy js tömböt, php-val kiírva.
Utána kiírod a táblázatod, benne az adatokkal, és az onclick-kel.

Vagyis valahogy így:
<?php
$query = mysql_query("SELECT ID, NEV, EMAIL FROM users ORDER BY ID ASC"); //szerintem mindent kiolvasni itt felesleges, es remelem van id-je mindenkinek
while($names=mysql_fetch_assoc($query))
{
$php_adatok['id'][] = $names['ID'];
$php_adatok['names'][] = $names['NEV'];
$php_adatok['email'][] = $names['EMAIL'];

$php_js_email .= "js_email['".$names['ID']."'] = '".$names['EMAIL']."';\n";
}
?>
Aztán php-val kiiratod a script-ed, deklarálod a js_email tömböt, és a $php_js_email változót kiírod utána, ami felépíti a js_email tömböd.
Aztán ha meghívod a js függvényt, add át az adott emberke id-jét, és máris sokkal egyszerűbb lehet a js függvényed.
Kb ilyen:
function cimzett(id) {
document.beir.cimzett.value = js_email[id];
}
A változó átadását a php_adatok tömbből meg tudod csinálni, mert úgy íratod ki az adatokat.

Szerk: sorry Poetro, a szankciód előtt kezdtem el írni, de szerintem sokkal előbbre nem vittem :)
7

más meg oldás

kriszrap · 2011. Jan. 16. (V), 13.12
van még egy megoldás amikor rublikába irja nevet akkor lehajló fül irja hogy mien nevek vannak vagy is ha be irja hogy k-t a k-nevükeket irja ki a lehajó fülbe vagy hogy hivják azt :D .Olyan kell a youtubes keresö egy olyat szeretnék. De hogyan lehet meg csinálni ??
8

:O

Totti 1986 · 2011. Jan. 16. (V), 13.20
A mostani tudásoddal?
Szerintem kezdj egyszerűbbekkel.
Egy olyanhoz szükséged van AJAX-ra, ha azt ismered, akkor oké.
Amit én leírtam, egy kezdő tudással megérthető. (Mondjuk lehet, hogy van benne hiba, nem próbáltam ki.)
De ha azt nem érted, akkor a Youtube-ost nem érdemes még megpróbálnod.
9

honnan??

kriszrap · 2011. Jan. 16. (V), 13.54
Az ajaxot honnan tudnám meg tanulni meik oldalról?
10

Aki keres, talál

Poetro · 2011. Jan. 16. (V), 14.25
Például innen a Weblaborról. Persze volt itt erről már cikk is, bár lehet, hogy az abban tárgyalt technikákat kissé lehet le kellene porolni.
11

valamire jutodtam !!!

kriszrap · 2011. Jan. 18. (K), 22.21
de esse 100%-an jó és sztem bele kötök a biztonsági részbe sztem:D
<?php
include "config.php";
$query = mysql_query("SELECT nick FROM users order by nick asc");
while($names=mysql_fetch_assoc($query))
{
print '<form method="post">';
echo'<input type="checkbox" name="kinek" value="'.$names['nick'].'" ><a class="b">'.$names['nick'].'</a><br>';
}
?>
<input type="submit" name="ki" value ="Kijelölt választás">

checkbox-al oldodtam meg a név kiválasztást!!
ugye kilistáz minden nevet és rá lehet bökni meiket akarom!!
submittal lehet a be postolt adatot ki iratni igy:
cimzett:<br>
<input type="text" name='cimzett' value="<?php echo $_POST['kinek']; ?>" style='width:65%';><br>

Ezzel pedig bele iratjuka mezöbe a nevet!!!
eddig rendben.
Csak az a baj hogy ha kettöt ki választok mindig az utolsot irtaja ki.
ÖÖ szerintem ahogy Totti 1986 mondta tömbökbe kéne tárolnom a neveket de ezt igy ilyen formába hogyan ??
A Javascript és php hát letedtem róla nem jó megoldás:(
13

Bocs

plip · 2011. Jan. 19. (Sze), 10.41
Ne haragudj, de ilyen helyesírással hogy lehetsz "programozó"...?
14

de nem ez a kérdésem bocs

kriszrap · 2011. Jan. 19. (Sze), 16.33
plip öö nem vok programozó még csak 14 vok :DXDXD
csak nagyon érdekel a honlapszerkesztés. Légyszi a választ irjad le ne a kritizálásodat köszi.
15

Igaz, hogy pocsék a

gphilip · 2011. Jan. 20. (Cs), 16.11
Igaz, hogy pocsék a helyesításod, de ez ugye nem nyelvtan fórum, szóval... :)
(btw ha sokat olvasol könyvet vagy újságot az segít a helyesírásodon)

Szóval, a te kódodat használva:

<?php
require "config.php"; 

print '<form method="post">';

$query = mysql_query("SELECT nick FROM users ORDER BY nick ASC");
while($names=mysql_fetch_assoc($query))
{
echo'<label><input type="checkbox" name="kinek[]" value="'.htmlspecialchars($names['nick'], ENT_QUOTES).'" />'.htmlspecialchars( $names['nick']).'</label><br />';
}
?>
<input type="submit" name="ki" value ="Kijelölt választás" />
Megjegyzések sorról sorra:

- PHP kódot, ami feltétlenül szükséges a programod lefutásához (egy osztály vagy config) require-rel ágyazz be, mert ez "szigorúbb", mint az include és fatal errorral megáll, ha esetleg nem sikerült a dolog

- a <form> element csak akkor valid, ha van "action" attribútuma. A legtöbb böngésző az aktuális URL-re fogja viszaposztolni az adatot, de ha ez az URL fix, jobb, ha ide írod

- mellesleg a <form> opening tag-et a ciklusba (while) tetted, szóval minden checkbox előtt kiírtál egy ilyet, egy elég

- tettem egy <label> taget a checkboxod köré, mert így felhasználóbarátabb a formod - ha a felhasználó a névre klikkel (és nem a checkboxra) akkor is bepipálódik a checkbox

- a checkbox inputodat átneveztem így: name="kinek[]". A szögletes zárójelek azt jelentik, hogy a PHP automatikusan egy tömbbe fogja pakolni a változóidat ha több paramétert talál ezzel a névvel. Így tehát a $_POST['kinek'] egy tömb lesz, ami a neveket tartalmazza

- htmlspecialchars azért kell a névhez, hogy ne okozzanak problmát az olyen nevek, amelyek esetleg idézőjelet tartalmaznak és ezzel "bezárják" a value= attribúrumot. Nyilván azt gondolod, hogy ilyen nem lesz, de amikor egy felhasnálótól érkező adatot kiíratsz a kimenetre (ie. a HTML-be) akkor _mindig_ gondolnod kell a rosszindulatú felhasználókra, így _mindig_ escape-elned kell. Ha ezt nem teszed az oldalad XSS-támadható lesz

- a <br> és az <input> tag nem valid, be kell zárnod így: <br />, <input />

Most már elvileg működhet így az odal, ahova küldöd az adatot:

cimzett:<br/>
<input type="text" name='cimzett' value="<?php echo htmlspecialchars(implode(", ", $_POST['kinek']), ENT_QUOTES); ?>" style='width:65%';><br />
Ha valamit elírtam, sorry, nincs időm tesztelni :)

Btw gondoltál arra, hogy felhasználónév helyett egy azonosítót (mondjuk egy szám) küldesz el?

Ha jó vagy angolból, akkor ezen az odlalon legalább a Security-hez kapcsolódó linkek elolvasását ajánlom:
http://stackoverflow.com/questions/72394/what-should-a-developer-know-before-building-a-public-web-site

És csak így tovább, mind így kezdtük :)
16

ez a számod dolog:D

kriszrap · 2011. Jan. 20. (Cs), 18.47
'Btw gondoltál arra, hogy felhasználónév helyett egy azonosítót (mondjuk egy szám) küldesz el?'
Ezzel arra utal hogy az idet küldje el (de szerintem ez hülyeség) Biztonsági okok miat vagy nem?????

Párdolog ami nekem nagyon új:D
-implode ez mire jó??
-ENT_QUOTES és ez??:D
csak anyni hibát ir amikor nem jelölök ki semmitse vagy is rá lépek a lapra.
ezt irja:
<br /><b>Warning</b>:  implode() [<a href='function.implode'>function.implode</a>]: Invalid arguments passed in <b>C:\wamp\www\mail_new.php</b> on line <b>92</b><br />

de amugy megy :D
17

RTM

Poetro · 2011. Jan. 20. (Cs), 18.57
18

segítsetek:D

kriszrap · 2011. Jan. 21. (P), 22.13
Amit kaptam hiba. Tudvalaki segiteni rajtam??:D
19

segítsél

Poetro · 2011. Jan. 21. (P), 22.27
Mutasd meg, mi a kód, anélkül nehéz segíteni. Olyan mint ha azt mondanád, hogy nem jó a kocsi, de nem mutatnád meg a szerelőnek.
20

ebbe van a hiba:D

kriszrap · 2011. Jan. 21. (P), 22.34
<input type="text" name='cimzett' value="<?php echo htmlspecialchars(implode(",",$_POST['kinek']), ENT_QUOTES);?>" style='width:65%';><br>


Na meg annyi a baj hogy ha két nevet küldök akkor az id rublika üres marad de ha csak egyet jelölök akkor el küldi:D
mi a hiba?:
$cimzett = "".$_POST['cimzett'];
$query = mysql_query("SELECT * FROM users WHERE nick='$cimzett' ");
$felh = mysql_fetch_array($query);

$sql ="INSERT INTO emails (id,kitol,cimzett,targy,email,datum) values ('','$id','".$felh['id']."','".$_POST['targy']."','".$_POST['email']."',now())";
21

Mik a változók?

Poetro · 2011. Jan. 21. (P), 22.53
És leellenőrizted a változókat, hogy léteznek, és olyan típusúak, amit te vársz? Az implode például a második paraméternek egy tömböt vár. Azt adsz át neki?
Melyik id rubrika marad üres? Előbb nézd meg, milyen adatok jönnek, azokat megfelelően lekezeled-e. Például, ha tömböt vársz, és nem azt kapsz, akkor jelezd a felhasználónak, és addig ne is menj tovább. Ha pedig stringet vársz, akkor ha tömböt kapsz, azt is le kell kezelni.
22

jaaaa:D

kriszrap · 2011. Jan. 22. (Szo), 13.53
Na ugye be irjun kétt nevet.
A névet(ket) meg keresi az adatbázisba és az idjét feltöltjük.
cimzett ahogy látjuk '.$felh['id'].' eddig okés.
$query = mysql_query("SELECT * FROM users WHERE nick='$cimzett' ");
$felh = mysql_fetch_array($query);

$sql ="INSERT INTO emails (id,kitol,cimzett,targy,email,datum) values ('','$id','".$felh['id']."','".$_POST['targy']."','".$_POST['email']."',now())";

na de a kettö fel használó van akkor ilyen a kód ha nincs változó:
[code]
$query = mysql_query("SELECT * FROM users WHERE nick='krinya,kriszrap' ");
és igy nem fogja meg találni ez a baj:(
implode még probálkozom :D
23

Segítsetek nem megy sehogy se

kriszrap · 2011. Jan. 25. (K), 18.16
Segítsetek nem megy sehogy se :((((
probáltam igy :
$cimzett = "".implode(',',$_POST['cimzett']);
$query = mysql_query("SELECT * FROM users WHERE nick='$cimzett' ");

de nem jó:(
24

Az egész az egyenlőségjel

bugadani · 2011. Jan. 25. (K), 18.36
Az egész az egyenlőségjel miatt nem akar, és ebben a formájában nem is fog működni.
Alapvetően nem akarom lesúgni a teljes megoldást, mert abból nem sokat tanulnál, de mivel régóta szenvedsz vele, ezért tessék, jófej leszek:

if(!magic_quotes_gpc()){
    foreach($_POST['cimzett'] as $sorszam => $cimzett){
        $_POST['cimzett'][$sorszam] = mysql_real_escape_string($cimzett);
    }
}
foreach($_POST['cimzett'] as $sorszam => $cimzett){
    $_POST['cimzett'][$sorszam] = '"'.$cimzett.'"';
}
$cimzett = implode(',',$_POST['cimzett']);
$query = mysql_query('SELECT * FROM users WHERE nick IN('.$cimzett.')');
Ha nem pontos egyezést szeretnél, hanem "választási lehetőséget", tehát egy felsorolás bármelyik tagja kielégíti a feltételt, akkor az IN a barátod, nem az egyenlőségjel.

Megjegyzés: nem lesz rendszeres, hogy megcsináljuk helyetted. Tessék utánajárni a dolgoknak, nem olyan nehéz azt.
25

na csak annyi hogy:$query =

kriszrap · 2011. Jan. 25. (K), 22.00
na csak annyi hogy:
$query = mysql_query('SELECT * FROM users WHERE nick IN(implode(',',$cimzett))');  
$felh = mysql_fetch_array($query);
iylen hibát ir:

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\mail_new.php on line 106

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\mail_new.php on line 107

bugadani kösz a segitséget de nem teljesen jó
és foreach el magyaráznád hogy igazából az mit csinál.

nem tudtam meg oldani:(
26

Érdekes, úgy emlékszem, hogy

bugadani · 2011. Jan. 25. (K), 22.15
Érdekes, úgy emlékszem, hogy nem egészen ezt írtam neked:

$query = mysql_query('SELECT * FROM users WHERE nick IN(implode(',',$cimzett))'); 
Hanem:

$cimzett = implode(',',$_POST['cimzett']);  
$query = mysql_query('SELECT * FROM users WHERE nick IN('.$cimzett.')');  
Lényeges különbség, ugyanis a MySQL-nek tudomásom szerint nincs implode függvénye, ezt a PHP-val kell tehát elvégeztetned.

Másrészről:
a kódszínezőt a [ colorer=php ]-val éred el :)

Harmadrészt:
Az első foreach éri el, hogy nehogy véletlen valamilyen aljas sql-injection támadás áldozata legyen az oldalad.
A második foreach minden címzett-sztringet aposztrófokkal vesz körül, hogy egyáltalán értelmes MySQL-kérést lehessen belőlük összerakni.
Az implode pedig, ezesetben, mint már remélem észrevetted és csak fölöslegesen írom le, összefűzi a címzetteket vesszővel elválasztva.

Szerkesztés:
Még egyszer megnéztem, a fentieken kívül még egy baja van az általad idézett kódnak:
Ezt látja belőle a php fordító: (ROSSZ)
mysql_query('valami sztring', 'megint valami sztring');
Ebből gyanítom, hogy nem egy olyan felszereltségű szerkesztővel írod a kódod, ami kiszínezné azt. Próbálj meg Notepad++-t, EditPlus-t, vagy valami fejlettebb fejlesztői környezetet használni, mint pl.: Eclipse PHP Developer Tools (PDT). Megkönnyítik az ember életét.
27

köszönöm:)

kriszrap · 2011. Jan. 25. (K), 22.33
köszönöm:D na ahogy le irtad implode összefűzi a címzetteket de ezt nem lehet szét szedni darabokra???:D vagy ezt más hogy??
28

Nem értem, miért szeretnéd

bugadani · 2011. Jan. 25. (K), 22.37
Nem értem, miért szeretnéd szétszedni, ha egyszer az sql-kérésbe egyben kell berakni? :)
Egyébként az implode párja az explode etéren.
29

hát azért mert

kriszrap · 2011. Jan. 26. (Sze), 15.56
hát azért mert nekem ugye ennek a két felhasználó idjét kell kiszednem az users táblázatból ezzel:
$query = mysql_query('SELECT * FROM users WHERE nick IN('.$cimzett.')');    
$felh = mysql_fetch_array($query);

érted vagy is én nem a neveket (nick) et fogom felküldeni hanem a nickek id-jét.
ezért kell nekem szét szedni. de hogy??:D
30

mi a hiba

kriszrap · 2011. Jan. 27. (Cs), 16.58
kicsit gondolkodtam hogy lehetne megoldani és ki eszméltem egy ilyen kódót csak az a baj hogy nem számolja mega tömböket :(
<input type="text" name='cimzett[]' value="<?php if($_POST['kinek']==''){echo '';}else{ echo htmlspecialchars(implode(",",$_POST['kinek']), ENT_QUOTES);}?>
" style='width:65%';><br>
<?php
$cimzett= "".$_POST['cimzett'];
$count = count($cimzett);

for($i=0; $i<$count; $i++)
   {
   $query = mysql_query("SELECT * FROM users WHERE nick= 'array[$cimzett][$i]'");    
   $felh = mysql_fetch_array($query);

   $sql ="INSERT INTO emails (id,kitol,cimzett,targy,email,datum) values ('','$id','".$felh['id']."','".$_POST['targy']."','".$_POST['email']."',now())";
   $query = mysql_query($sql)or die ("Valami baj van az adatbázissal.");

}
print "Sikeresen elküted az Üzenetet!!";
?>
31

Sikerült!!!

kriszrap · 2011. Jan. 27. (Cs), 17.32
Össze hoztam megy rendesen :D
<?php
$cimzett= "".$_POST['cimzett'];
$nevek = explode(",", $cimzett);
$count = count($nevek);
if($count > 1)
  {
for($i=0; $i<$count; $i++)
   {
   $query = mysql_query("SELECT * FROM users WHERE nick= '$nevek[$i]'");    
   $felh = mysql_fetch_array($query);

   $sql ="INSERT INTO emails (id,kitol,cimzett,targy,email,datum) values ('','$id','".$felh['id']."','".$_POST['targy']."','".$_POST['email']."',now())";
   $query = mysql_query($sql)or die ("Valami baj van az adatbázissal.");
}
}else{
    $query = mysql_query("SELECT * FROM users WHERE nick= '$cimzett'");    
   $felh = mysql_fetch_array($query);

   $sql ="INSERT INTO emails (id,kitol,cimzett,targy,email,datum) values ('','$id','".$felh['id']."','".$_POST['targy']."','".$_POST['email']."',now())";
   $query = mysql_query($sql)or die ("Valami baj van az adatbázissal.");
}
print "Sikeresen elküted az Üzenetet!!";
?>

Végeredmény:D
32

sql ciklusban?

Totti 1986 · 2011. Jan. 27. (Cs), 20.29
Ettől engem mindig óva intettek, és múltkor sikerült megtízszereznem az oldalam betöltési idejét egy ilyennel.

Habár láthatóan ez nem lesz egy hatalmas terhelésnek kitéve, én jobbnak látnám valahogy a következőképpen végrehajtani:

<?php
$cimzett= $_POST['cimzett']; // az elején az összefűzés nem is kell
$nevek = explode(",", $cimzett);

for($i=0; $i<count($nevek); $i++) {
	$my_select_clause .= ' OR nick='.$nevek[$i]; // ebből annyi lesz, amennyi embert kiválasztottak
}

// most lett 1 sztringed, ami sql szintaxis szerint összefűzött annyi embert, amennyit kell
// ha 1 akkor is jó, ha több, akkor is
// most EGYSZER add meg az sql parancsot, és vágd le a felesleges elejét a sztringnek
$query = mysql_query('SELECT * FROM users WHERE '.substr($my_select_clause,3));
while($felh = mysql_fetch_array($query)) {
	$my_insert_lines  .= ', ("'.$id.'","'.$felh['id'].'","'.$_POST['targy'].'","'.$_POST['email'].'","'.now().'")';
// ez kiválasztja a valóban létezőket, és egybefűzi a későbbi inserthez
}
// és EGYSZER végrehajtod az összes insertet
mysql_query('INSERT INTO emails (id,kitol,cimzett,targy,email,datum) values '.substr($my_insert_lines,1));
?>
Azzal ahogy te csináltad, szerintem két fontos baj van, az egyik, amit már említettem, hogy for ciklusba tettél sql parancsot, ami sok egyidejű használat esetén nagyon megterheli az oldalt, a másik, gyakorlati hátrány, hogy ha változtatni akarsz az sql parancson, mindig az if és else ágat is át kell írni, pedig 99%-ban ugyanaz.

És sztem szokj le arról, hogy dupla idézőjelben szimplát használva jelenítesz meg változót, mert később nem lehet átlátni. Szépen szakítsd meg az idézőjelet, és fűzd össze.

(Itt irtam meg a fenti sorokat, de remélem, nincs benne hiba. Ha van, sorry.)
33

köszike

kriszrap · 2011. Jan. 27. (Cs), 23.06
mi a hiba mindig csak az utolsot hozza be miért :(:(
létszi segítsetek:(
<?php
$result3 = mysql_query("SELECT * FROM emails WHERE cimzett='$id'");
while($row = mysql_fetch_assoc($result3)){
echo $row['datum'].'<br>';
$kitol =$row['kitol'];
}
print('</div>');
print('<div id="felado">');
$result2 = mysql_query("SELECT * FROM users WHERE id='$kitol' ");
while($ja = mysql_fetch_assoc($result2)){
include "dolgok/feladorovidites.php";
}
?>
34

Szerintem

Blintux · 2011. Jan. 28. (P), 00.58
Mert a $kitol változó értéke minden ciklus lefutás után új értéket kap, így a következő lekérdezésbe csak a legutolsó ID kerül, mint szűrési feltétel.
Úgy sejtem ez a problémád...
Btw, enyhén szólva is fura ez a kód :-/
Különösen szemet szóró a ciklusban lévő include. :O
35

az include azért van hogy ne

kriszrap · 2011. Jan. 28. (P), 09.18
az include azért van hogy ne legyen annyi kód a szövegbe:D
36

Függvények!

Blintux · 2011. Jan. 28. (P), 09.51
Erre már kitalálták a függvényeket ;)
Pár egyszerű példa

Ha a függvényeidet megírod pl. egy functions.php fájlba, és azt a főprogramodban, mondjuk az index.php-ban beincludeolod, rögtön elöl, akkor a program további részében szépen elérheted a függvényeket.
Értékátadási szempontból is sokkal praktikusabb, servernek is jobb ha nem kell akár több százszor a fájlhoz nyúlnia, meg egyéb dolgok... :)
37

nehézségem támadt!!!

kriszrap · 2011. Jan. 28. (P), 22.38
Az a broblémám hogy van
-2 táblázat.
-az egyik be egy feladoidet tárolok(email táblázat)
-a másikba pedig nicket iddel.(users táblázat)
na email táblába felado az pl.1
akkor ki keresi a users táblázatbol az egyes idüt
és ugye ebbe az email táblázatba több sorvan 1 feladoiddel és azok helyére a nicket szeretném iratni:D hogyan??:D
(kicsit bonyolult):D
38

php-val, tömbbel

Totti 1986 · 2011. Jan. 28. (P), 22.54
- Szúrj be az email tábládba egy új mezőt, amibe a nicket tárolod majd.
- Olvasd ki az összes emailt, és tárold el egy tömbben.
- Olvasd ki a tömbben tárolt email-ekhez tartozó nicket a users táblából.
- Update-eld az email táblában lévő nick mezőt.
39

Hat ez nem teljesen jo mert

kriszrap · 2011. Jan. 29. (Szo), 00.51
Hat ez nem teljesen jo mert ha a felhasznalo nicket valt?ezert hasznalok idet
40

és ugye ebbe az email

Totti 1986 · 2011. Jan. 29. (Szo), 01.04
és ugye ebbe az email táblázatba több sorvan 1 feladoiddel és azok helyére a nicket szeretném iratni:D hogyan??:D
42

A lekerdezesbe es a ki

kriszrap · 2011. Jan. 29. (Szo), 01.31
A lekerdezesbe es a ki iratasba kell varialni vagy is kett tablabol dolgozunk vagy is felado tombbe van felhasznalo idje es users tablaba felado tombell azonositjuk es a nevet kikene iratni ugy hogy nickek jelenjenek meg ne az idek(2 postok ert elnezest csak telorol vok):(
41

A lekerdezesbe es a ki

kriszrap · 2011. Jan. 29. (Szo), 01.24
A lekerdezesbe es a ki iratasba kell varialni vagy is kett tablabol dolgozunk vagy is felado tombbe van felhasznalo idje es users tablaba felado tombell azonositjuk es a nevet kikene iratni ugy hogy nickek jelenjenek meg ne az idek
43

Hogy lehet komit törölni??

kriszrap · 2011. Jan. 29. (Szo), 13.09
Hogy lehet komit törölni?? mert ez a szemét teló 2* külte el a komikat:D
44

többit ne vegyétek figyelembe:D

kriszrap · 2011. Jan. 29. (Szo), 17.32
a többi válaszomat ne vegyétek fiygelembe mert elrontodtam:D

A lekerdezesbe es a ki iratasba kell varialni vagy is kett tablabol dolgozunk vagy is felado tombbe van felhasznalo idje es users tablaba felado tombell azonositjuk es a nevet kikene iratni ugy hogy nickek jelenjenek meg ne az idek

itt a kod:
$id= "".$_SESSION['id'];
$result3 = mysql_query("SELECT * FROM emails where cimzett='$id'");// ezzel be azonositjuk az email.
$row = mysql_fetch_array($result3)

$kitol=$row['kitol'];  //ezzel ki választjuk a tömböt

$result2 = mysql_query("SELECT * FROM users where id='$kitol'"); //$row['kitol'] ezzel users táblázatbol kiválasztjuk.

na eddig érthetö.szerintem

ha emails táblázatot használunk akkor igy nézki:
[code]
$result3 = mysql_query("SELECT * FROM emails where cimzett='$id'");
while($row = mysql_fetch_array($result3)){
echo $row['kitol'].'<br>';
$row['targy'].'<br>';
$row['datum'];
akkor igy jelenik meg:
felado          targy         dátum
1               Szia!!        2010/09/01
1             Mit csin??!!    2010/09/01

de igy nekem nem jó
felado nál ne az id jelenjen meg hanem az users táblázatból a nick neve és arra is gondoljunk hogy a felhasználó nicket változtathat:D

megoldható??
vagy ezzel meglehet : str_replace?
45

Hmm

Blintux · 2011. Jan. 30. (V), 03.42
Én csak azt nem értem, miért nem tárolod egy táblában a felhasználókat az email címükkel?
De ha mindenképpen ragaszkodsz két táblából való lekérdezéshez, akkor a JOIN a barátod.
46

hát de..

kriszrap · 2011. Jan. 30. (V), 12.49
ha felhasználó névet változtat?? vagy arra is tutsz megoldást??
47

Mi van akkor? :)

Blintux · 2011. Jan. 30. (V), 17.11
Ha ID-kkel azonosítasz, akkor teljesen mindegy mi a felhasználó neve, vagy hogy mikor, hányszor változtatja.
De egy ötlet, ha közösségi portál szerűséget csinálsz:
A felhasználónév ne legyen megváltoztatható, hanem legyen egy nick név is, amit kénye-kedve szerint átírhat bármikor, csak úgy mint a jelszavát, vagy az e-mail címét.
48

E-mai, mint usernév

Max Logan · 2011. Jan. 30. (V), 19.19
Én azon az állásponton vagyok, hogy a username az legyen az e-mail cím. Biztosan egyedi, nem kell kitalálni mindenféle "mutáns" felhasználói neveket.

Annyiban lehet problémás, hogy mail cím változtatás esetén egy darabig párhuzamosan kell futtatni a két mail címet (saját domain(ek) esetén elég az alias), hogy minden ilyen helyen át legyen vezetve a változás. Mármint, ha a username a mail cím és ezen a címen keresztül kommunikál a site a felhasználóval.
49

Megfogadtam hogy mezöbe rakom

kriszrap · 2011. Feb. 1. (K), 16.54
Köszönöm!!
Na azt hogy lehet meg csinálni hogy 1xp képet berakunk honlapomra és ha beszárodik kijelentkeztett hogy??:D