Кнопки для добавления переменных в сеанс и базу данных - PullRequest
0 голосов
/ 09 июня 2011

Хорошо, я новичок во всем этом, так что это может показаться многогранным подходом.То, что я пытаюсь сделать, это для одной кнопки, он просто добавляет переменную (которая является идентификатором) к сеансу.Это для временного списка, к которому пользователь может получить доступ, находясь на сайте.Я делаю это с помощью отправки POST.Именно эту кнопку я называю классной доской.Другая кнопка - избранное.Пользователь может щелкнуть и добавить идентификатор в избранное (сохраненное в базе данных), чтобы, когда они вернутся и войдут в систему, избранное было там.Опять же, это использование отправки POST.Мой подход ко мне кажется изменчивым, и в последней версии Firefox (4.01) внезапно перестал работать.В идеале, у меня должна быть кнопка, которая не передает (что приводит к перезагрузке страницы), но имеет кнопку в реальном времени, которая изменяется при нажатии, но делает все в фоновом режиме

/////Chalkboard///// (adding/removing to session)
<?php
if(isset($_POST['chalkboard_submit'])){
    $_SESSION['chalkboard'][] = $_POST['cb'];
}
elseif(isset($_POST['chalkboard_remove'])){
    $_SESSION['chalkboard'] = array_diff($_SESSION['chalkboard'], array($_POST['cb']));
}

/////Favorites///// (adding/removing to database)
if(isset($_POST['favorites_submit'])){
    $fav_query = "SELECT favorites FROM users
                    WHERE id = {$_SESSION['id']}";
    $fav_result = mysql_query($fav_query,$connection);
    $row = mysql_fetch_array($fav_result);
    if(empty($row['favorites'])){
        $favorites = array();
        $favorites[] = $_POST['fav'];
        $_SESSION['favorites'] = $favorites;
        $favorites = __serialize($favorites);
    }elseif(!empty($row['favorites'])){
        $favorites = __unserialize($row['favorites']);
        if(!in_array(($_POST['fav']), $favorites)){
            $favorites[] = $_POST['fav'];}
        $_SESSION['favorites'] = $favorites;
        $favorites = __serialize($favorites);
    }
    $fav_insert = "UPDATE users SET
                    favorites = '{$favorites}'
                    WHERE id = '{$_SESSION['id']}'
                    LIMIT 1
                    ";
    $fav_result = mysql_query($fav_insert,$connection);     
}
elseif(isset($_POST['favorites_remove'])){
    $fav_query = "SELECT favorites FROM users
                    WHERE id = {$_SESSION['id']}";
    $fav_result = mysql_query($fav_query,$connection);
    $fav_row = mysql_fetch_array($fav_result);
        $favorites = __unserialize($fav_row['favorites']);
        $favorites = array_diff($_SESSION['favorites'], array($_POST['fav']));
        $_SESSION['favorites'] = $favorites;
        $favorites = __serialize($favorites);
    $fav_insert = "UPDATE users SET
                    favorites = '{$favorites}'
                    WHERE id = '{$_SESSION['id']}'
                    LIMIT 1
                    ";
    $fav_result = mysql_query($fav_insert,$connection);
}

?>
///////// FORM ///////////
<?php
$quote = "<a name=\"" . $quotes['id'] . "\"></a>
                <form action=\"favorites.php?subj=" . $_SESSION['subj'] . "#" . $quotes['id'] . "\" method=\"post\">
                <a href=\"quote_details.php?id=" . $quotes['id'] . "\">\"" . $quotes['quote'] . "\"</a>
                <input type=\"hidden\" value=\"" . $quotes['id'] . "\" name=\"cb\" />
                <input type=\"hidden\" value=\"" . $quotes['id'] . "\" name=\"fav\" />";

                ###################### CHALK-BOARD #################################

                if(isset($_SESSION['chalkboard']) && in_array($quotes['id'], $_SESSION['chalkboard'])){
                    $quote .= "<input type=\"image\" src=\"images/chalk_board_add_active.gif\" name=\"chalkboard_remove\" value=\"submit\" title=\"Remove from Chalk-board\"/>";
                }else{
                    $quote .= "<input type=\"image\" src=\"images/chalkboard_add.gif\" name=\"chalkboard_submit\" value=\"submit\" title=\"Add to Chalk-board\"/>";
                }

                ####################### FAVORITES ################################

                if(isset($_SESSION['favorites']) && in_array($quotes['id'], $_SESSION['favorites'])){
                    $quote .= "&nbsp;&nbsp;<input type=\"image\" src=\"images/favorites_hover.gif\" name=\"favorites_remove\" value=\"submit\" title=\"Remove from Favorites\"/>";
                }else{
                    $quote .= "&nbsp;&nbsp;<input type=\"image\" src=\"images/favorites_add.gif\" name=\"favorites_submit\" value=\"submit\" title=\"Add to Favorites\"/>";
                }
$quote .= "</form>";
?>

1 Ответ

0 голосов
/ 09 июня 2011

При использовании изображений в качестве кнопок отправки браузер обычно отправляет туда, где вы щелкнули изображение, вместо того, чтобы щелкнуть по нему.Браузер вместо отправки chalkboard_submit=submit будет отправлять chalkboard_submit_x=20 и chalkboard_submit_y=15 (эти цифры будут различаться в зависимости от того, где пользователь щелкнул изображение).

Некоторые браузеры могут отправлять только chalkboard_submit=submitи другие отправят все три.Чтобы это исправить и сохранить совместимость с большинством браузеров, вам нужно проверить оба пути.Изменить:

if(isset($_POST['chalkboard_submit'])){
    $_SESSION['chalkboard'][] = $_POST['cb'];
}
elseif(isset($_POST['chalkboard_remove'])){
    $_SESSION['chalkboard'] = array_diff($_SESSION['chalkboard'], array($_POST['cb']));
}

if(isset($_POST['favorites_submit'])){

elseif(isset($_POST['favorites_remove'])){

на:

if(isset($_POST['chalkboard_submit']) || isset($_POST['chalkboard_submit_x'])){
    $_SESSION['chalkboard'][] = $_POST['cb'];
}
elseif(isset($_POST['chalkboard_remove']) || isset($_POST['chalkboard_remove_x'])){
    $_SESSION['chalkboard'] = array_diff($_SESSION['chalkboard'], array($_POST['cb']));
}

if(isset($_POST['favorites_submit']) || isset($_POST['favorites_submit_x'])){

elseif(isset($_POST['favorites_remove']) || isset($_POST['favorites_remove_x'])){ и это должно работать.

Вам не нужно проверять, установлены ли оба значения: _x' и _y', потому что, если один из них, другой тоже должен быть.

...