(Anteeksi otsikon kirjoitusvirheet, näppikselle on kaatunut jotain tahmeaa.)
Teen sivuja, jotka käyttävät kolmea taulua tietokannasta. Tauluilla company (yrityksen yhteystiedot) ja users (kirjautumistiedot) on avaimena laskurityyppinen id, joka on sama molemmissa. Taulu Groups on välitaulu, jossa on kaksi saraketta, company_id ja group_id (tässä taulussa ei ole avainta). Company_id on se juokseva numero, joka tulee yritykselle ekaa kertaa kirjautuessa ja group_id on väliltä 1-12 (esim. 4=hengityksensuojaimet).
Kun yritys on syöttänyt lomakkeelle ensin haluamansa tunnukset ja yhteystietonsa ja ne on välitetty tauluihin company ja users yhtaikaisesti, hän pääsee seuraavalle lomakkeelle syöttämään yrityksen edustamat tuoteryhmät, joita on 12 erilaista. Tämä tapahtuu ruksaamalla valintaruuduista halutut ryhmät.
Kysymys kuuluu: kuinka valintaruuduista tallennetaan tieto tietokannan tauluun (niin että se sinne menee, olen yrittänyt jo kaikenlaista)?
Kuinka sijoitan seuraavan lomakkeeni toimivasti alla olevan rekisteröityminen.php:llä olevan lomakkeen tilalle? (tämä räpellys näytää monien kokeilujen jälkeen tältä eikä toimi, mutta ymmärtänette idean?) Tiedän ettei tuo virheitä täynnä oleva sökellys voi toimia, mutta se on nyt jäänyt tuollaiseksi (epätoivo iski). Olen kokeillut tallentaa checkbox-valintoja arrayksi, ja sitten viedä taulun sarakkeeseen, mutta ei onnannut
<h1>Edustamamme tuoteryhmät:</h1> <br/> <?php if($user){ $company_id = $user['id']; //sijoitetaan yläsivuun tallennetuista kirjautumistiedoista id //$company_id = $_POST["user['id']"];//ei kayteta, ei vality lomakkeelta $groups = $_POST["groups"]; // tiedot lomakkeelta } //if(isset($_POST['groups'])){ // tiedot lomakkeelta, tähänkö ne pitäisi laittaa? if (!isset($_POST['submit'])) { // if page is not submitted to itself echo the form $text = ""; if($text == ""){ //lisätään käyttäjän tunnus ja salasana foreach ($groups as $f) { $sql = mysql_query("INSERT INTO {$tbl_groups} (company_id,group_id) VALUES ('".$company_id."','".$groups."')",$lnk); } if(!$sql || mysql_affected_rows($lnk) < 1) $text = "SQL-lauseessa virhe.<br />\n"; else $text = "Tuoteryhmien tallennus onnistui<br />"; } echo $text; ?>
Tauluun groups tallennetaan siis company_id (josta tieto otetaan talteen muuttujaan kirjautumisen yhteydessä ja group_id tulee käyttäjän ruksaamista checkboxeista.
Seuraavalta näyttävät tähänastiset hommelini:
(Minulla on sivuille myös ylä- j alaosa, yläosaan otetaan talteen kirjautumistiedot, mutta niitä en nyt laita tähän)
tämä koodinpätkä on omana tiedostonaan (config.php):
<?php $db_user = "käyttäjä"; $db_passwd = "salasana"; $db_server = "localhost"; $db_db = "kannan_nimi"; $tbl_users = "users"; //käyttäjät-taulun nimi. $tbl_company = "company"; $tbl_groups = "groups"; ?> Ja tässä rekisteröitymislomakkeeni, joka toimii: (rekisteroityinen.php) //tässä vain tarvittava pätkä <h1>Rekisteröityminen</h1> <br/> <?php if(isset($_POST['reg_tunnus']) && isset($_POST['reg_salasana']) && isset($_POST['reg_varmistus'])){ $text = ""; //tiedot turvallisesti talteen $tunnus = get_magic_quotes_gpc() ? $_POST['reg_tunnus'] : mysql_real_escape_string($_POST['reg_tunnus']); $salasana = get_magic_quotes_gpc() ? $_POST['reg_salasana'] : mysql_real_escape_string($_POST['reg_salasana']); $varmistus = get_magic_quotes_gpc() ? $_POST['reg_varmistus'] : mysql_real_escape_string($_POST['reg_varmistus']); $name = get_magic_quotes_gpc() ? $_POST['reg_name'] : mysql_real_escape_string($_POST['reg_name']); $address = get_magic_quotes_gpc() ? $_POST['reg_address'] : mysql_real_escape_string($_POST['reg_address']); $zip = get_magic_quotes_gpc() ? $_POST['reg_zip'] : mysql_real_escape_string($_POST['reg_zip']); $city = get_magic_quotes_gpc() ? $_POST['reg_city'] : mysql_real_escape_string($_POST['reg_city']); $phone = get_magic_quotes_gpc() ? $_POST['reg_phone'] : mysql_real_escape_string($_POST['reg_phone']); $fax = get_magic_quotes_gpc() ? $_POST['reg_fax'] : mysql_real_escape_string($_POST['reg_fax']); $internet = get_magic_quotes_gpc() ? $_POST['reg_internet'] : mysql_real_escape_string($_POST['reg_internet']); $email = get_magic_quotes_gpc() ? $_POST['reg_email'] : mysql_real_escape_string($_POST['reg_email']); $support = get_magic_quotes_gpc() ? $_POST['reg_support'] : mysql_real_escape_string($_POST['reg_support']); //tarkastetaan onko nimimerkki varattu $sql = mysql_query("SELECT COUNT(*) AS yht FROM {$tbl_users} WHERE tunnus = '".$tunnus."'",$lnk); $sql = mysql_fetch_assoc($sql); $yht = $sql['yht']; if($yht != 0) $text .= "Tunnuksesi on jo rekisteröity, valitse uusi tunnus<br />\n"; if(strlen($tunnus) < 1)//minimipituus 1 merkki $text .= "Tunnuksesi on liian lyhyt. Tunnuksen minimipituus on 1 merkki<br />\n"; if(strlen($salasana) < 1)//minimipituus 1 merkki $text .= "Salasanasi on liian lyhyt. Salasanan minimipituus on 1 merkki, mutta tiedäthän, että mitä pidempi salasana, sen vaikeampi se on murtaa<br />\n"; //testataan täsmäävätkö salasanat if($salasana != $varmistus) $text .= "Salasanat eivät täsmänneet<br />\n"; if($text == ""){ //lisätään käyttäjän tunnus ja salasana $sql = mysql_query("INSERT INTO {$tbl_users} (tunnus,salasana) VALUES ('".$tunnus."','".md5($salasana)."')",$lnk); $sql = mysql_query("INSERT INTO {$tbl_company} (name,address,zip,city,phone,fax,internet,email,support) VALUES ('".$name."','".$address."','".$zip."','".$city."','".$phone. "','".$fax."','".$internet."','".$email."','".$support."')",$lnk); if(!$sql || mysql_affected_rows($lnk) < 1) $text = "SQL-lauseessa virhe.<br />\n"; else $text = "Rekisteröityminen onnistui<br />"; } echo $text; } ?> <form method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>"> <table width="380" border="0"> <tr> <td>Käyttäjätunnus:</td> <td><input name="reg_tunnus" type="text" size="40" maxlength="50" value="<?php echo isset($_POST['reg_tunnus']) ? $_POST['reg_tunnus'] : ""; ?>" /></td> </tr> <tr> <td>Salasana:</td> <td><input name="reg_salasana" type="password" size="40" maxlength="50" /></td> </tr> <tr> <td>Salasana toisto:</td> <td><input name="reg_varmistus" type="password" size="40" maxlength="50" /></td> </tr> <tr> <td>Yritys:</td> <td><input name="reg_name" type="text" size="40" maxlength="100" /></td> </tr> <tr> <td>Osoite:</td> <td><input name="reg_address" type="text" size="40" maxlength="100" /></td> </tr> <tr> <td>Postinumero:</td> <td><input name="reg_zip" type="text" size="40" maxlength="8" /></td> </tr> <tr> <td>Postitoimipaikka:</td> <td><input name="reg_city" type="text" size="40" maxlength="100" /></td> </tr> <tr> <td>Puhelin:</td> <td><input name="reg_phone" type="text" size="40" maxlength="20" /></td> </tr> <tr> <td>Fax:</td> <td><input name="reg_fax" type="text" size="40" maxlength="20" /></td> </tr> <tr> <td>Kotisivu:</td> <td><input name="reg_internet" type="text" size="40" maxlength="100" /></td> </tr> <tr> <td>Email:</td> <td><input name="reg_email" type="text" size="40" maxlength="50" /></td> </tr> <tr> <td><input name="reg_support" type="radio" value="0" checked>Jäsen</td><td><input name="reg_support" type="radio" value="1">Kannatusjäsen</td> </tr> <tr> <td colspan="2"><input type="submit" value="Rekisteröidy" /></td> </tr> </table> </form>
Mod. edit: kooditagit
Jos jokaiselle lomakkeen valintaruudulle antaa saman nimen, joka päättyy hakasulkuihin, sekä eri arvon, valintoja voi käsitellä PHP:ssä suoraan taulukkona. Koodisi näyttää muuten aika toimivalta (jos lomake on tehty äskeisellä tavalla), mutta foreach-silmukassa $groups tarkoittaa koko taulukkoa ja $f tarkoittaa yksittäistä arvoa. Eli kyselyyn kuuluu aina senhetkinen $f:n arvo. Lisäksi nykyisellään tarkistetaan vain, onnistuiko viimeinen kysely, mutta muiden tulokset jäävät pimentoon.
Tässä on yksinkertainen esimerkki (ryhmat.php), jonka testasin toimivaksi:
<?php if (isset($_POST['nappi'])) { if (isset($_POST['ryhmat'])) { foreach ($_POST['ryhmat'] as $ryhma) { // kysely olisi suunnilleen tällainen echo "INSERT INTO Ryhmat VALUES (123, $ryhma)<br>"; } } } ?> <form action="ryhmat.php" method="post"> <input type="checkbox" name="ryhmat[]" value="1">Ryhmä 1<br> <input type="checkbox" name="ryhmat[]" value="2">Ryhmä 2<br> <input type="checkbox" name="ryhmat[]" value="3">Ryhmä 3<br> <input type="checkbox" name="ryhmat[]" value="4">Ryhmä 4<br> <input type="checkbox" name="ryhmat[]" value="5">Ryhmä 5<br> <input type="submit" name="nappi" value="Lähetä"> </form>
Kiitokset avustasi, ryhdyn tässä hetimiten kokeilemaan antamallasi koodinpätkällä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.