Eli minulla on taulu, jossa sarakkeet company_id ja group_id. Ensimmäiseen tallentuu yrityksen yksilöivä tunnus, toiseen tuoteryhmätunnus. Jos sama yritys (company_id = 100) edustaa esim. hengityksensuojaimia (group_id = 4) ja putoamissuojaimia (group_id = 6), tallentuu tauluun kahdelle eri riville: 100 | 4,
100 | 6. Yritys valitsee edustamansa tuotteet ruksaamalla valintaruutuja (checkbox), ja jos esim kuulonsuojaimet (group_id = 2) ei ole valittuna, mitään ei tallenneta tauluun.
Minulla on nyt ongelmaa tämän jutun päivittämisessä.
Yritys jättää esim. pois hengityksensuojaimet ja ottaa tilalle kuulonsuojaimet.
Viimeisin ideani oli että ensin etsin taulusta kaikki rivit, joista löytyy kyseisen yrityksen company_id - ja poistan joka rivin. Sen jälkeen tallennat uudelleen valitut tiedot checkboxeista. Koodini on tämän näköistä :(lopputuloksena muutaman päivityskerran jälkeen: kaikki tuoteryhmät joita joskus klikattu on tallentunut valituiksi - eikä mitään ikinä poisteta): A.P.U.A.
<?php if($user){ $company_id = $user['id']; //Kysely tietokantaan $kysely = mysql_query("SELECT * FROM groups WHERE id like '$uid'", $lnk); //for-lause käy läpi kaikki rivit tietokannassa for ($tietue = 0; $tietue < mysql_num_rows($kysely); $tietue++) { mysql_query("DELETE FROM groups WHERE company_id like '$company_id' AND group_id like 'group1'",$lnk) or die (mysql_error()); } if(isset($_POST['button'])){ $text = ""; if($user){ $company_id = $user['id']; if($text == ""){ if(empty($_POST['group1'])){} else $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$_POST['group1']."')",$lnk); if(empty($_POST['group2'])){} else $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$_POST['group2']."')",$lnk); if(empty($_POST['group3'])){} else $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$_POST['group3']."')",$lnk); if(empty($_POST['group4'])){} else $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$_POST['group4']."')",$lnk); if(empty($_POST['group5'])){} else $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$_POST['group5']."')",$lnk); if(empty($_POST['group6'])){} else $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$_POST['group6']."')",$lnk); if(empty($_POST['group7'])){} else $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$_POST['group7']."')",$lnk); if(empty($_POST['group8'])){} else $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$_POST['group8']."')",$lnk); if(empty($_POST['group9'])){} else $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$_POST['group9']."')",$lnk); if(empty($_POST['group10'])){} else $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$_POST['group10']."')",$lnk); if(empty($_POST['group11'])){} else $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$_POST['group11']."')",$lnk); if(empty($_POST['group12'])){} else $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$_POST['group12']."')",$lnk); if(!$sql || mysql_affected_rows($lnk) < 1) echo "SQL-lauseessa virhe.<br />\n"; else echo "Tuotetietojen tallentaminen onnistui.<br />"; } } else echo "Kirjaudu ensin sisään!<br />"; } ?>
Mod. lisäsi kooditagit
Hmm... Toi on niin sekavaa, et menis loppuilta tota selvittäessä. Mutta missä kohtaa olet poistavinasi tiedot? Miksi haet ensin kaikki rivit (et edes käy niitä läpi :))? Eikö poisto menisi tuossa ihan DELETE FROM {$tbl_groups} WHERE company_id = $company_id
Lisäksi en usko, että missään tuolla haluat oikesti käyttää LIKE-hakumäärettä... Numeeristen kenttien kanssa ei käytetä hipsuja... if-else on vähän hassusti toteutettu... :)
Edit: niin ja hassusti käsittelet myös noita checkboxeja, niille kun antaa kaikille saman nimen (name="groups[]"), niin saat ne suoraan taulukkona PHP:lle ja käsittely onnistuu aika paljon nätimmin kun n-määrällä if-lauseita...
Kiitos vastauksestasi, nyt kun on pari päivää kulunut, näen jo itsekin paremmin virheeni.
Siitä on jo aikaa kun tein tota checkbox-hommelia, ja teinkin sen ensin taulukkona niin kuin ehdotit, mutta kun ne on sitten saatava tallennettua yksittaisille riveille, niin siinä tuli ongelmaa. Kai sekin on mahdollista, mutta ei vielä minulle.
Aihe on jo aika vanha, joten et voi enää vastata siihen.