tömb eleminek töltése form-ból
Sziasztok a problémám a következő:
Egy form-ot elküldök self php-ra POST-tal feldolgozni, mely tartalmaz egy legördülőmenüből választható esemény nevet (forrása SQLtábla), és egy rádiógombbal választható kimenetelt.
ugye értelemszerűen csak az utolsó bevitt esemény+kimenetel páros jelenik meg a táblázatban, mert minden SUBMIT-kor előről, a 0. elemről kezdi tömni a tömböket.
Kérdéseim:
1. Hogyan lehetne léptetni a tömb elemeit, hogy mikor tömöm eseménnyel akkor hízzon tovább?
2. Kiiratásban ha tudtok segíteni azt is megköszönném, mert ez így elég lama módszer (:
3. Ezt már érdemes 2dimenziós tömbben kezelni?
■ Egy form-ot elküldök self php-ra POST-tal feldolgozni, mely tartalmaz egy legördülőmenüből választható esemény nevet (forrása SQLtábla), és egy rádiógombbal választható kimenetelt.
<form action="<?echo $_SERVER['PHP_SELF']?>" method="POST">
<br><br><br>
<?php
//adatbázishoz csatlakozás
$connect = mysql_connect("*****","********","***") or die(mysql_error());
$db = mysql_select_db("tippvadasz", $connect);
//még érvényes események kiiratása
$result = mysql_query("SELECT meccslista FROM hategy WHERE ervenyesseg >= now()");
$output = '<select name="meccs">';
while($row = mysql_fetch_array($result))
{
$value = reset($row);
$output .= "n". '<option value="'. htmlspecialchars($value, ENT_QUOTES) .'">'. htmlspecialchars($value, ENT_QUOTES) .'</option>';
}
$output .= "n</select>";
print $output;
?>
//kimenetel kiválasztása
<br>
<strong>Kimenetel:</strong>
<br>
<input type="radio" name="tipp" value="H" checked>H
<input type="radio" name="tipp" value="D">D
<input type="radio" name="tipp" value="V">V
<br>
<input type="submit" value="Megtippelem">
</form>
<?php
//tömbbe rendezés
$a[] = $_POST['meccs'];
$b[] = $_POST['tipp'];
//kiiratás
print "<div align=center>";
print "<div id='wrapper'>";
print "<table cellpadding='0' cellspacing='0' border='0' class='sortable' id='sorter'>";
print "<th>Esemény</th><th>Tipped</th>";
print "<tr><td>$a[0]</td><td>$b[0]</td></tr>";
print "<tr><td>$a[1]</td><td>$b[1]</td></tr>";
print "</div></table></div>";
?>
<br><br><br>
<?php
//adatbázishoz csatlakozás
$connect = mysql_connect("*****","********","***") or die(mysql_error());
$db = mysql_select_db("tippvadasz", $connect);
//még érvényes események kiiratása
$result = mysql_query("SELECT meccslista FROM hategy WHERE ervenyesseg >= now()");
$output = '<select name="meccs">';
while($row = mysql_fetch_array($result))
{
$value = reset($row);
$output .= "n". '<option value="'. htmlspecialchars($value, ENT_QUOTES) .'">'. htmlspecialchars($value, ENT_QUOTES) .'</option>';
}
$output .= "n</select>";
print $output;
?>
//kimenetel kiválasztása
<br>
<strong>Kimenetel:</strong>
<br>
<input type="radio" name="tipp" value="H" checked>H
<input type="radio" name="tipp" value="D">D
<input type="radio" name="tipp" value="V">V
<br>
<input type="submit" value="Megtippelem">
</form>
<?php
//tömbbe rendezés
$a[] = $_POST['meccs'];
$b[] = $_POST['tipp'];
//kiiratás
print "<div align=center>";
print "<div id='wrapper'>";
print "<table cellpadding='0' cellspacing='0' border='0' class='sortable' id='sorter'>";
print "<th>Esemény</th><th>Tipped</th>";
print "<tr><td>$a[0]</td><td>$b[0]</td></tr>";
print "<tr><td>$a[1]</td><td>$b[1]</td></tr>";
print "</div></table></div>";
?>
ugye értelemszerűen csak az utolsó bevitt esemény+kimenetel páros jelenik meg a táblázatban, mert minden SUBMIT-kor előről, a 0. elemről kezdi tömni a tömböket.
Kérdéseim:
1. Hogyan lehetne léptetni a tömb elemeit, hogy mikor tömöm eseménnyel akkor hízzon tovább?
2. Kiiratásban ha tudtok segíteni azt is megköszönném, mert ez így elég lama módszer (:
3. Ezt már érdemes 2dimenziós tömbben kezelni?
Nem értelek
Egyáltalán a logika nem stimmel, hogy mit szeretnél csinálni.
nem sikerült pontosan leírni...
De ha le SUBMIT-olt egyet akkor lehessen egy másik eseményre és kimenetelre is tenni. Tehát itt lép be, hogy tömb legyen.
Egy kis háttérinfo:
Nevezzük a végeredményt szelvénynek, mely így épül fel:
1 esemény tipp
2 esemény tipp
...
n esemény tipp
ezt szereném egy tömbben tárolni és kitolni a képernyőre, majd ha a juzer úgy érzi mindent megtippelt amit szeretett volna akkor egy gombnyomással majd elküldi a tömb elemeket egy sql táblába, későbbi feldolgozásra.
2 dimenziós tömbben úgy gondolkodtam, hogy mondjuk:
hogy egy tömb maga a 'játék' és azon belül egyik tömb a 'meccs' a másik tömb a 'tipp' ?
Kiiratni természetesen a tömb elemeit akarom, amit a juzer kiválogatott és bevitt.
remélem így már érthető!
HTML tömbök
Persze nem kötelező html tömböket használni, ha okosan elnevezed és majd a php oldalon beazonosítod a megfelelő változópárokat (pl: meccs_1 - tipp_1, meccs_2 - tipp_2 stb.), ugyan ott vagy.
A példában egy $i iterátor változót használtam a tömb dimenziók tagolásához, itt akár a meccs SQL-ben lévő ID-jét is használhatod, bár nem javallott :)
És visszatérve az eredeti kérdésedre, a tömbök pointere alap esetben mindig az elején van. Iteráció során ez mozog vagy ha a next(), prev(), end() stb. fv-eket meghívod. De ahogy már írtam, szerintem, használd a foreach struktúrát!
hmhm...
nagyonszépen köszönöm a kódrészletet is, de nekem nem erre lenne szükségem. Két sztring változót szeretnék beletömni egy tömbbe mondjuk így, ismétlődve:
Juzer kiválasztja a legördülő menüből az eseményt és hozzányom egy tippet a kimenetelre -----> SUBMIT-tal elPOST-olja -----> feldolgozás ami tölti fel: sor[0][meccs][tipp]
Juzer kiválaszt egy másik eseményt a legördülő menüből és hozzányom egy tippet a kimenetelre -----> SUBMIT-tal elPOST-olja -----> feldolgozás ami tölti fel: sor[1][meccs][tipp]
...
Juzer kiválaszt egy másikeseményt a legördülő menüből és hozzányom egy tippet a kimenetelre -----> SUBMIT-tal elPOST-olja -----> feldolgozás ami tölti fel: sor[n][meccs][tipp]
A végeredmént meg kitolni egy táblázatba soronként:
Esemény Kimenetel
sor[1][meccs] sor[1][tipp]
sor[2][meccs] sor[2][tipp]
...
sor[n][meccs] sor[n][tipp]
Változók
Amennyiben a felhasználónak csak az adott munkamenet idejére van rá szüksége, és később senki más nem akar vele foglalkozni, akkor
$_SESSION
-ba kellene eltárolni elindított munkamenet után.Vagy pedig adatbázisban kell letárolni, ha nem csak az adott munkamenetben kell, vagy másnak is hozzá kell férni az adatokhoz akkor adatbázisban, fájlban vagy hasonló megosztható, és később visszanézhető módon kell letárolni.
Munkamenet esetén valahogy így nézne ki:
vazze session...
MEGOLDÁS
session_start();
if ($_POST['torles'] == 'del')
{
$_SESSION['sor'] = array();
}
if (isset($_POST['meccs']) && isset($_POST['tipp']))
{
$_SESSION['sor'][] = array (
"esemeny" => $_POST['meccs'],
"kimenetel" => $_POST['tipp'],
);
print "<div align=center>";
print "<div id='wrapper'>";
print "<table cellpadding='0' cellspacing='0' border='0' class='sortable' id='sorter'>";
print "<th>Esemény</th><th>Tipped</th>";
foreach ($_SESSION['sor'] as $e)
{
print ("<tr>");
foreach ($e as $kulcs => $ertek)
{
print("<td align=center>".$ertek."</td>");
}
print("</tr>");
}
print "</div></table></div>";
}
?>
beviteli részhez meg raktam egy törlési lehetőséget is:
if (count($_SESSION['sor']) != NULL)
{
?>
<form action="<?echo $_SERVER['PHP_SELF']?>" method="POST">
<input type="hidden" name="torles" value="del">
<input type="submit" value="Törlés">
</form>
<?php
}
?>
köszi mind2-őtöknek a segítőkézséget!
nah mostmár csak az sql táblába kéne betölteni egyesével... (:
nem tömböt POST-olsz
A "//tömbbe rendezés" részt nem értem, mert nem tömböt postolsz, hanem egy string változót, egyetlen string van a $_POST['meccs'] változóban. A szöveges változók tömbként is működnek, ahol 0-tól az indexek a string karaktereit tartalmazzák, de gondolom nem ez a célod.
Előbb a bemenetedet kellene tisztázni.
A tömbön belül iterálás során egy belső mutatóval (array pointer) tájékozódsz, éred el az aktuális elemet. Ezt a mutatót tudod mozgatni előre, hátra, vagy elérni az aktuális elemet, ahogy az előttem szóló kolléga is írta. De mivel PHP-ban vannak asszociatív, azaz nem szigorúan numerikus indexű, nem folyamatos indexelésű tömbök, szerintem, használd inkább a foreach struktúrát!