Html-, css- és php-help

Jelentkezz be a hozzászóláshoz.

Terensz
#10482
Szerinted mennyi memóriát veszek el szegény, kicsi, elesett szerveremtõl 30-40 db globális változóval? A te oldalaidon hány db nem globális változónak adsz értéket, és mennyi változó van, amit fölöslegesen másik változóba teszel, hány többdimenziós tömbbel dolgozol és hány sql-bõl veszel ki többszáz adatot egy tömbbe? Kit érdekelnek a pár byte-os globálok (összesen)? A lényeg, hogy a kódod a lehetõségekhez képest optimális legyen, használj függvényeket, mert - bár több memóriát használ, mint az egymás után írt kód - de fel tudod használni legközelebb is, sõt, a portálodon is, más helyen. De ha függvényeket használsz, akkor kénytelen vagy globális változókat használni, mert egy $mysqlTablename típusú változó ha megszentülsz sem fog a függvényedbe belemenni.
És egyben az elõzõ hsz-hez is kiegésztenék: az include include-ja sem látja a sima változót, bár az include valóban látja.

Egy fecske nem csinál kolbászból kerítést

Maco13
#10481
Igen. A require és az include olyan, mintha bemásolnád a kódot a hivatkozott forrásból, ugyanazok maradnak a változónevek, értékek, minden
#10480
Olyat lehet h csinálok egy valami.php-t és beleírom h $user=xy $pass=yx
és a fõ"programban" pedig require-vel meghívóm és akkor $user,$pass al csatlakozok sql szerverhez ?

[ cod.magyaritasok.hu ] _____|\\_____\\o/___ Cápatámadás ಠ_ಠ

Maco13
#10479
ha nem globálisban tárolod, és include, akkor se kell átírni, és a szerver memóriát se foglalod
Terensz
#10478
Pedig ilyen esetben jó megoldás. Legközelebbi weboldalnál csak át kell írni a globals.php-t.

Egy fecske nem csinál kolbászból kerítést

Maco13
#10477
globális változó se valami elegáns megoldás...
MerlinW
#10476
(Én a \" megoldást szeretem😊)

$query_arr = mysql_query("select * from users where userid=\"$_GET\" ");
$query = mysql_fetch_array($query_arr);

echo $query<'mezo0'>.'<br />';
echo $query<'mezo1'>.'<br />';
echo $query<'mezo2'>.'<br />';

Ha több rekordot vársz:

while ($query = mysql_fetch_array($query_arr))
{
echo $query<'mezo0'>.'<br />';
echo $query<'mezo1'>.'<br />';
echo $query<'mezo2'>.'<br />';
}

[merlinw.org]

Terensz
#10475
Jaj, lásd már meg egy kódban a fantáziát :-)

A function, amit írtam, +

$userAdatok<'1016'> = userAdatok('1016');

echo '<a href="index.php?userid='.$userAdatok<'1016'><'id'>.'>'.$userAdatok<'1016'><'user'>.'</a>';

SOHA ne azonosíts usert más adat alapján, mint az id-ja. Szokd meg.

Egy fecske nem csinál kolbászból kerítést

Máté12
#10474
Nem az useradatok kellenek 😊 Hanem valaki rákattint a linkre akkor annak az EGY embernek mutatja ki az adatait! Tehát:
users.php-ban van a link :
<a href="index.php?username='.$s<'username'>.'>'.$s<'username'>.'</a>

És a user.php-ban akarom csak annak az embernek kiírni az adatait ameikre a felhasználó rákattintott.

Logitech G25 tulajos!!

Terensz
#10473
Jah, még valami.

SELECT * FROM legyen már örökre felejtõs!!4 Prok nem használják.
1.: Nem terhelik fölöslegesen az sql szervert egy nagyobb lekérdezésnél
2.: így legalább látják, hogy milyen adatmezõk vannak.

Egy fecske nem csinál kolbászból kerítést

Terensz
#10472
Direkt space-eket raktam bele tab helyett :C most mondd meg... ezsgé szét q...rontotta a kódomat.

Tehát a globálok helye a globals.php-ben van, a function helye mondjuk a functions v. func.php-ben, alul a $userAdatok = userAdatok('1016'); echo... pedig megmutatja a function használatát.

Használd egészséggel!

Egy fecske nem csinál kolbászból kerítést

Terensz
#10471
Ha jól értem, az useradatok kellenek. Azt ne így csináld.
Összeütöttem neked egy adatlekérdezõt. Ezt legalább nem kell újraírnod, ha másik weboldalt csinálsz.


