почему не работает строка <?php setcookie($name,''); ?> Код (Text): <a href="#" onclick="eraseCook();">Удалить куки</a> <script type="text/javascript"> function eraseCook() { <?php setcookie($name,''); ?> alert('<?=$name;?>'); } </script>
Это всё HTTP протокол, cookie относятся к заголовкам, так как в HTTP протоколе условно есть заголовки и данные. Первыми должны идти заголовки, потом данные. У тебя данные идут первыми, потом заголовки (setcookie) так как cookie относятся к заголовкам, потом опять данные. Если коротко то ты нарушил структуру HTTP протокола. Вызывай setcookie и другие функции устанавливающие заголовки до вывода другой информации.
так тоже не робит. если я прально понял Код (Text): <script type="text/javascript"> function eraseCook() { <?php setcookie($name,''); ?> alert('<?=$name;?>'); } </script> <a href="#" onclick="eraseCook();">Удалить куки</a>
ты показал тот же код, разве что-то должно было изменится? и почему ты хочешь пустую cookie поставить? почитай документацию по setcookie, возможно тебе придётся задать имя вручную, а содержание которое можно будет получить по этому имени, брать из переменной $name. Создай отдельный скрипт, чтобы поэкспериментировать с примерами setcookie из документации.
пустую поставить чтоб удалить текущее значение, это часть кода тут. отдельно setcookie я поэксперементировал все норм роботает. а вот именно код сверху не получается зафунциклировать. даже в отдельном примере не работает и не пойму почему. javu совсем незнаю, щас пока только php копаю. просто казалось бы мелочь а не понятно почему не работает, и короткие справки по яве из яндекса не помогают. вот отдельный пример в отдельном файле Код (Text): <?php setcookie(namex,'123'); $name=$_COOKIE['namex']; ?> <script type="text/javascript"> function eraseCook() { <?php setcookie(namex,'',time()-1); ?> alert('<?=$name;?>'); } </script> <a href="#" onclick="eraseCook();">Удалить куки</a> <?php ?>
@noice https://php.ru/manual/function.ob-start.html --- Добавлено --- функция не удалит куки, можешь исходный код html открыть и убедится в чем причина. PHP и JS две разные вещи --- Добавлено --- как удалить куки с помощью JS
я читаю код и вижу полно ошибок, namex не строка, PHP код внутри javascript, хотя javascript работает на клиента, а PHP на сервере, вот почитай http://phpfaq.ru/newbie/na_tanke Надо делать отладку HTTP запросов, смотреть например через fiddler, что там с cookie происходит. Напомни, по какой книге изучаешь HTML, PHP, JavaScript?
@noice переходи на книги, вот по PHP свежая http://www.ozon.ru/context/detail/id/137538198/ в уроках обычно мало могут рассказать и показать. Разобрался как работает клиентский javascript и в чём разница с серверным PHP?
@denis01 там вникать надо детально. я по порядку изучаю чтоб с одного на другое не прыгать и в итоге ничего не понять. щас пока mysqli не закончил потом javascript. хотя мне кажется это все освоить ваще анрил, как вы тут сидящие этому обучились я idk это год минимум надо каждый день в кодах сидеть походу
Терпение и желание. Я вот как-то отпуск взял спецом, 2 недели, чтобы JS выучить с уровня "копипаст-кодинг" до "среднебазовый, которого хватит, чтобы дальше развиваться самостоятельно". Учил запоем, инфу поглощал, как голодающий еду у шведского стола. Терпение и желание.
@noice так зачем cookie и javascript используешь сейчас, если учишь mysql и доступ к нему через PHP mysqli?
@denis01 до mysql, cookie учил просто захотелось кнопку сделать чтоб их удалять. думал все просто. оказалось не просто.
@noice на сколько я помню, встроенной функции на javascript для удаления cookie по её имени нету. Нужно написать самому или взять в интернете готовую. Ещё нужно как писали выше, чтобы cookie не была httpOnly. В твоём коде перемешан php и javascript с ошибками. Надеюсь по ссылке "на танке" что я давал раньше, тебе стало понятно, разница между php и javascript. Кнопку можно сделать многими способами. Как ты хотел удалять через javascript, но для этого просто найди в интернете код для работы с cookie на javascript. Ещё вариант это сделать в PHP коде условие для которого создать ссылку, например ?delete_cookie=test а в php уже делать if для этой ссылки и удалять cookie, имя брать из $_GET['delete_cookie']
Прям с учебника, автор: Код (Javascript): function setCookie(name, value, options) { options = options || {}; var expires = options.expires; if (typeof expires == "number" && expires) { var d = new Date(); d.setTime(d.getTime() + expires * 1000); expires = options.expires = d; } if (expires && expires.toUTCString) { options.expires = expires.toUTCString(); } value = encodeURIComponent(value); var updatedCookie = name + "=" + value; for (var propName in options) { updatedCookie += "; " + propName; var propValue = options[propName]; if (propValue !== true) { updatedCookie += "=" + propValue; } } document.cookie = updatedCookie; } function deleteCookie(name) { setCookie(name, "", { expires: -1 }) } --- Добавлено --- Потом достаточно обратиться к deleteCookie() и все. --- Добавлено --- И самое главное - если тебе надо ковырять кукисы через JS, значит ты что-то делаешь не так. Может тебе нужно на стороне клиента хранилище ключ-значение удобное? Дык есть для этого webStorage же.
ок спасибо. все сохранил, как вернусь к кукам и js буду экспеременитировать. щас пока вот наткнулся по теме скул: два варианта получение результата запроса: 1 Код (Text): $res=mysqli_query($db,$query); 2 Код (Text): $res2=$db->query($query); зачем существует в php два варианта?
@denis01 $db=mysqli_connect("localhost", "root", "","test"); как обратиться к строке через sql запрос? именно к строке, к примеру есть вариант "UPDATE news SET h1='тест' WHERE id='8'" но тут обращение по id, А в php есть массив строк который используется в циклах. Поскольку id порядок хаотичный 1456, в циклах их не получится использовать. Или всетаки надо привязку как то делать по id? наверно непонятно есть таблица куда грузятся данные, хочу сделать запись изменений по клику. Но проблема в том чтобы через php циклы отправлять sql запросы надо как то обратится именно к строкам конечно врятли кто меня понял, ну авось
@Fell-x27 как исправить? чтоб по клику новые значения сразу после клика выводились? а щас чтоб увидеть изменения надо после кнопки submit, f5 нажать обновить страницу. код: PHP: <pre> <?php $db = mysqli_connect("localhost", "root", "", "test"); if (mysqli_connect_errno()) { echo "no connect\n"; } else { echo "connect\n"; } $query = "select * from news"; $res = mysqli_query($db, $query); $string = array(); $stroka = 0; $zag = 0; #нумерация полей ввода $count = $res->num_rows; echo "В запросе $query\nстрок: $res->num_rows.\nстольбцов: $res->field_count\n"; for ($ms = 0; $ms < $count; $ms++) { $string[] = mysqli_fetch_array($res); #сбор массивов строк в массив $id[] = $string[$ms]['id']; # парсим id в массив updateNew(); } table(); function updateNew() { global $id; global $db; static $i2 = 0; if (isset($_POST['zag0'])) { $zxc = "zag" . $i2; $update = "UPDATE NEWS SET h1=\"$_POST[$zxc]\" WHERE id=\"$id[$i2]\""; mysqli_query($db, $update) or die(mysql_error()); $i2++; } } function vivodStrok($stroka = "0") { global $string; global $zag; for ($i = 0; $i <= count($string); $i++) { if ($i == 1) { echo "<td><input name=\"zag{$zag}\" type=\"text\" value=" . ($string[$stroka][$i]) . "></td>"; $zag++; } else { echo "<td>" . ($string[$stroka][$i]) . "</td>"; } } } function table(){ global $count; global $stroka; echo "<form action=\"/sql/index.php\" method=\"POST\"><table style=\"background-color: #199999\" border=\"1\">"; while ($count > $stroka) { echo "<tr><td>"; echo "Строка№$stroka-"; vivodStrok($stroka); $stroka++; echo "</tr></td>"; } echo "</table><button type=\"submit\">ok</button></form>"; } if (isset($_POST['zag0'])) { echo "post\n"; print_r($_POST); } else { echo "not post\n"; } print_r($_POST['zag0']); ?>
Может сначала делать UPDATE, а потом SELECT? Чтобы когда данные будут выбираться из базы, они были обновлены.
Заняться отладкой и понять, что у тебя творится в коде, чтобы получить представление о том, что можно поменять.
алилуя, 10 часов почти танцев с бубном и заработало. @denis01 @Fell-x27 да дело было в порядке выполнения но чтоб его выстовить как надо пришлось почти все переписывать. я просто данеялся на какой то легкий путь.