Jump to content
GSForum - Segélyvonal

PHP kérdésem van


Recommended Posts

Posted

Az AJAX azért nagyon király, mert aszinkron tud dolgozni. Ha szinkronban akarsz mûködni, akkor mindig meg kell várnod, míg válaszol a szerver és ez - fõleg ott, ahol használni szeretnéd - nagyon zavaró lehet, hiszen addig nem gépelsz második betût,ameddig az elsõ betû alapján a szerver ki nem választotta és vissza nem küldte azt a kétszáz lehetséges szót.

De ha aszinkron dolgozol, akkor külön figyelni kell, hogy melyik kérésre jött már válasz, melyikre nem.

Posted

Azt meg lehet tudni, hogy egy tömb értéke az-e, amivel összehasonlítom?

Épp arhívumot csinálnék, a legjobb ötletem az volt, hogyha a lekért dátum elsõ 4 száma már szerepel a tömbben, akkor nem adjuk hozzá, ha nem, akkor igen, majd annyiszor ismétlem az egyes éveket, ahány elem van a tömbben.

Ha ennél van jobb ötletetek, szívesen fogadom :)

Posted

Megpróbálom értelmezni:

 

egy tömb értéke az-e, amivel összehasonlítom

Erre való az if utasítás. ;)

 

if (tömb értéke == amivel összehasonlítom) {
    az-e
} else {
    nem az-e
}

Innentől kicsit elvesztettem a fonalat. Azt értem, hogy van egy tömb meg egy évszám, és hogy benne van-e, de hogy van benne? Értékként? Kulcsként?

 

Ha értékként, akkor in_array, ha kulcsként, akkor vagy array_key_exists vagy isset($tomb[$kulcs]).

Posted

Eléggé furcsa jelenség szemtanúja voltam.

Van az oldal, amit most készítek: http://kleni.weboldala.net/index.php?o=blog

Épp a hozzászólás enedélyezését csinálgattam.

ha kiválasztom a radiogomgot, akkor 1 vagy 0 lesz az uzi oszlop tartalma.

Az első 9 bejegyzésnél ki volt választva az engedélyezés, ezért 1 lett a sor uzi cellája.

a 10, és 12. bejegyzésnél leárt, így ugye 0.

Amikor elküldtem a 10. bejegyzést, nem jelenítette meg, hogy Szólj hozzá!

Amikor elküldtem a 11. bejegyzést, megjelenítette a 10, és 11. bejegyzés mellett is hogy Szólj hozzá.

A 12. bejegyzés elküldésekor megint nem jelenítette meg.

Ha kitörlöm a 11, és 12. bejegyzést, a 10. mellett megint nem jeleníti meg a szöveget.

Na most akor hogy van, mi nem jó?

Az egész (később rövidített :D ) kiir(), ami létható az oldalon:

function kiir($sql, $kereses){
        $keres = mysql_query("SELECT blog.*,COUNT(blog_uzenetek.bid) as uzivan FROM blog LEFT JOIN blog_uzenetek ON (blog.id=blog_uzenetek.bid) ".$vazlat." GROUP BY blog_uzenetek.bid,blog.id ORDER BY blog.id DESC LIMIT ".(($lap*10)-10).",10"); 
    while($sor = mysql_fetch_array($keres)){
    echo "uzivan: ".$sor['uzivan']."; uzi: ".$sor["uzi"];
        if ($sor["uzivan"] == 0){
            if ($sor["uzi"] == 1){
                $uzenetek = " | <a href=\"index.php?o=blog&b=b&id=".$sor['id']."#iras\">Szólj hozzá!</a>";}}
        else{
            $uzi = $sor["uzivan"];
            $uzenetek = " | <a href=\"index.php?o=$_GET[o]&b=b&id=".$sor['id']."#iras\">".$uzi." hozzászólás</a>";}

 

edit: Most hogy tettem hozzá egy else-t így jó lett, de még mindig nem értem miért van, hisz csak akkor lesz Szólj hozzá, ha egyezik a két érték, és akkor ugye nem egyezik

Kitti: most a módosítás nem jó, hasonló a hiba, és ezt sem értjük, főleg, hogy itt mindennek adtam else ágat. Szóval, ha egy bejegyzésnél, aminek nem volt cimke adva, adok egyet, akkor mindegyik mindegyiknek ad. a $id nem lehet a hibás, mivel módosításnál ugyanebből a válozóból nyerem ki az id-t, és az alapján jelenítem meg az űrlapon a szövegeket.

            $cimkek = "";
            $sql = mysql_query("SELECT * FROM blog_cimke");
            while ($cimke2 = mysql_fetch_array($sql)){
                $szam = $cimke2['id'];
                if (!empty($_POST["cimke$szam"])){
                    if ($elsocimke){
                        $cimkek.="|".$_POST["cimke$szam"];    }
                    else{
                        $cimkek = $_POST["cimke$szam"];
                        $elsocimke = 1;    }}
                else{
                    $cimkek = "";}
            $cimkek = mysql_real_escape_string($cimkek);
            mysql_query("UPDATE blog SET cim='".$cim."', szoveg='".$szoveg."', datum='".$datum."', vazlat='".$vazlat."', uzi='".$uzi."', cimke='".$cimkek."' WHERE id='".$id."'");

  • 2 weeks later...
Posted

Látja valaki ebben ennek a hibának az okát?

Parse error: syntax error, unexpected '}' in C:\WEBDEV\websites\phm\ubf.php on line 46

 

<?php
if(isset($_SESSION['nev']))
{
    function tisztit($cEredeti)
  {
    $cKeszlet="aábcdeéfghiíjklmnoóöõpqrstuúüûvwxyz0123456789";
    $cEredeti=mb_strtolower($cEredeti,"UTF-8");
    $nMax=strlen($cEredeti);
    $cMasolat="";
    for($i=0;$i<$nMax;$i++)
    {
      $cElem=substr($cEredeti,$i,1);    
      if(stristr($cKeszlet,$cElem)<>"")
      {
        $cMasolat.=$cElem;
      }
    }
    
    $e=Array("ö","ü","ó","õ","ú","é","á","û","í"," ");
    $em=Array("o","u","o","o","u","e","a","u","i","_");
     
    return str_replace($e,$em,$cMasolat);
  }

  include("connection.php");
  
  if($_FILES['pirosfajl']['error'] > 0)
  {
    echo $_FILES['pirosfajl']['name'];
    $file = fopen($_FILES['pirosfajl']['name'],'r');
    while(!feof($file))
    {
      $sor = trim(fgets($file));
      $piros = 1;
      $id = -1;
      $v = mysql_query("SELECT * FROM lista WHERE nev=TRIM('$sor') and state='1'");
      if(mysql_num_rows($v) == 1)
      {
        while($o = mysql_fetch_assoc($v))
        {
          $piros += $o['piros'];
          $id = $o['id'];
        }
        mysql_query("UPDATE lista SET piros='$piros', up=now() WHERE id='$id' and state='1'");
      }
      else
      {
        $url = tisztit($sor);
        mysql_query("INSERT INTO lista (nev, piros, fekete, up, url) VALUES (TRIM('$name'), '$piros', 0, now(), '$url')");
      }
    }
  }
}
?>

Posted

Ebben így nem. Mi a helyzet a behúzott phpval?

Posted

Az több helyen van használva, rendben van.

Posted
while($o = mysql_fetch_assoc($v))

==

Posted

A fenti hibán már túljutottam (user error), most a fájllal van problémája, de talán megoldom. :)

Posted
==

ÕÕ, ezt most mire alapozod? Nem összehasonlítja a két elemet..

Pjort, végülis hogy oldottad meg?

Posted

Például hogy egy ciklusfeltételbe logikai változó vagy olyan függvény kell, aminek a visszatérési értéke logikai? :D Bár vannak olyan elfuserált nyelvek, amik értékadásnál ilyen esetben automatikusan igazzal térnek vissza, ezzel szép hibákat lehet gyártani. Ettől persze még lehet, hogy az ott értékadás akar lenni, mivel a $o változó nincs előtte deklarálva, de kiindulásnak nem rossz. Az ember ilyet nem nagyon csinál, hacsak nem tudja pontosan, hogy mit akar. Közben utánanéztem, és ez nem hiba, és valószínűleg azt is csinálja, amit szeretne.

Posted

Az a helyzet, hogy 3 géppel dolgozok egyszerre, és már este van.

Posted

Értem. :D Amúgy ha tudod, hogy az eredményed egy soros, akkor miért ciklussal olvasol?

Posted

Mert több sor van? :D

 

Egyébként van a kódban hiba (nem emiatt nem ment), $name helyett $sor kell.

Posted

if(mysql_num_rows($v) == 1)
{
    while($o = mysql_fetch_assoc($v))
    {
      $piros += $o['piros'];
      $id = $o['id'];
    }
    mysql_query("UPDATE lista SET piros='$piros', up=now() WHERE id='$id' and state='1'");
}

Egy sorod van. :)

Posted
Például hogy egy ciklusfeltételbe logikai változó vagy olyan függvény kell, aminek a visszatérési értéke logikai? :D

Hát lehet, én a while-t még csak mysqlbõl kinyerst sorok ismétlésére használtam, ott meg még csak az = -t használtam. Na nem baj, még nem késõ megismerni :D

Posted

Ja, hogy ott. Én még a fájlnál tartok. Azért használok ciklust, mert copy-paste használom a meglévő kódokat, ez meg már megvolt máshol.

 

Még az is kimaradt, hogy az ['error']-nál rossz relációs jel van, plusz fájlolvasásnál a ['tmp_name']-t kellett használni.

Posted

Ha nem holnapra kell, szerintem aludj rá egyet. Csak szétbarmolod azt is, ami jó. Hidd el, tapasztalat.

Posted

Már mûködik, amit szerettem volna. :)

