Multiple select adatbázisba írása?
Sziasztok!
Adott egy oldal, ahol adatokat lehet felvinni, és van egy select amibe több dolgot is ki lehet jelölni. A selectbe azok szerepelnek, amik adatbázisba egy set-be meg lettek adva.
Hogy lehet azt megcsinálni, hogy egy változóba legyenek az elemek? Minden adatot egy sorba szeretnék, így a foreach nem jó.
Egy sor így néz ki: name, sports*, status
* ebbe kerülnének a selectből jövő adatok
Előre is köszönöm a segítséget!
Nehezen esett le, hogy php-ról van szó.
Nem tudom, hogy most a bevitel nem megy, vagy a kiíratás, de a foreach() miért is nem jó? Fv.-en belül simán összefűzöd az elemeket egy változóba, utána meg azt a változót kiíratod, vagy berakod adatbázisba.
foreach($_POST['select'] as $v)
$ki .= $v.",";
Ha nem akarod, hogy a legvégére is rakjon vesszőt, akkor meg csinálsz előtte egy ellenőrzést, hogy csak addig rakjon vesszőt, amíg nem ér el az utolsó elemhez.
Lehet, hogy félre értettem?
Tehát neked az kell, hogy az adatbázisban a rekord egyik mezője jelentse azt, hogy kiválasztott-e az X elemet, egy másik meg azt, hogy kiválasztotta-e az Y elemet?
Ebben mi a bonyolult?
itt a kód:
<?php
if(isset($_POST["submit"])) {
$name=$_POST["name"];
$sports=$_POST["sports"];
$status=$_POST["status"];
$sql="INSERT INTO `users` (name, sports, status) VALUES ('$name', '$sports', '$status')";
$query=mysqli_query($db, $sql);
}
?>
<form method="post">
<input type="text" id="name" name="name" placeholder="name" />
<br />
<select name="sports[]" size="3" multiple>
<option value="k1">k1</option>
<option value="box">box</option>
<option value="karate">karate</option>
<option value="judo">judo</option>
</select>
<br />
<input type="hidden" name="status" value="0" />
<input type="checkbox" id="status" name="status" />
<br /><br />
<input type="submit" id="submit" name="submit" value="" />
</form>
Azt szeretném elérni, hogy a $sports-ba a kiválasztott elemek úgy, hogy sql-be be tudjam illeszteni (mivel a mező set, így kb ilyen formába: 'k1', 'box').
1.) SQL-be így nem viszünk be adatot! prepared statement
2.) Gondold át az adatbázist és normalizáld!
3.) Ezen neked kell dolgozni. Illeszt be a nevet és a státuszt. Kérd vissza a létrehozott ID-t, majd azzal az ID-vel a segéd táblába (#1 hozzászólás) illeszd be a sportoknak megfelelő ID-s sorokat.
arra nem is gondoltam, amit az #5-be írsz Tengor, köszi :-)
így már majdnem jó is, már csak valahogy le kéne vágni az utolsóról a ,-t
$asd="";
foreach($sports as $key=>$value) {
//echo $value."<br />";
$asd.="'".$value."',";
}
echo $asd."<br />";
ebbe még tudnál segíteni, vagy van ennél jobb megoldás is (biztos van :D)?
végül a levágásra is találtam egy megoldást
echo mb_substr($asd, 0, -1);"<br />";
biztos, hogy nem ez a legjobb megoldás, de egyenlőre jó lesz...
az adatbázisba a sports SET típusú mező, így az abba felsoroltak vannak a kódba is, ezért kellett ez a megoldás
köszönöm szépen a segítséget és a tanácsokat!
"amit foreach-en belül használok, az azon kívül nem működik"
Ezt nem tudom hogy gondoltad, de amint te is látod, működik :D $asd benne van a foreach-ben, utána meg ki is tudod íratni, sőt új értéket is fűzhetsz hozzá.
Vessző eltávolításra egyébként ez az mb_substr() jó, de ahogy mindenre, úgy erre is van ezerféle megoldás.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!