ugrás a tartalomhoz

mysql-ből kiolvasás/módosítás kicsit bonyolultabban

DsA · 2007. Feb. 2. (P), 16.52
sziasztok!
lenne egy eléggé bonyolult kérdésem, remélem valaki azért majd tud segíteni!
ugy néz ki hogy van két ürlap
egyik: gar_darab
másik: gar_serial
és az a lényeg, hogy amit ezekbe az ürlap mezőkbe beírnak azt keresse meg adatbázisba és szedje ki belőle és anélkül írja vissza..
A darab mezőben a számok csak így simán vannak mint pl.: 1,2,3 stb..
A serial mezőben a serialok viszont így vannak: [123131][12312321]
és egy sorban lehet hogy csak egy serialvan pl: [asdasdas] de lehet hogy több:
[132312323][575675765]...
erre a következő programot írtam, ami valoszinü nem a legjobb de máshogy nem nagyon tudtam megoldani..

function kiszed($mibol,$mit)
{
	$hossz_mibol = strlen($mibol);
	$hossz_mit = strlen($mit);
	$kezdodik = strpos($mibol,$mit);
	$eleje = substr($mibol,0,$kezdodik);
	$vege = substr($mibol,$kezdodik+$hossz_mit,$hossz_mibol);
	return $eleje . $vege;
}

$lekerdez = $db->sql_query("SELECT * FROM `szamlak` WHERE `termek`='{$_SESSION['termek']}'");
// lekérdezzük az esedékes termékeket

for($i=0;$i<$db->sql_numrows($lekerdez);$i++) // ez a ciklus azért kell hogy bejárjuk az adatbázist
{
	$sor = $db->sql_fetchrow($lekerdez); // a tartalmát beletesszük a sor változóba


	preg_match_all("/([^\[\]]+)/", $sor['sorozat_elad'], $sn_db, PREG_SET_ORDER);
	preg_match_all("/([^\[\]]+)/", $_POST['gar_serial'], $sn_in, PREG_SET_ORDER);


	for($z=0;$z<count($sn_db);$z++) // ez a ciklus azért kell hogy bejárjuk a sorozat_elad oszlopot és minden egyes []-ban lévő cuccot egyesével listázunk ki
		{
			for($y=0;$z<count($sn_in);$y++) // ez a ciklus azért kell hogy bejárjuk a gar_serial ürlapot
				{
					if ($sn_db[$z][0] == $sn_in[$y][0]) // meg keressük a párjáaikat (ürlap vs database)
						{
							$vissza_ir = kiszed($sor['sorozat_elad'],"[".$sn_in[$y][0]."]"); // kivonjuk az eladott sn-t az adatbázisban lévőből
							$kivon = ($sor['darab_elad'] - 1); // az éppen aktuális sorban darab_elad oszlopbol is kivonunk egyet


							$db->sql_query("UPDATE `szamlak` SET `sorozat_elad` = '{$vissza_ir}' LIMIT 1"); // vissza írjuk a megmaradt sorozat számokat
							$db->sql_query("UPDATE `szamlak` SET `darab_elad` = '{$kivon}' LIMIT 1"); // vissza írjuk az egyel kevesebbb terméket
						}
					}
				}
			}
nost végeredményben a kód nem rossz, de ezt a hibát kapom:
Fatal error: Maximum execution time of 15 seconds exceeded....
vagy tölt 3 évig és nem csinál semmit
nemtudom mit kéne csinálni, remélem tudtok segíteni,
előre is köszönöm!
 
1

Végtelen ciklus

siposa · 2007. Feb. 2. (P), 17.04
for($y=0;$z<count($sn_in);$y++)
Elírtad a feltételt. $z helyett $y. Ez így végtelen ciklus.

Szerencsésebb lenne a lekérdezésen while ciklussal végigmenni:
while($sor = $db->sql_fetchrow($lekerdez)){ blablabla }
2

jajj

DsA · 2007. Feb. 2. (P), 18.05
jajj tényleg :S
bocsi az új témáért.... figyelmetlen voltam...
3

Mail

siposa · 2007. Feb. 7. (Sze), 23.35
Írtam emilt, megkaptad?
4

jaja

DsA · 2007. Feb. 8. (Cs), 18.15
jaja megkaptam, csak tegnap már északa nemvolt időm válaszolni és otthon nincs netem csak munkahelyen bocsi, de most válaszoltam!
köszi mégegyszer!