---

Valamerre kérdeztem karakterkódolással kapcsolatban (nem volt 100-as az UTF-8).

Megoldás a következõ lett (nem, nem latin2, muhahaha). :D Van egy connection.php állományom, amiben benne vannak az adatbázis-kapcsolathoz szükséges dolgok, ebbe kellett beírnom a következõt:

mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");

Innentõl mindenhol jól jelennek meg a karakterek (adatbázisban utf8_general_ci).

  • 2 weeks later...
Posted

Valaki érti, az alábbi kódban miért nem megy a csere?

function cimkekiir($mit, $cimke3)
{
    $sq2 = mysql_query("SELECT * FROM blog_cimke"); 
    while ($keres2 = mysql_fetch_assoc($sq2)) {
        $cid = $keres2["id"]; 
        $cimke2[$cid] = $keres2["nev"]; }
        $cimke = "";
        if (!empty($cimke3)) {
            $cimkeek = explode("-", $cimke3);
            foreach ($cimkeek as $szam) {
                $cimke_nev = $cimke2[$szam];
                $cimke_link = "index.php?o=c&id=".$szam;
                $szoveg = preg_replace("/4/iU", "55", $mit);
                $cimke.= $szoveg." ".$cimke_nev." ".$cimke_link."<br /><br />".$mit."<br />"; }
            $cimkek = " |".$cimke; }
        else {
            $cimkek = ""; }
    return $cimkek;
}

 

Ha $mit-et átírom "4dfgkjgklfjdgkdfjg"-re, akkor megy, kicseréli a 4-et 55-re. A $mit-ben viszont bennevan szintén a 4, ezt a kiírás is mutatja. Kiírásnak ezt kapom:

 

[cimkenev]4

[cimkenev]4 címke1 index.php?o=c&id=4

Ebben kéne cserélni:

<a href="[cimkelink]">[cimkenev]4</a>

Posted

Nem tudtok valami olyan függvényt, ami nem az include, de beágyaz egy fájt, és megadhatom úgy, hogy $valami = függvény(fájl.txt)?