<?php

// config/globals.php -ba

#############
## CONFIG
$GLOBALS<'usertablaNev'> = 'admins';
$GLOBALS<'usertablaPrimKey'> = 'id';

$GLOBALS<'usertablaMezok'><0> = 'id';
$GLOBALS<'usertablaMezok'><1> = 'nev';
$GLOBALS<'usertablaMezok'><2> = 'email';
## /CONFIG
#############

function userAdatok( $primKeyErtek )
{
$adatmezoStr = '';
for( $i=0; $i < count( $GLOBALS<'usertablaMezok'> ); $i++ )
{
if( $i == 0 ) { $pre = ''; } else { $pre = ' , '; }
$adatmezoStr .= $pre.$GLOBALS<'usertablaMezok'><$i>;
}

$sql = "
SELECT ".$adatmezoStr." FROM ".$GLOBALS<'usertablaNev'>." WHERE ".$GLOBALS<'usertablaPrimKey'>." = '".$primKeyErtek."'
";

$q = mysql_query( $sql );

while( $tomb = mysql_fetch_assoc( $q ) )
{
for( $i=0; $i < count( $GLOBALS<'usertablaMezok'> ); $i++ )
{
$ertekTomb[$GLOBALS<'usertablaMezok'><$i>] = $tomb[$GLOBALS<'usertablaMezok'><$i>];
}
}

return $ertekTomb;
}

$userAdatok = userAdatok('1016');

echo $userAdatok<'nev'>;

?>

Egy fecske nem csinál kolbászból kerítést

Máté12
#10470
Az a helyzet, hogy minden esetben nem csinál semmit:S
Talán nem jegyzi meg, hogy melyikre kattintott a felhasználó?

Logitech G25 tulajos!!

Terensz
#10469

1.: köszi a courieres ötletet :-) Már kezdtem morcos lenni, hogy nem látszik a kódom.

Most látom, te is kijavítottad Máté úrnak. Ha ketten mondjuk, csak nem hülyeség.

Egy fecske nem csinál kolbászból kerítést

Terensz
#10468
$query = mysql_query("SELECT * FROM login WHERE username = '.$username.' LIMIT 1");

ennek a sornak így kéne festeni:

$query = mysql_query("SELECT * FROM login WHERE username = '".$username."' LIMIT 1");

vagy így:

$query = mysql_query("SELECT * FROM login WHERE username = '$username' LIMIT 1"); - Szerintem az elõzõt szokd meg. 1.: kiemeli a szerkesztõ a változót 2.: sokkal szebb.

Az egyetlen nem mûködõképes a te verziód.

Amúgy: tegyél már fel egy mysql kezelõt a gépedre, egyszerûen php oldalon mysql futtatással nem lehet elakadni:

Tényállás: nem fut le az sql.

$slq = "SELECT nev FROM users WHERE id = '".$_POST<'id'>."'";
$q = mysql_query($sql);

Megoldás:

$slq = "SELECT nev FROM users WHERE id = '".$_POST<'id'>."'";
echo $sql;
$q = mysql_query($sql);

A böngészõ kiírja:

SELECT nev FROM users WHERE id = '129'

Copy a böngészõbõl, paste a mysql szerkesztõbe, sql futtatása, és lõn világosság.

Egy fecske nem csinál kolbászból kerítést

Malakai
#10467
Tehát pl:
echo'<a class="nev2" href="user.php?username='.$s<'username'>.'">'.$s<'username'>.'</a>';

$query = mysql_query("SELECT * FROM login WHERE username = '$username' LIMIT 1");
while($s=mysql_fetch_assoc($query)){}

(\__/) ( X.x) ( } . { )

Malakai
#10466
Már megint ezek a rejtéjes stringek. 😊
A dupla és szimpla quoteokat nem igazán tudod eldönteni, hogyan kezeld...

Dupla quoteot nem tudsz lezárni simával, tehát ha simát használsz duplán belül, vagy fordítva, akkor az a stringben jelenik meg és nem zár-nyit.
A dupla quoteba nyugodtan belerakhatod a változót ($username). Amit te sokszor láthatsz queryknél, hogy a változó köré plussz quoteot tesznek, ez egy mysql-es szokás, ott nem szakítják meg a stringet, így a pontokra sincs szükség.

A quote hiba az anchornál is van, feltételezem, hogy ez így egy echo pl és egy szimpla quoteal kezdõdik valahol, akkor a dolog jó, annyi kivételével, hogy a href értéke nincs lezárva (egy dupla quote hiányzik).

