Topic: Duomenys iš formos į duomenų bazę, per checkbox'us

Labas vakaras. Nesu visiškai žalias php'e ar mysql'e, tačiau yra problemų kurių nėjo išspręst :)
Taigi, idėja tokia: imu duomenis iš duomenų bazės, juos atvaizduoju formoje su checkbox'ais, ir jau trečiame žingsnyje sudeliojęs kur reikia, kur nereikia varneles, mygtuko pagalba noriu juos įrašyti į duomenų bazę.

Gyvenimiškas pavizdys: turiu studentų sąrašą, ir tik kai kuriuos norėčiau priskirti grupei. Iš 10 studentų tik 5 iš turi priklausyti "lietuviai" sąrašui. pvz :D

Pabandysiu paaiškinti kodu:
Imu duomenis ir kosntruoju forma:

    echo "<form method='post' id ='frm1' action='write.php'>";
        echo "<table id='studentai'>";
            echo "<tr>";
                echo "<th></th>";
                echo "<th>Vardas</th>";
                echo "<th>Pavarde</th>";
                echo "<th>Amzius</th>";
            echo "</tr>";
            while($eilute = mysql_fetch_array($select_studentai)) {
            echo "<tr>";
                echo "<td><input type='checkbox' name='data[]' value='".$eilute['id']."'/></td>";
                echo "<td>".$eilute['VARDAS']."</td>";
                echo "<td>".$eilute['PAVARDE']."</td>";
                echo "<td>".$eilute['AMZIUS']."</td>";
            echo "</tr>";
            }
        echo "</table>";
        echo "<input type='checkbox' name='checkall' onclick='checkUncheckAll(this);' style='margin:6px;'/>Pažymėti visus<br/><br/>";
        echo "<input type='submit' name='irasyti' value='talpinti sudentus'/>";
    echo "</form><br/><br/>";

$_POST['data'] gauna visų checkbox'ų value studentų ID, kaip man dabar tuos ID priskirti konkretiems studentams, ir butent tuos konkrečius studentus sudėti į kitą lentelę duomenų bazėje?

Arba duomenų bazėje turėdamas 'studentų' lentelę ir 'sąrašų' lentelę, tiesiog stuendo id sudelioti i atitinkamus sąrašus, sąrašų lentelėj. To irgi nemokėčiau padaryti. Turit minčių?

Re: Duomenys iš formos į duomenų bazę, per checkbox'us

Na tai tame $_POST['data'] pagal viską turėtų būti masyvas su pažymėtų studentų ID.

Tai tau paprastu atveju reikia kažkokioje grupe_studentai lentoje surašyt grupes_id, kuriai nori priskirti studentus, ir pažymėtų studentų id, tarkim:

grupes_id | studento_id
1               1
1               2
.....
2               1
2               2
2               3
...

Dabar ko tu konkrečiai nemoki, padaryti INSERT užklausos ar lentlės pasigaminti? Aišku čia slypi daugiau uždavinių, nes realiai grupes_id ir studento_id pora turi toje lentoje būti unikali, ir tavo funkcija iš tikro turi atlikti ne įterpimą, o redagavimą. Tavo atveju labiau tiktų panaudoti REPLACE komandą. Kažkur formoje tikriausiai taip pat turėtų būti grupių pasirinkimas - kad žinotum, kuriai grupei tuos studentus priskirti. O visa kita - technikos reikalas, tikrini duomenis, darai INSERT/REPLACE/UPDATE pagal poreikius, apdoroji klaidas.

p.s.: pasidomėk, kaip atskirti PHP kodą nuo HTML'o

Re: Duomenys iš formos į duomenų bazę, per checkbox'us

Ko tiksliai nemoku? Hm, visų pirmą nemoku patalpinti $_POST['data'] masyvo i sql duomenu baze, primityviai bandau daryti taip, ir tai yra ryškiai blogai:

$ids=$_POST['data'];
$query="INSERT INTO test (id, stulpas1, stulpas2, stulpas3) VALUES (NULL , '$ids', 'k', 'l')";
mysql_query($query,$con);

Na ir rezultate gaunu, kad stulpas1 įgauna reišmę: "Array". Viskas.

Ir visu antra, ar teisingai įsivaizduoju principą, jeigu pavyksta sužaisti su tais ID, tada:
visą tą POST['data'] ir per dropdown'ą padaręs visus grupių sąrašus, taip sujungčiau studentus į grupę.
kažkas tokio:

 //dropdown'as:
$grupe = mysql_query("SELECT * FROM grupe where");
    while($eilute = mysql_fetch_array($grupe)) {
echo "<option value='".$eilute['id']."'>".$eilute['pavadinimas_grupe'].", ".$eilute['sukurimo_data']." ".$eilute['stulpas3']."</option><br/>";
}
@$studentai = $_POST['data']; //studentų masyvas
@$grupe = $_POST['grupe']; //grupės id iš dropdown'o
$sql="INSERT INTOgrupes (studento_id, grupes) VALUES ('$studentai', '$grupe')"; //šaunam užklausą į duomenų bazę

P.s. dėl atskyrimo php nuo html'o, tai būtent lentelės paišymą įdėjau į "echo" tam, kad galėčiau pagal norus "įjungti ar išjungti" reikiamus stuleplius :)

Re: Duomenys iš formos į duomenų bazę, per checkbox'us

JuliusGr wrote:

Ko tiksliai nemoku? Hm, visų pirmą nemoku patalpinti $_POST['data'] masyvo i sql duomenu baze, primityviai bandau daryti taip, ir tai yra ryškiai blogai:

$ids=$_POST['data'];
$query="INSERT INTO test (id, stulpas1, stulpas2, stulpas3) VALUES (NULL , '$ids', 'k', 'l')";
mysql_query($query,$con);

Na ir rezultate gaunu, kad stulpas1 įgauna reišmę: "Array". Viskas.

Nu tai va, čia problema tame, kad netik $_POST yra masyvas, bet ir $_POST['data'] yra masyvas, ir turi dar savyje N elementų.

Pabandyk pasižiūrėti ką ten gauni:

print_r($_POST['data']);

Todėl tavo atveju, nesiplečiant į optimalius ir gudrius sprendimus, reikėtų daryti taip:

foreach($_POST['data'] AS $id){
    $query="INSERT INTO test (id, stulpas1, stulpas2, stulpas3) VALUES (NULL , " . mysql_real_escape_string($id) . ", 'k', 'l')";
    (...)
}

Kitaip sakant - cikle 5terpti visus pažymėtus elementus.

Tik nepamiršk, kaip jau rašiau ir anksčiau, kad turėtum pagalvot ką reikėtų daryti, kad nesigautų paskui, jog tie patys ID įterpiami po daugiau nei vieną kartą.

Re: Duomenys iš formos į duomenų bazę, per checkbox'us

JuliusGr wrote:

P.s. dėl atskyrimo php nuo html'o, tai būtent lentelės paišymą įdėjau į "echo" tam, kad galėčiau pagal norus "įjungti ar išjungti" reikiamus stuleplius :)

Na čia ne priežastis maišyti HTML ir PHP, nes galima ir tai padaryti. čia tau buvo tik draugiškas patarimas tavo pačio labui ilguoju periodu (-;

Re: Duomenys iš formos į duomenų bazę, per checkbox'us

Vau. Geras. Viskas suveike superiškai. Bet dabar dar pora problemų iškilo, bet jau čia pabaiga. :)
Pirmiausia, kai aš paišau lentelę iš duomenų bazės, aš checkbox'us kuriu gana "kreivai":

    echo "<form method='post' action='list.php'>";
        echo "<table id='studentai'>";
            echo "<tr>";
                echo "<th></th>";
                echo "<th>Vardas</th>";
                echo "<th>Pavarde</th>";
                echo "<th>Amzius</th>";
            while($eilute = mysql_fetch_array($bendra)){
            echo "<tr>";
                echo "<td><input type='checkbox' name='data[]' value='".$eilute['VARDAS']."\";\"".$eilute['PAVARDE']."\";\"".$eilute['AMZIUS']."'/></td>";
                echo "<td>".$eilute['VARDAS']."</td>";
                echo "<td>".$eilute['PAVARDE']."</td>";
                echo "<td>".$eilute['AMZIUS']."</td>";

Kuriu tokiu tikslu, kad būtent checkbox'ų value noriu įrašyti į CSV failą: "Vardas";"Varde";"20", na atitinkamai rezultate bus A1: Vardas; A2: Pavarde; A3: Amzius.

O problema ta, kad aš noriu  viską sujungti į vieną: kad galėčiau šitą sąrašą spausdinti į failą, arba (kitu mygtuku), sudėti jį į duomenų bazę (sąrašą).
Apibendrinant: taip sukuręs checkbox'us gaunu _POST['data'] arba stringus, arba, kur viršui padėjai išspręst, id, kuriuos rašau į duomenų bazę.

Re: Duomenys iš formos į duomenų bazę, per checkbox'us

JuliusGr wrote:

O problema ta, kad aš noriu  viską sujungti į vieną: kad galėčiau šitą sąrašą spausdinti į failą, arba (kitu mygtuku), sudėti jį į duomenų bazę (sąrašą).

Nelabai suprantu kame ta problema.

8 (edited by JuliusGr 2010-12-02 10:43:38)

Re: Duomenys iš formos į duomenų bazę, per checkbox'us

Nu žiek, turiu dabar kaip ir dvi formas,
vienoje, checkbox'ai:

echo "<td><input type='checkbox' name='data[]' value='"\".$eilute['VARDAS']."\";\"".$eilute['PAVARDE']."\";\"".$eilute['AMZIUS']."'/></td>";

kuriami tam, kad būtų rašomi į csv failą "";"";""; tokiu formatu, atitinkamai excelis tai sudeda į langelius

kitoje:

echo "<td><input type='checkbox' name='data[]' value='\"".$eilute['id']."\"'/></td>";

o taip kuriami tam, kad būtų studentai susieti duomenų bazėje su sąrašu.

šias dvi formas noriu padaryti į veiną. Su dviem mygtukais. Vienas mygtukas i csv failą rašo vardą, pavardę ir amžių, kitu mygtuku aš į duomenų bazę talpinų sutdentų id (priskiriu sąrašui).
Kaip reiketų apsirašyti patį checkbox'ą?

Nesugalvoju jokio sprendimo, nes galvoju taip: jeigu i value paduosiu id, vardą, pavardę ir amžių, tai priskirdamas į sąrašą, tai stulpas1 nebebus vien tik ID (bus ir vardas, ir pavardė, ir amžius įrašytas)
Alternatyviai, jeigu į value paduosiu tas pačias reikšmes, tai į csv failą įrašynės ne tik vardą, pavardę bet ir ID, ir be jokių kabučių ar kabliataškių...

It is so complicated... :)

