SESSION tartalmának egyeztetése egy adatbázissal, csak mégsem jó
Leegyszerűsítve a probléma:
Adott egy adatbázis, amiben tárolunk képeket, egy sor egy kép formában, és a képeket hozzárendeljük egy másik elemhez, mondjuk egy íráshoz.
A felhasználó épp módosítja az írás képeit, tehát a listát, ami a db-ben van, frissíteni kell. NEvezzük a dbből jövő tömböt nem frankónak($array_kep). Ez mellet van egy olyan tömbünk($_SESSION['KEPEK'], ami meg a frankó elemeket tartalmazza.
Cél, hogy a dbben a művelet végén csak a frankó elemek legyenek, ha elötte nem volt, akkor beszúrni, ha elötte már volt, de nem kell már, akkor törölni a sort.
Ezzel a forráskóddal próbálkoztam:
A while elemig, illetve az array_searc() funkcióig jó, utána valamiért nem vagyok képes rájönni a megfelelő állításra az if-ben. Szeretném a segítségetek kérni, hogy szerintetek mi lehet a megfelelő rész a while()okon belül.
Üdv.:
Szilveszter
■ Adott egy adatbázis, amiben tárolunk képeket, egy sor egy kép formában, és a képeket hozzárendeljük egy másik elemhez, mondjuk egy íráshoz.
A felhasználó épp módosítja az írás képeit, tehát a listát, ami a db-ben van, frissíteni kell. NEvezzük a dbből jövő tömböt nem frankónak($array_kep). Ez mellet van egy olyan tömbünk($_SESSION['KEPEK'], ami meg a frankó elemeket tartalmazza.
Cél, hogy a dbben a művelet végén csak a frankó elemek legyenek, ha elötte nem volt, akkor beszúrni, ha elötte már volt, de nem kell már, akkor törölni a sort.
Ezzel a forráskóddal próbálkoztam:
$kepek_uj = $_SESSION['KEPEK'];
$kepek_uj_ = explode('#', $kepek_uj);
//megnezem, melyik kell, melyik nem az eredetiek kozul
//AZ ADATBAZISBAN LEVO SOROK LEKERESE --- KEPEK
$sql = "SELECT kep_link FROM db WHERE azonosito='".$_SESSION['azonosito']."' ORDER BY id ASC";
$query_kep = @mysql_query($sql, $connect_cpad);
if($query_kep != false)
{
echo('sikeres lekeres<br>');
$array_kep = mysql_fetch_array($query_kep);
}
//nemletezo beszurasa
echo('a db-ben vannak: '); print_r($array_kep); echo'<br>';
$i=1;
while($kepek_uj_[$i] != false)
{
echo('nem letezo beszurasa - '.$i.'<br>');
$kepek_maradni = array_search($kepek_uj_[$i], $array_kep);
if($kepek_maradni === null)
{
echo('ha kepek_maradni === null ez tortenik<br>');
//insert db
$sql_insert = "INSERT INTO db (cikk_id, kep_link) VALUES ('".$_SESSION['azonosito']."', '".$kepek_uj_[$i]."')";
$querty_insert = @mysql_query($sql_insert);
if($query_insert == false) echo('hiba az inserttben!<br>');
else echo('kep feltoltve db-be<br>');
}
else echo('ha kepek_maradni nem null, akkor tortenik ez.');
echo('<br>kepek_maradni: '.$kepek_maradni.' kep_sessionben: '.$kepek_uj_[$i].'<br><br>');
$i++;
}
//letezo de nem kell
$i=0;
echo'a sessionban vannak: '; print_r($kepek_uj_); echo('<br><br>');
while($array_kep[$i] != false)
{
$kepek_torolni = array_search($array_kep[$i], $kepek_uj_);
if($kepek_torolni === null)
{
//insert db
$sql_delete = "DELETE FROM db WHERE cikk_id='".$_SESSION['azonosito']."' AND kep_link='".$kepek_uj_[$i]."' LIMIT 1";
echo 'Ha nem talalok a session tombben a dbben levot, akkor ez torteink<br>';
$querty_delete = @mysql_query($sql_delete);
if($query_delete == false) echo('hiba a deleteben!<br>');
else echo('kep torolve db-be<br>');
}
else echo('kep talalok a session tombben a dbtomb $i-jenek megfelelot, akkor nem csinalok semmit.<br>');
echo('kepek_torolni: '.$kepek_torolni.' kep_sessionben: '.$array_kep[$i].'<br>');
$i++;
}
$kepek_uj_ = explode('#', $kepek_uj);
//megnezem, melyik kell, melyik nem az eredetiek kozul
//AZ ADATBAZISBAN LEVO SOROK LEKERESE --- KEPEK
$sql = "SELECT kep_link FROM db WHERE azonosito='".$_SESSION['azonosito']."' ORDER BY id ASC";
$query_kep = @mysql_query($sql, $connect_cpad);
if($query_kep != false)
{
echo('sikeres lekeres<br>');
$array_kep = mysql_fetch_array($query_kep);
}
//nemletezo beszurasa
echo('a db-ben vannak: '); print_r($array_kep); echo'<br>';
$i=1;
while($kepek_uj_[$i] != false)
{
echo('nem letezo beszurasa - '.$i.'<br>');
$kepek_maradni = array_search($kepek_uj_[$i], $array_kep);
if($kepek_maradni === null)
{
echo('ha kepek_maradni === null ez tortenik<br>');
//insert db
$sql_insert = "INSERT INTO db (cikk_id, kep_link) VALUES ('".$_SESSION['azonosito']."', '".$kepek_uj_[$i]."')";
$querty_insert = @mysql_query($sql_insert);
if($query_insert == false) echo('hiba az inserttben!<br>');
else echo('kep feltoltve db-be<br>');
}
else echo('ha kepek_maradni nem null, akkor tortenik ez.');
echo('<br>kepek_maradni: '.$kepek_maradni.' kep_sessionben: '.$kepek_uj_[$i].'<br><br>');
$i++;
}
//letezo de nem kell
$i=0;
echo'a sessionban vannak: '; print_r($kepek_uj_); echo('<br><br>');
while($array_kep[$i] != false)
{
$kepek_torolni = array_search($array_kep[$i], $kepek_uj_);
if($kepek_torolni === null)
{
//insert db
$sql_delete = "DELETE FROM db WHERE cikk_id='".$_SESSION['azonosito']."' AND kep_link='".$kepek_uj_[$i]."' LIMIT 1";
echo 'Ha nem talalok a session tombben a dbben levot, akkor ez torteink<br>';
$querty_delete = @mysql_query($sql_delete);
if($query_delete == false) echo('hiba a deleteben!<br>');
else echo('kep torolve db-be<br>');
}
else echo('kep talalok a session tombben a dbtomb $i-jenek megfelelot, akkor nem csinalok semmit.<br>');
echo('kepek_torolni: '.$kepek_torolni.' kep_sessionben: '.$array_kep[$i].'<br>');
$i++;
}
A while elemig, illetve az array_searc() funkcióig jó, utána valamiért nem vagyok képes rájönni a megfelelő állításra az if-ben. Szeretném a segítségetek kérni, hogy szerintetek mi lehet a megfelelő rész a while()okon belül.
Üdv.:
Szilveszter
B változat
$query_kep = @mysql_query($sql, $connect_cpad);
if($query_kep != false)
{
echo('sikeres lekeres<br>');
$array_kep = mysql_fetch_array($query_kep);
}
$kepek_uj = $_SESSION['KEPEK'];
$kepek_uj_ = explode('#', $kepek_uj);
$ujak = array_diff($kepek_uj_, $array_kep); // $kepek_uj_
$torlendok = array_diff($array_kep, $kepek_uj_);
print '<HR>adatbazisunk tartalma: ';
print_r($array_kep);
print '<HR>azok a cuccok amik kellenek (frankok): ';
print_r($kepek_uj_);
print '<HR>uj elemek: ';
for($i=1; $i<count($ujak); $i++)
{
$sql_insert = "INSERT INTO db (cikk_id, kep_link) VALUES ('".$_SESSION['cikkmodid']."', '".$ujak[$i]."')";
$querty_insert = @mysql_query($sql_insert);
if($query_insert == false) echo('hiba az inserttben!<br>');
else echo('kep feltoltve db-be<br>');
}
print_r($ujak);
print '<HR>torlendo elemek: ';
for($i=0; $i<count($torlendok); $i++)
{
$sql_delete = "DELETE FROM db WHERE cikk_id='".$_SESSION['cikkmodid']."' AND kep_link='".$torlendok[$i]."' LIMIT 1";
$querty_delete = @mysql_query($sql_delete);
if($query_delete == false) echo('hiba a deleteben!<br>');
else echo('kep torolve db-be<br>');
}
print_r($torlendok);
print '<HR>';
Mondanom sem kell, hogy ez sem tökéletes még :)
És a végső megoldás, a tuti:
$query_delete_all = @mysql_query($sql_delete_all);
if($query_delete_all == false) echo('volt valami gond a torlessel!<br>');
$kepek_uj = $_SESSION['KEPEK'];
$kepek_uj_ = explode('#', $kepek_uj);
for($i=1; $kepek_uj_[$i] != false; $i++)
{
$sql_insert_uj = "INSERT INTO db (cikk_id, kep_link) VALUES ('".$_SESSION['cikkmodid']."', '".$kepek_uj_[$i]."')";
$query_insert_uj = @mysql_query($sql_insert_uj, $connect_cpad);
if($query_insert_uj == false) echo('hiba az inserttel<br>');
else echo('a kep feltoltve: '.$kepek_uj_[$i].'<br>');
}