A file_get_contents nem jó, mert abban nem fut le a php kód :(

Vagy ha valakinek van ötlete, másképp hogy oldajm meg, itt a kód:

    function menukiir() {
        global $skinmappa;
        if (file_exists($skinmappa."menumodul.php")) { $kiir = file_get_contents($skinmappa."menumodul.php"); }
        else { $kiir = "hiba"; }
        $sql = mysql_query("SELECT * FROM blog_modul WHERE aktiv='1' AND menu='2'");
        while($modul = mysql_fetch_array($sql)) {
            $tartalom = file_get_contents("modul/".$modul['mappa']."/".$modul['fajl']);
            $kiir = preg_replace("/\<modul:nev>/iU", $modul['nev'], $kiir);
            $kiir = preg_replace("/\<modul:mappa>/iU", $modul['mappa'], $kiir);
            $kiir = preg_replace("/\<modul:tartalom>/iU", $tartalom, $kiir);
            $kiirr.= $kiir;
        }
        return $kiirr;
    }

Posted

Kaptam egy ilyen hibaüzenetet:

Warning: Cannot modify header information - headers already sent by (output started at /var/www/weboldala.net/kleni/www/index.php:681) in /var/www/weboldala.net/kleni/www/index.php on line 36

 

Nade a 681. sorban semmi nincs, ami meghívná a vissza() függvényt, ami visszairányítana az avatar feltöltése után...

Ez van benne:

<br />";

Az avatar feltöltése után ez irányítana vissza (881 sor):

vissza("index.php?o=beallitas");

Na most, eddig tökéletesen mûködött, nem egyszer simán feltöltötte hiba nélkül. Azóta ahhoz a részhez nem nyúltam. És fõleg nem értem, miért van, mivel az egész kód alapból a head betöltése elõtt van, és máshol tökéletesen mûködik a visszairányítás, és a kód is ugyan az.

Posted

Hát, ha kiírsz valamit a "képernyõre", akár csak egy

-t, akkor már nem irányítgathatsz sehova.

Posted

Hmm, ez igaz. A kiírás elé tettem mindenhol a feldolgozást, így megy is. Köszi :)

 

Viszont, elkezdtem csinálni a lapozást.

Tök jól ment, kis kísérletezés után.

Az egyetlen gond csak az, hogy egy szóköz akaratom ellenére megjelenik.

a kicserélõ kód:

    $y = 0;
    for ($x = 1; $x <= $lapok; $x++) {
        if ( file_exists($skinmappa."lapozas.php")) { $lap = file_get_contents($skinmappa."lapozas.php"); }
        else { $lap = "<p>A ".$skinmappa."lapozas.php fájl nem található!</p>"; }
        if (!isset($_GET["l"]) and $y == 0) { $xx = 1; }
        else { $xx = 0; }
        $lap = preg_replace("/\<lapozas:link>/iU", "index.php?o=fooldal".$link."&l=".$x, $lap);
        $lap = preg_replace("/\<lapozas:szam>/iU", $x, $lap);
        if ($x == $_GET["l"] or $xx == 1) {
            $lap = preg_replace("/\<lapozas:aktiv>(.*)<\/lapozas:aktiv>/iU", "\\1", $lap);
            $lap = preg_replace("/\<lapozas:inaktiv>(.*)<\/lapozas:inaktiv>/iU", NULL, $lap);
            if (!empty($lap) and $lap != "" and $lap !== "" and $lap != NULL and $lap !== NULL and $lap != " " and $lap !== " ") {
                $tomb[] = $lap; } } else {
            $lap = preg_replace("/\<lapozas:inaktiv>(.*)<\/lapozas:inaktiv>/iU", "\\1", $lap);
            $lap = preg_replace("/\<lapozas:aktiv>(.*)<\/lapozas:aktiv>/iU", NULL, $lap);
            if (!empty($lap) and $lap != "" and $lap !== "" and $lap != NULL and $lap !== NULL and $lap != " " and $lap !== " ") {
                $tomb[] = $lap; } }  $y++; }
    if(!empty($tomb) and !empty($tomb[1])) {
        echo "<p>".trim(implode("",$tomb))."</p>"; }

A kicserélendõ kód:

<lapozas:aktiv><lapozas:szam></lapozas:aktiv>
<lapozas:inaktiv><a href="<lapozas:link>"><lapozas:szam></a></lapozas:inaktiv>

Az oldal forrása (amit látok):

<p>1

<a href="index.php?o=fooldal&l=2">2</a>
<a href="index.php?o=fooldal&l=3">3</a></p>

A firebugban látottak:

http://kleni.weboldala.net/bug.PNG

 

Valakinek tippje, mitõl vannak ott a szóközök?

Posted

"Apró" tipp:

Ne használj preg_replace-t, str_replace gyorsabb, biztonságosabb.

 

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...