(\__/) ( X.x) ( } . { )

Máté12
#10465
Sziasztok!

Van egy users.php fájlom. Itt vannak a username-ek. Pl.:
Felhasználói neve: '.$s<'username'>.'
Na most én ezt belinkeltem igy:
<a class="nev2" href="user.php?username='.$s<'username'>.'>'.<'username'>.'</a>

Azt, hogy tudom megcsinálni, hogy a user.php-ban csak annak az egy embernek az adatai jelenjen meg?
Próbálkoztam már így:
$query = mysql_query("SELECT * FROM login WHERE username = '.$username.' LIMIT 1");
while($s=mysql_fetch_assoc($query)){

Csak az a baj, hogy semmit nem ír ki a lekérdezésnél. Gondolom a WHERE résznél kéne valamit csinálni, hogy tudja, hogy meik felhasználóra kattintott rá.

Köszi elöre is a helpet!

Logitech G25 tulajos!!

Terensz
#10464
Köszi szépen!

Ennél bonyolultabbra akartam, de maradok a szavas bontásnál.
Max ha valaki kijátssza az ellenõrzõ scriptet, azt törli az oldal gazdája :-)

Egy fecske nem csinál kolbászból kerítést

Maco13
#10463
Hali!

Használd az in_array() függvényt, ami tud tömbben keresni, és true-val tér vissza, ha talált egyezést.
A tesztelendõ szöveget leszûröd szavakra (split), majd szavanként nézed hogy benne van-e a tiltott tömbben.
#10462
Igen, ismerem 😊
De tényleg, rajta múlik, hogy hogyan oldja meg, kis millió megoldás létezik, úgy is csinálhatja ahogy mondod. Az biztos, hogy el kell terveznie, hogy a közeljövõben, hogy fog kinézni az oldal szerkezete különben csak sok(kk) munkát csinál magának így mindjárt az elején.

Terensz
#10461
Srácok, olyanom lenne: egy script, ami egy szövegrõl eldönti, hogy van-e benne tiltott szövegrész. Konkrétan regisztrációnál usernév-ellenõrzéshez használom. Annyi a baja, hogy mindig csak a legutolsó rondának vélt szót fogja elemezni.

Itt az anyag:

<?php

function tiltottSzoveg( $text )
{
$tiltottSzavak = array("teszt","admin","szar");

$talalat = 0;
for($i=0; $i<count($tiltottSzavak); $i++)
{
if( eregi($tiltottSzavak<$i> , strtolower( $text ) ) )
{
$kezdoChar = strrpos( $text , $tiltottSzavak<$i> );

if( megsemTiltottSzoveg( $text , $kezdoChar ) == false )
{
$talalat++;
}
}
}

if( $talalat == 0 ) { return true; } else { return false; }
}

function megsemTiltottSzoveg( $text , $kezdoCharTiltott )
{
$nemtiltottSzavak = array("szarka","pöcsételõ");

$talalat = 0;
for($i=0; $i<count( $nemtiltottSzavak ); $i++)
{
if( eregi($nemtiltottSzavak<$i> , strtolower( $text ) ) )
{
$kezdoCharNemtiltott = strrpos( $text , $nemtiltottSzavak<$i> );

if( $kezdoCharTiltott == $kezdoCharNemtiltott )
{
$talalat++;
}
}
}

if( $talalat == 0) { return false; } else { return true; }
}

$text = "szardarab szarkakupac";

if(!tiltottSzoveg($text) == false)
{
echo 'Tiltott szöveg, vagy szövegrész';
}

?>

A legnagyobb bajom vele, hogy az strrpos() függvény csak egy értékkel tér vissza, és az az utolsó találat a feltételére.
Olyan függvény kéne, ami mondjuk hasonlóan mûködik, mint az strrpos, csak pl. egy töNbbel tér vissza.

Egy fecske nem csinál kolbászból kerítést

Malakai
#10460
Vagy van a forcetype method is, ami dettó apache dolog regexnek megfelelõ fileokra bizonyos mime typeot erõszakol, így lehet php-ként futtatni pl kiterjesztés nélküli fileokat.

(\__/) ( X.x) ( } . { )

Máté12
#10459
Nem müködik

Logitech G25 tulajos!!

Máté12
#10458
Már bocs de ezzel amiben benne van ez a nyomorut..
setcookie("user", "", time()-3600);

Logitech G25 tulajos!!

MerlinW
#10456
Mert még mindig nem olvastad el az a nyomorult oldalt amit linkeltem neked...

