Autor | Zpráva | ||
---|---|---|---|
Kroupa Profil * |
#1 · Zasláno: 17. 10. 2013, 02:17:06
Zdravím. Jsem začátečník a tápu ohledně použití session. Zkouším vymazat "řádek" podle ID, která je uložená jako jedna hodnota v poli samotného. Jde to nějak? Zkoušel jsem to následujícím způsobem, ale mám podezření, že to spíše maže podle nějakého klíče...
<?php session_start(); If(isset($_POST["smazat"])) { unset($_SESSION['kosik'][$_POST['sessionid_aktualni']]); } foreach( $_SESSION['kosik'] as $data ) { list($_POST[sessionid], $_POST[nazev] ) = array_values( $data ); echo '<form method="post" action="onew.php">'; echo '<input type="hidden" name="sessionid_aktualni" value="'.$_POST[sessionid].'">'; echo '<input type="Submit" name="smazat" value="Smazat">'; echo '</form>'; } ?> |
||
Fisir Profil |
#2 · Zasláno: 17. 10. 2013, 06:30:20
Reaguji na Kroupu:
V konstrukci unset() ti přebývá jedno ] .
|
||
Tori Profil |
#3 · Zasláno: 17. 10. 2013, 07:27:26
Kroupa:
Přiřazování do POST na ř.9 vypadá trochu divně (a chybí vám tam apostrofy okolo klíčů pole), proč nepoužijete obyčejnou proměnnou? A podle způsobu, jakým to mažete, by to mělo vypadat spíš takhle: foreach ($_SESSION['kosik'] as $id => $data) { echo '<form method="post" action="onew.php">'; echo '<input type="hidden" name="sessionid_aktualni" value="'.$id.'">'; echo '<input type="Submit" name="smazat" value="Smazat">'; echo '</form>'; } Fisir: Nepřebývá. |
||
Časová prodleva: 5 dní
|
|||
Kroupa Profil * |
#4 · Zasláno: 21. 10. 2013, 19:42:00
Zkusil jsem to opravit, ale nic moc to nevyřešilo. Chci přidávat a mazat položky ze session. Mám k tomu dva formuláře "pridat" a "smazat" a proměnné "sessionid_aktulani" a "sessionid_vybrane". Problém je, že mi to při mazání nenačte "sessionid_vybrane" a už vůbec nevymaže správný řádek i když tam správné "sessionid_vybrane" je...
<?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php If(isset($_POST['sessionid_aktulani'])) {$sessionid_aktulani = $_POST['sessionid_aktulani'];} else {$sessionid_aktulani = 1;} If(isset($_POST['sessionid_vybrane'])) {$sessionid_vybrane = $_POST['sessionid_vybrane'];} else {$sessionid_vybrane = 1;} If(isset($_POST["pridat"])) { echo "POST[nazev]: ".$_POST['nazev'].'<br>'; $kosik =& $_SESSION['kosik']; $sessionid_aktulani = $sessionid_aktulani + 1; $kosik[] = array($sessionid_aktulani, $_POST['nazev']); } If(isset($_POST["smazat"])) { unset($_SESSION['kosik'][$_POST['sessionid_vybrane']]); } echo '<table>'; echo '<form method="post" action="onew.php">'; echo '<tr><th>Session id</th><th>název</th><th>přidat</th></tr>'; echo '<tr>'; echo '<td><input type="text" name="sessionid_aktulani" value="'.$sessionid_aktulani.'"></td>'; echo '<td>'; echo '<select name="nazev">'; echo '<option>jablka</option>'; echo '<option>hrušky</option>'; echo '<option>švestky</option>'; echo '</select>'; echo '</td>'; echo '<td>'; echo '<input type="Submit" name="pridat" value="Přidat">'; echo '</td>'; echo '</tr>'; echo '</form>'; if ( $_SESSION['kosik']!=0 ) { echo '<table>' ; echo '<form method="post" action="onew.php">'; echo '<tr><th>vybrané id</th><th>název</th></tr>'; foreach( $_SESSION['kosik'] as $data ) { list($sessionid_vybrane, $nazev) = array_values( $data ); echo '<tr>'; echo '<td><input type="text" name="sessionid_vybrane" value="'.$sessionid_vybrane.'">'; echo '<td><input type="text" name="nazev" value="'.$nazev.'"></td>'; echo '<td>'; echo '<input type="Submit" name="smazat" value="Smazat"> '; echo '</td>'; echo '</tr>'; } echo '</form>'; echo '</table>'; } ?> </body> </html> |
||
Kroupa Profil * |
#5 · Zasláno: 24. 10. 2013, 02:35:43
Žádný nápad jak to vyřešit?
|
||
abc Profil |
Posílám funkční kód, projděte si úpravy, které jsem provedl a případně se zeptejte proč
PS - nechcete ještě aby mazání mazalo označený řádek, a ne vždy první? (nevím, zda to byl záměr či nikoliv) <?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php If (isset($_POST['sessionid_aktulani'])) { $sessionid_aktulani = $_POST['sessionid_aktulani']; } else { $sessionid_aktulani = 1; } If (isset($_POST['sessionid_vybrane'])) { $sessionid_vybrane = $_POST['sessionid_vybrane']; } else { $sessionid_vybrane = 1; } If (isset($_POST["pridat"])) { echo "POST[nazev]: " . $_POST['nazev'] . '<br>'; //nerozumím proč tam chcete +1 proti číslu z formuláře, ale asi k tomu máte nějaký důvod $_SESSION['kosik'][$sessionid_aktulani + 1] = $_POST['nazev']; } If (isset($_POST["smazat"])) { unset($_SESSION['kosik'][$sessionid_vybrane]); } echo '<table>'; echo '<form method="post" action="">'; echo '<tr><th>Session id</th><th>název</th><th>přidat</th></tr>'; echo '<tr>'; echo '<td><input type="text" name="sessionid_aktulani" value="' . $sessionid_aktulani . '"></td>'; echo '<td>'; echo '<select name="nazev">'; echo '<option>jablka</option>'; echo '<option>hrušky</option>'; echo '<option>švestky</option>'; echo '</select>'; echo '</td>'; echo '<td>'; echo '<input type="Submit" name="pridat" value="Přidat">'; echo '</td>'; echo '</tr>'; echo '</form>'; if (isset($_SESSION['kosik']) && !empty($_SESSION['kosik'])) { echo '<table>'; echo '<form method="post" action="">'; echo '<tr><th>vybrané id</th><th>název</th></tr>'; foreach ($_SESSION['kosik'] as $sessionid_vybrane => $nazev) { echo '<tr>'; echo '<td><input type="text" name="sessionid_vybrane" value="' . $sessionid_vybrane . '">'; echo '<td><input type="text" name="nazev" value="' . $nazev . '"></td>'; echo '<td>'; echo '<input type="Submit" name="smazat" value="Smazat"> '; echo '</td>'; echo '</tr>'; } echo '</form>'; echo '</table>'; } ?> </body> </html> |
||
Kroupa Profil * |
#7 · Zasláno: 24. 10. 2013, 14:06:20
[#6] abc Díky za odpověď!
Tato část mi v tvém kódu nezobrazuje seznam, ale pouze posledně přidaný produkt: if (isset($_SESSION['kosik']) && !empty($_SESSION['kosik'])) { echo '<table>'; echo '<form method="post" action="">'; echo '<tr><th>vybrané id</th><th>název</th></tr>'; foreach ($_SESSION['kosik'] as $sessionid_vybrane => $nazev) { echo '<tr>'; echo '<td><input type="text" name="sessionid_vybrane" value="' . $sessionid_vybrane . '">'; echo '<td><input type="text" name="nazev" value="' . $nazev . '"></td>'; echo '<td>'; echo '<input type="Submit" name="smazat" value="Smazat"> '; echo '</td>'; echo '</tr>'; } echo '</form>'; echo '</table>'; } ?> Mezitím jsem opravil kód a vše funguje kromě mazání: <?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php $sessionid_aktulani = $_POST['sessionid_aktulani']; If(isset($_POST["pridat"])) { $kosik =& $_SESSION['kosik']; $sessionid_aktulani = $sessionid_aktulani + 1; $kosik[] = array($sessionid_aktulani, $_POST['nazev']); } If(isset($_POST["smazat"])) { echo $_POST['sessionid_vybrane'].''.$_POST['nazev']; $key=array_search($_POST["sessionid_vybrane"],$_SESSION["kosik"]); if($key!==false) {unset($_SESSION["kosik"][$key]);}; } echo '<table>'; echo '<form method="post" action="onew.php">'; echo '<tr><th>název</th><th>přidat</th></tr>'; echo '<tr>'; echo '<td><input type="hidden" name="sessionid_aktulani" value="'.$sessionid_aktulani.'"></td>'; echo '<td>'; echo '<select name="nazev">'; echo '<option>jablka</option>'; echo '<option>hrušky</option>'; echo '<option>švestky</option>'; echo '</select>'; echo '</td>'; echo '<td>'; echo '<input type="Submit" name="pridat" value="Přidat">'; echo '</td>'; echo '</tr>'; echo '</form>'; if ( $_SESSION['kosik']!=0 ) { echo '<table>' ; echo '<tr><th>vybrané id</th><th>název</th></tr>'; foreach( $_SESSION['kosik'] as $data ) { list($sessionid_vybrane, $nazev) = array_values( $data ); echo '<tr>'; echo '<form method="post" action="onew.php">'; echo '<td><input type="hidden" name="sessionid_aktulani" value="'.$sessionid_aktulani.'">'; echo '<input type="text" name="sessionid_vybrane" value="'.$sessionid_vybrane.'">'; echo '<td><input type="text" name="nazev" value="'.$nazev.'"></td>'; echo '<td>'; echo '<input type="Submit" name="smazat" value="Smazat"> '; echo '</td>'; echo '</tr>'; echo '</form>'; } echo '</table>'; } ?> </body> </html> Nicméně s mazáním je problém, všechny údaje se pomocí POST správně přenesou, ale nějak ty data pak nemůžu podle těch údajů vymazat. Zkoušel jsem to dvěma způsoby, ale nepracuje to jak má. Zkoušel jsem to s array_search: $key=array_search($_POST["sessionid_vybrane"],$_SESSION["kosik"]); if($key!==false) {unset($_SESSION["kosik"][$key]);} Ale nic to nedělá. A taky takhle: foreach( $_SESSION['kosik'] as $data ) { list($sessionid_vybrane, $nazev) = array_values( $data ); if($sessionid_vybrane == $_POST['sessionid_vybrane']){unset($_SESSION['kosik'][$_POST['sessionid_vybrane']]);} } Tohle zase občas maže úplně jiné ID než je potřeba... |
||
abc Profil |
#8 · Zasláno: 24. 10. 2013, 16:00:48
Poslal jsem Vám funkční kód, který stačilo zkopírovat a spustit.
Mé úpravy si upravíte zpět, jak jste je měl a divíte se, že Vám to nefunguje. Znovu to sem posílat nebudu. Jen si musíte uvědomit, že to ukládání a výpis, jak jsem je upravil a v kódu v [#6] jsem neudělal pro nic za nic... Co se týká toho mazání, tak jsem se v [#6] ptal, zda chcete, aby to takto "fungovalo" nebo aby to mazalo správný řádek a na to stačí použít radu od [#3] Tori |
||
Kroupa Profil * |
#9 · Zasláno: 25. 10. 2013, 00:43:49
[#8] abc Přečtěte si prosím první řádek mého předešlého příspěvku.
|
||
abc Profil |
Číst umím, rádo se stalo. Ale přece za poděkování nechcete tu radu poslat znovu?
Tu v podstatě nejdůležitější část, a sice "rozumné" ukládání do pole $_SESSION['kosik'] ve tvaru ($id => $hodnota) jste si hned změnil zpět a ukládáte do pole pod následující index 2 hodnoty do dalšího pole. Mohu se zeptat proč?
Pokud byste změnil ukládání tak, jak jsem ho napsal já, tak se Vám budou záznamy daleko lépe hledat, vypisovat i mazat - prostě smažete záznam s klíčem $vybraneId a nemusíte hledat v kterém poli se hodnota nachází. Pokud Vám samozřejmě něco není jasné, rád Vám zodpovím i následující dotazy. Pokud máte zájem o další ukázku funkčního kódu s doladěným mazáním, rád poskytnu. |
||
Kroupa Profil * |
#11 · Zasláno: 27. 10. 2013, 17:16:52
abc:
Nemám o Váš kód zájem. Jak jsem psal, nefunguje. Potřeboval jsem vyřešit problém, ne tam další přidělávat. |
||
Tori Profil |
Kroupa:
Ty problémy si přiděláváte sám. Je to na první pohled zřejmé z kódu v [#4] i [#7]. Máte hodnotu a uvnitř vnořeného pole, uloženého v košíku pod klíčem b . Do formuláře na mazání vkládáte hodnoty a z vnořeného pole, ale při mazání je používáte jako klíč b v košíku. Je tedy pravděpodobné, že ve výsledku se budou z košíku mazat zdánlivě náhodné prvky místo těch, které chcete. Logické řešení by bylo vkládat do formuláře na mazání nikoli hodnoty z vnořeného pole, ale klíče košíku. Anebo pokud byste při mazání použil to procházení košíku cyklem, co máte na konci [#7], tak je potřeba při nalezení správného pole z košíku odstranit toto pole, a ne použít hodnotu z POST.
|
||
abc Profil |
#13 · Zasláno: 27. 10. 2013, 17:58:43
Ještě by byla možnost při výpísu položek z košíku do formuláře přidat hidden input, ve kterém bude uložená hodnota klíče pro mazání.
|
||
Kroupa Profil * |
#14 · Zasláno: 27. 10. 2013, 18:58:50
Díky za pomoc všem, podařilo se mi to rozchodit:
<?php session_start(); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php if(isset($_POST['sessionid_nejvyssi'])){$sessionid_nejvyssi = $_POST['sessionid_nejvyssi'];} else{$sessionid_nejvyssi = -1;} If(isset($_POST["pridat"])) { $kosik =& $_SESSION['kosik']; $sessionid_nejvyssi = $sessionid_nejvyssi + 1; $kosik[] = array($sessionid_nejvyssi, $_POST['nazev']); } If(isset($_POST["smazat"])) { echo "post:".$_POST['sessionid_vybrane']; echo "<br>nejvyšší před výmazem: ".$sessionid_nejvyssi; foreach( $_SESSION['kosik'] as $sessionid_vybrane2 => $data ) { echo "<br>session:".$sessionid_vybrane2; if($sessionid_vybrane2 == $_POST['sessionid_vybrane']) { unset($_SESSION['kosik'][$sessionid_vybrane2]); if(empty($_SESSION['kosik'])){$sessionid_nejvyssi = -1;} } } echo "<br>nejvyšší po výmazu: ".$sessionid_nejvyssi; } echo '<table>'; echo '<form method="post" action="onew.php">'; echo '<tr><th>nejvyšší id</th><th>název</th><th>přidat</th></tr>'; echo '<tr>'; echo '<td><input type="text" name="sessionid_nejvyssi" value="'.$sessionid_nejvyssi.'"></td>'; echo '<td>'; echo '<select name="nazev">'; echo '<option>jablka</option>'; echo '<option>hrušky</option>'; echo '<option>švestky</option>'; echo '</select>'; echo '</td>'; echo '<td>'; echo '<input type="Submit" name="pridat" value="Přidat">'; echo '</td>'; echo '</tr>'; echo '</form>'; if ( $_SESSION['kosik']!=0 ) { echo '<table>' ; echo '<tr><th>nejvyšší id</th><th>vybrané id</th><th>název</th></tr>'; foreach( $_SESSION['kosik'] as $sessionid_vybrane => $data ) { list($sessionid_vybrane, $nazev) = array_values( $data ); echo '<tr>'; echo '<form method="post" action="onew.php">'; echo '<td><input type="text" name="sessionid_nejvyssi" value="'.$sessionid_nejvyssi.'"></td>'; echo '<td><input type="text" name="sessionid_vybrane" value="'.$sessionid_vybrane.'"></td>'; echo '<td><input type="text" name="nazev" value="'.$nazev.'"></td>'; echo '<td>'; echo '<input type="Submit" name="smazat" value="Smazat"> '; echo '</td>'; echo '</tr>'; echo '</form>'; } echo '</table>'; } ?> </body> </html> Pokud by to šlo nějak zjednodušit, dejte mi vědět. Ale myslím že takhle to splní svůj účel. |
||
Časová prodleva: 11 let
|
0