22786
Html-, css- és php-help
  • phoenix1
    #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.
  • 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.
  • Máté12
    #10459
    Nem müködik
  • Máté12
    #10458
    Már bocs de ezzel amiben benne van ez a nyomorut..
    setcookie("user", "", time()-3600);
  • phoenix1
    #10457
    Hi.


    vagy google találatok a mod_rewrite-hoz
  • 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...
  • 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");

    ?>
  • 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[REMOTE_ADDR]\" 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';
    }
    ?>
  • 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">
  • 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>';
    ...
  • 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.
  • Máté12
    #10450
    Na már sikerült, kösz!!!
  • 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[REMOTE_ADDR]\" 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
  • 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[REMOTE_ADDR]\" and tiltva-mező='1' ";
    $tiltva = mysql_query($query_tiltas);

    if ( mysql_num_rows[$tiltva] > 0 )
    echo "tiltva";
    else
    echo "nincs tiltva";
  • Máté12
    #10446
    De jobb lenne az IP-s tiltás :/
  • Máté12
    #10445
    Valahogy így?:
    setcookie("ipcim", "192.168.1.1", time()+3600);
  • 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.
  • Máté12
    #10443
    Ja és az IP felvitel sikerült az adatbázisba.
  • Máté12
    #10442
    Erre a flag-re tudnál példát mutatni?
  • 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ó
  • Máté12
    #10440
    És az IP címet hogyan kérem be?
  • Cat 02 #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.
  • 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!
  • MerlinW
    #10437
    Én hibám, copy-ztam a sorok végét és az insertnél is benne maradt:)
  • MerlinW
    #10436
    Én hibám, copy-ztam, benne maradt:)
  • 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. :)
  • Terensz
    #10434
    Mindkettő jó.
  • 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 :-)
  • ba32107
    #10432
    És tömbindexelésnél? Mert nálam működött az is, hogy pl:
    $_SESSION["name"]

    és az is, hogy
    $_SESSION['name']
  • Terensz
    #10431
    Én maradok a klasszikus

    echo 'szöveg'.$a;
    és
    echo "szöveg".$a;
    verzióknál, hadd színezze ki a kódot a szerkesztő.

    De ennek a noQuotes dologhoz amúgy semmi köze.
  • Malakai
    #10430
    Működik ez... Nálam php 4.4.4 és 5.2.9-1 alatt is jó.
  • Cat 02 #10429
    print "$a"; kiírja az a értékét
    pintt '$a'; kiírja h $a
    egyik értelmezi, másik meg kiírja úgy ahogy van
  • Terensz
    #10428
    Csak echonál.

    ...

    Amúgy nem beszólni akarok és tényleg ne vedd sértésnek, de nagyon dühítő, amikor az ember beírja a google-be a gondját (pl.: noquotes ), és 30 hsz-en keresztül nyilvánvaló badarságokat olvas.

    1-2 napon belül "noquotes"-ra pl. ott lesz ez az oldal is a találatok között, bár lehet, hogy nem épp az elején.

    Nyilván nem a te bajod ez és nem az enyém, de az utókor hadd találjon már mielőbbi megoldást. Ezért légyszi olyanvalaki adjon megfejtést, aki ismeri a gondot és meg tudja oldani.
  • ba32107
    #10427
    Ha stringekkel dolgozol általában kell. Bár php-ben sosem értettem, hogy a ' és a " között mi a különbség (igaz, nem is dolgoztam sokat vele)

    Szóval mivel a stringet jelölő aprosztróf / idézőjel része a stringnek, ezért escape karakterrel kell ellátni. Szerintem.
  • Terensz
    #10426
    Nincs benne echo. Minek az escape karakter?
  • ba32107
    #10425
    Szerintem escape karaktereket kell használni
  • Terensz
    #10424
    Jaj, ez a rettenetes betűtípus :C

    Karakterenkénti kijelöléssel látszik a lényeg.
  • Terensz
    #10423
    Nagyon rosszul látszik

    Megpróbálom a két lényeges sort nagyítani:

    $text = str_replace( "'" , "" , $text );
    $text = str_replace( '"' , '' , $text );