How to Delete a Cookie?

When deleting a cookie you should assure that the expiration date is in the past.

Delete example:

<?php
// set the expiration date to one hour ago
setcookie("user", "", time()-3600);
?>


nyálazd már át...

[merlinw.org]

Máté12
#10455
Ez a kiléptetö miért nem mûködik?:
<?php
include ("config.php");

setcookie("username", "", 1);
header ("Location: http://oldalam.hu");

?>

Logitech G25 tulajos!!

Máté12
#10454
Kösz mostmár jó. Egyébként a if(empty($_POST)){-al keztem az egész oldalt:
<?php
include ("config.php");
$conn = conn();

$query_tiltas = mysql_query ("SELECT tiltott FROM login WHERE ip=\"$_SERVER\" AND tiltott = '1'");
if (mysql_num_rows($query_tiltas) == '1'){
if(empty($_POST)){
echo '
<html>
<head>
<title>Üzenõfal</title>
</head>
<body>';
$query = mysql_query("SELECT * FROM shoutbox ORDER by id DESC");
while($a=mysql_fetch_assoc($query)){
echo '
Név: '.$a<'username'>.'<br>Dátum: '.$a<'date'>.'<br>Üzenet: '.$a<'message'>.'<br><br>';
}
echo '
<hr>
<form method="post">
Név: <input type="text" name="username"><br>
Üzenet: <input type="text" name="message">
<br>
<input type="submit" value="Küldés">
</form>
</body>
</html>';
}else{
if($_POST<'username'> !== "" && $_POST<'message'> !== ""){
mysql_query("INSERT IGNORE INTO shoutbox (name, message, date) VALUES ('".$_POST<'name'>."', '".$_POST<'message'>."', NOW() ) ");
header("Location: ".$_SERVER<'PHP_SELF'>);
}
}
}
else{
echo ' Levagy tiltva';
}
?>

Logitech G25 tulajos!!

MerlinW
#10453
Minek írom le, ha átírod hülyeségekre?😊

1. Miután nem indexeled a táblát, nem ellenõrzöd, egy ip többször is szerepelhet benne.
Tehát a num_rows nem == hanem > 0.

2. Username mellett az IP-t is kellene kérdezned a lekérdezés feltételében. Úgy ahogy írtam a példában... Mert ugye a visszaadott sorok számát nézzük, nem a mezõk tartalmát (fetch).

3. if(empty($_POST)){ sor nem tudom mire szolgál, de valószínûleg értelmetlen.

4. Az egész kódot tedd le a <body>-ba.

5. Adj Doctype-ot az oldalnak <html> fölé:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

[merlinw.org]

Máté12
#10452
ÁÁ még se jó 😊
Minden esetben Tiltást ír mikor a mezö értéke 0:

$query_tiltas = mysql_query("SELECT tiltott FROM login WHERE username='".$_COOKIE<'username'>."'");
if (mysql_num_rows($query_tiltas) == '1'){
echo ' Le vagy tiltva az üzenöfalrol ';
}
else{
if(empty($_POST)){
echo '
<html>
<head>
<title>Üzenõfal</title>
</head>
<body>';
...

Logitech G25 tulajos!!

MerlinW
#10451
Abban nincs hiba, viszont a query-d nincs lezárva egy " hiányzik a végérõl (nem viccbõl szoktam külön változóba pakolni a kérdést) illetve nem FORM hanem FROM.

[merlinw.org]

Máté12
#10450
Na már sikerült, kösz!!!

Logitech G25 tulajos!!

passatgt
#10449
Üdv!
Van egy url-em:
valami.hu/valami.php?id=123

a 123 egy szöveg, pl Tankcsapda

Úgy szeretném megoldani, hogy a valami.hu/Tankcsapda url úgy viselkedjen, mint a valami.php?id=123

Ötlet?

Máté12
#10448
$query_tiltas = mysql_query("SELECT tiltott FORM login WHERE ip=\"$_SERVER\" AND tiltott=\"1\");

if (mysql_num_rows<$query_tiltas> > 0){
echo ' tiltva ';
}
else{
echo 'nincs tiltva';
}

És a 22. sorra hibát ir ki:
22. sorom: $query = mysql_query("SELECT * FROM shoutbox ORDER by id DESC");
Hiba: Parse error: parse error, unexpected T_STRING in /user/shoutbox.php on line 22

Logitech G25 tulajos!!

MerlinW
#10447
IP tiltásod majdnem kész. Azt mondtad már benne vannak az adatbázisban. Mellé dobsz egy "tiltva" mezõt ami mutatja tiltott-e (1) vagy sem (0). Utána megvizsgálod:

$query_tiltas="select tiltva-mezõ from tábla where ip=\"$_SERVER\" and tiltva-mezõ='1' ";
$tiltva = mysql_query($query_tiltas);

if ( mysql_num_rows<$tiltva> > 0 )
echo "tiltva";
else
echo "nincs tiltva";

[merlinw.org]

Máté12
#10446
De jobb lenne az IP-s tiltás :/

Logitech G25 tulajos!!

Máté12
#10445
Valahogy így?:
setcookie("ipcim", "192.168.1.1", time()+3600);

Logitech G25 tulajos!!

MerlinW
#10444
flag = jelzés = azaz bármi, amit vizsgálsz. 0 vagy 1, szöveg, akármi. cookie-ba lerakod a kliens gépre, a böngészõvel meg megnézeted benne van-e. Ha benne van, tiltva van a felhasználó. Ha nincs benne akkor szabad a pálya.

Az elõzõleg beszúrt link alapján meg tudod csinálni.

[merlinw.org]

Máté12
#10443
Ja és az IP felvitel sikerült az adatbázisba.

Logitech G25 tulajos!!

Máté12
#10442
Erre a flag-re tudnál példát mutatni?

Logitech G25 tulajos!!

MerlinW
#10441
IP címet ezzel kapod meg: $_SERVER<'REMOTE_ADDR'>;

Bedobálod bejelentkezéskor az adatbázisba, onnantól már csak egy ellenõrzés.
Mondjuk miután a fél országnak dinamikus az IP-je ez csak félmegoldás. Egyszerûbb magát az accountot zárolni (nem engeded bejelentkezni), illetve IP alapján tiltani a regisztrációt. Így újra kell regisztrálnia, ráadásul még IP-t is kell cserélnie. Ez a hülyék nagy részének már nem éri meg😊

Persze, ha Cookie-ba teszel egy flag-et, az laikusok ellen tuti megoldás, "öreg" motorosok számára csak egy gombnyomás a böngészõben a dolog kikerülése.
kuki gyorstalpaló

[merlinw.org]

Máté12
#10440
És az IP címet hogyan kérem be?

Logitech G25 tulajos!!

#10439
Így algoritmus szinten ha rákattol a küldésre, akkor egy változóba kikéri a küldõ ip címét, ha ez az ip cím egyezik a blokkolt ip címek közül valamelyikkel (file-ba sztem be lehet rakni, és egy tömbbe beolvasod), akkor kiírja h banolva vagy, else meg lefuttatja az insertet.

[ cod.magyaritasok.hu ] _____|\\_____\\o/___ Cápatámadás &#3232;_&#3232;

Máté12
#10438
Sziasztok!

Van egy adatbázis alapú üzenõfalam. Azt, hogyan(milyen kóddal) tudom megoldani ha valakit tiltani akarok az üzenöfalrol? Én IP címröl szeretném. Ezért a shoutbox táblámba van egy ip mezö is és ide gondoltam lementeni a küldö IP-jét. Ha nem megoldható akkor jó lenne az is, hogy csak a COOKIE-t tiltsam ki.

Hogy tudom megcsinálni?
Köszi elõre is a helpet!

Logitech G25 tulajos!!

MerlinW
#10437
Én hibám, copy-ztam a sorok végét és az insertnél is benne maradt😊

[merlinw.org]

MerlinW
#10436
Én hibám, copy-ztam, benne maradt😊

[merlinw.org]

Malakai
#10435
Persze, hogy ugyanaz, mindkettõ egy teljesen sima string.

Sima quotenál (') ha változót helyezel be nem érzékeli az értékét, extra escape karaktereket nem lehet használni, viszont érzékeli a sortörés, meg tab whitespacet is.
A dupla quote (") esetén a változók tartalmát helyezi el és extra escape charactereket is lehet használni (\n,\t, stb).

Kb ennyi a különbség a két lehetõség közt, mellesleg a manual is leírja szépen. 😊

(\__/) ( X.x) ( } . { )

Terensz
#10434
Mindkettõ jó.

Egy fecske nem csinál kolbászból kerítést

Terensz
#10433
Akkor zárom a találós kérdést:

php6 még gyerekcipõs, lehetõleg maradjatok az 5-ösnél.

...

Köszönöm szépen :-)

Egy fecske nem csinál kolbászból kerítést