Re: Duomenys iš formos į duomenų bazę, per checkbox'us

O nenori pasinaudoti jau egzistuojančiomis funkcijomis CSV formavimui? Nereiks tokių burtų kaip kabutės laukelyje... įvedus į google 'csv php.net' manau rasi ko ieškai.

MongoDB Certified Developer
MongoDB Certified DBA
Zend Certified Engineer

Re: Duomenys iš formos į duomenų bazę, per checkbox'us

Pirmiausia tau nereikia dviejų formų. Tau reikia vienos. Ta forma, "kur rašoma į DB" tegul lieka, o kodas, kuris rašo į DB (php scriptas) turi jau atsirinkti (tarkim pagal kažkokį papildomą control/imput) - ką daryti - ar rašyti/generuoti CSV ar rašyti duomenis į DB.

Tau nereikia formos tekstiniuose laukuose laikyti duomenis CSV formatu, tam, kad juos surašyti į CSV. Tu vietoje to, kad rašyt duomenis į DB gali atsidaryti tekstinį failą ir ten sudėti norimus duomenis (o jeigu reikia ir papildomus) CSV formatu.

Pseudo kodas:

<html>
...
<form ...
...
</form>
...
</html>

<?php
if($paspaustas_mygtukas_rasyti_i_db){
   ...
   while($_POST[...
      ...
      mysql_query(...
   ...
   }
}

if($paspaustas_mygtukas_generuoti_csv){
   fopen(...
   while($_POST[...){
      fputcvs(...
   }
   fclose(...
}
?>

Re: Duomenys iš formos į duomenų bazę, per checkbox'us

Sveiki. Ačiū žostkai už pagalba :) Viskas išėjo, kaip norėjau. Netgi dar geriau smegenyse susigulėjo kaip tas php'as su html'u dirba :).

Viena problema buvo iškilusi, kad į csv failą sumetus list'ą su lietuviškom raidėm, jį excelis atvaizduoja 'kringeliais'. Tai nutariau, kad tai pačio excelio klaida. Nes patikėkit, viską išbandžiau. utf8_encode (jokios naudos, nes gaunasi tas pats kas is utf8 encodinu į utf8), iconv ir dar kitas komandas, kurių nepamenu :).

Nusprendžiau, kad excelio klaida, nes pvz tą patį csv failą atidarius su notepad++/geany ji rodo gražiai, tačiau atidarant su exceliu, jį išdarko.

Galvojau problemos dar yra su BOM'u, tačiau jokio skirtumo nebuvo :)

Re: Duomenys iš formos į duomenų bazę, per checkbox'us

Importuojant į excel'į reikia pasirinkti tą koduotę, su kuria tu užsaugojai duomenis. Tas pats ir su OpenOffice'u.