ugrás a tartalomhoz

katergória átnevezés, figyeli hogy van e már ilyen kategória, VAGY MÉGSE?

Anonymous · 2006. Okt. 30. (H), 02.08
sziasztok!

csináltam egy kategória szerkesztőt (főkategória+alkategória)
amikor felveszek egy új főkategóriát akkor figyelem hogy van e már ilyen:
function fokategoriaEllenorzes( $nev ) //ellenőrzi hogy létezik e a nev főkategória, ha nem akkor visszatér false
	{
	global $kapcsolat;
	$eredmeny = mysql_query( "SELECT nev FROM kategoriak
				WHERE nev='$nev'", $kapcsolat );
	if ( ! $eredmeny )
		die ( "domnameEllenorzes hiba: ".mysql_error() );
	if ( mysql_num_rows( $eredmeny ) )
		return mysql_fetch_array( $eredmeny );
	return false;
	}
eddig működik is szépen, nem engedi hogy két egyforma főkategória legyen.


na most, van egy átnevezés funckió minden fő és alkategória után, ez is müködik, de itt már nem veszi észre ha két egyforma főkategória van!
és azt se ha egy adott főkategóroán belül 2 azonos alkategória.
ellenőrőző kód:
function kategoriaEllenorzes( $nev, $id, $fokategoria ) //ellenőrzi hogy létezik e a nev kategória AZ ADOTT FŐKATBAN, vagy ha főkat akkor létezik e
	{
	if ($fokategoria=="i") //ha főkat
		{
		fokategoriaEllenorzes( $nev );
		}
	elseif ($fokategoria=="n") //ha alkat
		{
		$alkategoriak = alkategoriakLekeres( $id );
		if ( ! $alkategoriak )
			{
		
			}
		else
			{
			foreach ( $alkategoriak as $sor2 )
				{
				if ($sor2['nev']==$nev)
					{
					return true;
					}
				}
			}
		}
	return false;
	}
és a meghívás:
if ( ( $sor_tomb = kategoriaEllenorzes($nev, $id, $fokategoria) ) ) //ha létezik a nev nevű alkat AZ ADOTT FŐKATBAN, vagy már a főkat létezik 
				{
				header("Location: kategoria_atnevezes.php?a11=nem");
				}
			else //ha még nem létezik
				{
				$parancs = "UPDATE kategoriak SET nev='$nev' WHERE id = '$id'";
				mysql_query( $parancs, $kapcsolat )
					or die ( $uzenet1 .= "szerver hiba, próbálja újból<br>\n<br>\n" );
				header("Location: admin_belepett.php?oldal=a1&a11=ok");
							
				}
érdekes hogy 2 egyforma főkategóriát sem veszi észre, pedig az előbb az még működött!

azt veszem észre hogy a meghívásban az első feltétel utáni rész nem fut le valamiért.

előre is köszönöm a segítséget!
 
1

Nem használod fel a return értéket

Jano · 2006. Okt. 30. (H), 10.21

if ($fokategoria=="i") //ha főkat
        {
        fokategoriaEllenorzes( $nev );
        }
helyett legalabb:

if ($fokategoria=="i") //ha főkat
        {
        return fokategoriaEllenorzes( $nev );
        }
De ebben az esetben ha letezik, fokategoriaknal egy "sor tomb"-ot adsz vissza, mig alkategoriaknal csak egy true értéket.
2

nem akarja

Anonymous · 2006. Okt. 30. (H), 10.33
átírtam erre:
if ($fokategoria=="i") //ha főkat
        {
        return fokategoriaEllenorzes( $nev );
        }
de így se jó :(
3

talán

Anonymous · 2006. Okt. 30. (H), 10.40
szertintem az a gond hogy a meghívásban az if-es rész valamiért nem fut le.
ha én főkategóriát nevezek át akkor a fokategoriaEllenorzes -t hivja meg, de a fokategoriaEllenorzes funkció műküdik jól.
4

főkategória=ok

Anonymous · 2006. Okt. 30. (H), 20.11
a főkategóriáknál már jól müködik.
az alkategóriákat viszont továbbra sem ellenőrzi rendesen.
5

show

Anonymous · 2006. Okt. 30. (H), 23.50
elég sokat próbálkoztam az alkategóriás ellenőrzéssel de nem sikerült.

leírom elejétől a végéig: van egy kis progim, amivel lehet kreálni egy 2 szintű menüt (főmenü+almenü). azt szeretném, hogy egy főkategóriában ne legyen két egyforma almenü. viszont különböző főkategóriákban lehet (pl: főkategória1>alkatX,alkatY főkategória2>alkatX,alkatZ).

hogy könnyebb legyen megírteni itt a kategória táblám:
id nev főkategória hova_tartozik
1 főkat1 i
2 alkat1 n 1


na tehát, erre írtam egy ellenőrőző progit, ami úgy müködik, hogy:
1. lekéri az alkategória id-je szerint az alkategória hova_tartozik értékét
2. bepakolom egy tömbbe azoknak a kategóriák neveit aminek a hova_tartozik az előbb lekért érték
3. kiiratom a tömböt egyesével és közben figyelem hogy van e olyan érték ami az új alkategóriám neve lenne

kódok:

1.funkció
function kategoriaEllenorzes( $nev, $id, $fokategoria, $jelenlegi_kategoria_nev ) //ellenőrzi hogy létezik e a nev kategória AZ ADOTT FŐKATBAN, vagy ha főkat akkor létezik e
	{
	if ($jelenlegi_kategoria_nev == $nev) //ha ugyanarra a névre módosítottuk vagyis nem történt változtatás
		{
		return false;
		}
	else
		{
		if ($fokategoria=="i") //ha főkat
			{
			return fokategoriaEllenorzes( $nev );
			}
		elseif ($fokategoria=="n") //ha alkat
			{
			$alkategoriak = alkategoriakLekeresAlkatID( $id );
			foreach ( $alkategoriak as $sor )
				{
				if ($sor==$nev)
					{
					return true;
					}
				}
			}
		return false;
		}
	}
ehhez tartozó másik funck
function alkategoriakLekeresAlkatID( $id ) //lekéri az id számú ALkategóriához tartozó alkategóriák nevei
	{
	global $kapcsolat;

	$lekeres2 = "SELECT hova_tartozik FROM kategoriak WHERE id='$id'";
	$eredmeny2 = mysql_query( $lekeres2, $kapcsolat );
	if ( ! $eredmeny2 )
		die ( "AlkategóriaAlkatID 01 lekérés hiba: ".mysql_error() );
	$alkategoria_hova_tartozik = mysql_fetch_array( $eredmeny2 );
	
	$lekeres = "SELECT nev FROM kategoriak WHERE hova_tartozik='$alkategoria_hova_tartozik'";
	$eredmeny = mysql_query( $lekeres, $kapcsolat );
	if ( ! $eredmeny )
		die ( "AlkategóriaAlkatID 02 lekérés hiba: ".mysql_error() );

	$vissza  = array();
	while ( $sor = mysql_fetch_array( $eredmeny ) )
		array( $vissza, $sor );
	
	return $vissza;
	}
és az egész meghívása:
if ( isset($csinald) && ($csinald=="kategoria_atnevezes") && isset($nev) && isset($id) && isset($fokategoria) && isset($jelenlegi_kategoria_nev) )
	{
	if ( ( $sor_tomb = kategoriaEllenorzes($nev, $id, $fokategoria, $jelenlegi_kategoria_nev ) ) ) //ha létezik a nev nevű alkat AZ ADOTT FŐKATBAN, vagy már a főkat létezik 
		{
		header("Location: kategoria_atnevezes.php?id=$id&nev=$nev&a11=nem&jelenlegi_kategoria_nev=$jelenlegi_kategoria_nev");
		}
	else //ha még nem létezik
		{
		$parancs = "UPDATE kategoriak SET nev='$nev' WHERE id = '$id'";
		mysql_query( $parancs, $kapcsolat )
			or die ( $uzenet1 .= "szerver hiba, próbálja újból<br>\n<br>\n" );
		header("Location: admin_belepett.php?oldal=a1&a11=ok");			
		}
	}
valahol biztos elrontottam, mert simán tudok 2 egyforma alkategóriát létrehozni egy főkat-on belül.

kérdés hol!
6

MySQL UNIQUE?

Gáldi Ákos · 2006. Okt. 31. (K), 00.31
Ha már úgyis adatbázisban tárolod a kategóriákat, akkor mért nem használod ki annak lehetőségeit? Álltsd UNIQUE indexre az egyedi mezőket és nem fogsz azonos kategóriával találkozni. Hibakezelésnél meg egyszerűen visszakapod, hogy mi a szitu. Azt hiszem 1062 mysql error code

Üdv.
7

szerintem nem lehet úgy

Anonymous · 2006. Okt. 31. (K), 18.02
azért nem, mert én ugy szeretném hogy két különböző alkategóriában lehessen egyforma nev. és ha beállítom a nev oszlopot egyedinek akkor ezt nem fogja engedni.
8

pontosítás

Anonymous · 2006. Okt. 31. (K), 20.17
nah, már belezaverodtam, előző hsz igy lenne:
azért nem, mert én ugy szeretném hogy két különböző főkategóriában lehessen egyforma nev (alkategória). és ha beállítom a nev oszlopot egyedinek akkor ezt nem fogja engedni.
9

done

Anonymous · 2006. Nov. 1. (Sze), 00.55
megoldottam ugyhogy ne agyaljatok rajta!

csak újra át kellett gondolni az egészet, és nem is volt bonyolult, pár apró hiba volt csak.
10

Nem csak egy mező lehet...

Gáldi Ákos · 2006. Nov. 1. (Sze), 01.05
Azért van valami, ami egyértelműen azonosítja a rekordotat?! Ha pedig van, akkor azt összekapcsolhatod a kategória nevével mint egyedi azonosító, tehát ketten alkotnak egy UNIQUE indexet.
ALTER TABLE `kategoriak` ADD UNIQUE (`kat_id` ,`kategoria_nev`);
tehát az adott példában szerepelhet olyan is, hogy:
+--------+---------------+
| kat_id | kategoria_nev |
+--------+---------------+
|      1 | hangszer      |
|      2 | hangszer      |
+--------+---------------+
Remélem érthető voltam!
Üdv!
11

köszi

Anonymous · 2006. Nov. 1. (Sze), 01.11
értelek, és köszi szépen az info-t, de már megoldottam az én elképzeléssem is:)