Перейти к содержимому

Фотография

PHPвопросы по PHP


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 411

#301
Biterek

Biterek
  • В доску свой
  • 1 712 сообщений
можно еще маленький вопрос почему страница не переадресовывается после обновления header("Location: update_form_catalog.php");
  • 0

#302
forspamonly

forspamonly
  • Гость
  • 34 сообщений

почему он должен ругаться? я же с формы данные принял и назначил их на эти переменные

потому что у тех переменных другая область видимости. пхп не даёт обращаться к переменным снаружи функции просто так. их для этого надо указывать как глобальные.

почему страница не переадресовывается после обновления header("Location: update_form_catalog.php");

вероятнее всего, что-то выводится перед заголовком. после того как началась отправка тела ответа, заголовки уже менять нельзя. пхп на это тоже ругается, но если он не настроен, загадочными будут даже самые банальные вещи.
  • 2

#303
Biterek

Biterek
  • В доску свой
  • 1 712 сообщений
Спасибо за советы!!!
короче вот что здесь может выводится перед заголовком?


require "eshop_db.inc.php";
require "eshop_lib.inc.php";

$a = clearData($_POST["author"]);
$t = clearData($_POST["title"]);
$py = clearData($_POST["pubyear"], "i");
$pr = clearData($_POST["price"], "i");
$id = clearData($_POST["id"], "i");

updateCat($a, $t, $py, $pr, $id);

header("Location: catalog.php");

потому что у тех переменных другая область видимости. пхп не даёт обращаться к переменным снаружи функции просто так


вы имели введу?

function updateCat(){
$sql = "UPDATE catalog SET author='$a', title='$t', pubyear='$py', price='$pr' WHERE id='$id'";

если пхп должен выдовать как ошибку подскажите где её включит в php.ini или как называется у меня кажется было все включено получается нет? раз не выдал ошибки

вероятнее всего, что-то выводится перед заголовком. после того как началась отправка тела ответа, заголовки уже менять нельзя. пхп на это тоже ругается, но если он не настроен, загадочными будут даже самые банальные вещи.


здесь он выдает ошибку и говорит что перед заголовком есть вывод только я этот вывод не нашел

Спасибо заранее!

Сообщение отредактировал Biterek: 19.11.2012, 23:04:54

  • 0

#304
Everus

Everus
  • Гость
  • 7 сообщений

require "eshop_db.inc.php";
require "eshop_lib.inc.php";

Проверьте файлы eshop_db.inc.php и eshop_lib.inc.php если у вас там исключительно php код то не стоит закрывать <?php, в таком случае все символы до конца файла будут считаться частью php кода. У вас вполне возможно имеется какой-то символ после ?> в таком случае после инклуда этот символ будет сразу же выведен в тело ответа.
Глобальные переменные для передачи параметров в функцию использовать не стоит, это очень сильно снижает гибкость и читабельность кода. Намного лучше будет если вы будете создавать объекты для сущностей.
Так же вам стоит размещать php код и вывод в разные файлы что позволит сильно повысить гибкость вашего кода. Для этого можно использовать шаблонизатор наподобие Twig'а.
И немало важно

$sql = "UPDATE catalog SET author='$a', title='$t', pubyear='$py', price='$pr' WHERE id='$id'";

Так подготавливать sql запросы не стоит. Откройте мануал по php и найдите там класс mysqli или PDO.
  • 0

#305
Biterek

Biterek
  • В доску свой
  • 1 712 сообщений

Проверьте файлы eshop_db.inc.php и eshop_lib.inc.php


вот с этой страничке переадресация работает норм
<?php
require "eshop_db.inc.php";
require "eshop_lib.inc.php";

$author = clearData($_POST["author"]);
$title = clearData($_POST["title"]);
$pybyear = clearData($_POST["pubyear"], "i");
$price = clearData($_POST["price"], "i");

save($author, $title, $pybyear, $price);

header("Location: add2cat.php");
?>
а вот с этой нет
<?php
require "eshop_db.inc.php";
require "eshop_lib.inc.php";

$author = clearData($_POST["author"]);
$title = clearData($_POST["title"]);
$pybyear = clearData($_POST["pubyear"], "i");
$price = clearData($_POST["price"], "i");
$id = clearData($_POST["id"], "i");

updateCat($author, $title, $pybyear, $price, $id);

header("Location: cat.php");
?>
в чем трабла я походу чего-то не вижу

Так подготавливать sql запросы не стоит. Откройте мануал по php и найдите там класс mysqli или PDO.

спасибо за советы будем двигатся в этом направление
и это пока просто черновик

Сообщение отредактировал Biterek: 20.11.2012, 14:06:16

  • 0

#306
Everus

Everus
  • Гость
  • 7 сообщений

в чем трабла я походу чего-то не вижу

Тогда думаю стоит выложить все файлы проекта и точный текст ошибки.
  • 0

#307
Biterek

Biterek
  • В доску свой
  • 1 712 сообщений

Тогда думаю стоит выложить все файлы проекта и точный текст ошибки.

вот текст ошибки
Warning: Cannot modify header information - headers already sent by (output started at N:\home\localhost\www\htdocs2\eshop\update_catalog.php:1) in N:\home\localhost\www\htdocs2\eshop\update_catalog.php on line 14

вот здесь работает переадресация
<?php
require "eshop_db.inc.php";
require "eshop_lib.inc.php";

$author = clearData($_POST["author"]);
$title = clearData($_POST["title"]);
$pybyear = clearData($_POST["pubyear"], "i");
$price = clearData($_POST["price"], "i");

save($author, $title, $pybyear, $price);

header("Location: add2cat.php");
?>

а здесь уже нет
<?php
require "eshop_db.inc.php";
require "eshop_lib.inc.php";

$author = clearData($_POST["author"]);
$title = clearData($_POST["title"]);
$pybyear = clearData($_POST["pubyear"], "i");
$price = clearData($_POST["price"], "i");
$id = clearData($_POST["id"], "i");

updateCat($author, $title, $pybyear, $price, $id);

header("Location: cat.php");
?>
все файлы обязательно....

вот updateCat на eshop_lib.inc.php
function updateCat($author, $title, $pybyear, $price, $id){
$sql = "UPDATE catalog SET author='$author', title='$title', pubyear='$pybyear', price='$price' WHERE id='$id'";
$result = mysql_query($sql) or die(mysql_error());

вот save на том же eshop_lib.inc.php
function save($author,$title,$pubyear,$price){
$sql = "INSERT INTO catalog (
author,
title,
pubyear,
price)
VALUES(
'$author',
'$title',
$pubyear,
$price)";
mysql_query($sql) or die(mysql_error());

Сообщение отредактировал Biterek: 20.11.2012, 17:11:47

  • 0

#308
Everus

Everus
  • Гость
  • 7 сообщений

Warning: Cannot modify header information - headers already sent by (output started at N:\home\localhost\www\htdocs2\eshop\update_catalog.php:1) in N:\home\localhost\www\htdocs2\eshop\update_catalog.php on line 14

У вас скорей всего в update_catalog.php используется UTF-8 кодировка, в таком случае в начало файла добавляется специальный символ который и попадает в вывод. Если это так то вам следует сменить кодировку. Во многих редакторах есть возможность выставить режим "UTF-8 без BOM" он вам поможет если вы хотите сохранить кодировку файла. Если это не поможет то следует включить в редакторе отображение всех символов скорей всего у вас стоит дрегой специальный символ перед <?php.
  • 0

#309
Biterek

Biterek
  • В доску свой
  • 1 712 сообщений

У вас скорей всего в update_catalog.php используется UTF-8 кодировка

Нет у меня кодировка ANSI в update_catalog.php при включенном отображение всех символов ничего кроме "CR LF" ничего нет
  • 0

#310
forspamonly

forspamonly
  • Гость
  • 34 сообщений

если пхп должен выдовать как ошибку подскажите где её включит в php.ini или как называется у меня кажется было все включено получается нет? раз не выдал ошибки

error_reporting = E_ALL   ; если пхп старее 5.4, то  E_ALL | E_STRICT
display_errors = On
вообще, у пхп в комплекте есть шаблон конфига для разработки (php.ini-development), в нём это должно быть изначально проставлено.

output started at N:\home\localhost\www\htdocs2\eshop\update_catalog.php:1


Если :1, то скорее всего @Everus прав - очень похоже на BOM. Можно в шестнадцатеричном режиме посмотреть, есть ли там в начале файла байты EF BB BF

По остальным пунктам он, в принципе, тоже прав. Насколько это своевременно на данном этапе - другой вопрос.
  • 0

#311
Biterek

Biterek
  • В доску свой
  • 1 712 сообщений

Если :1, то скорее всего @Everus прав - очень похоже на BOM

Спасибо в который раз за ответ!!! Но если это BOM то почему как я указывал выше со страницы с функцией сохранения переадресация работает норм а с обновлением нет, хотя они в целом идентичны
  • 0

#312
mrvitaminc

mrvitaminc
  • Гость
  • 28 сообщений
можно еще вписать в код создаваемого приложения функции такие, в самом верху кода:

после <?php

пишем так:

ini_set('display_errors',1);
error_reporting(E_ALL);
  • 0

#313
WallEnd

WallEnd
  • Постоялец
  • 490 сообщений

Если :1, то скорее всего @Everus прав - очень похоже на BOM

Спасибо в который раз за ответ!!! Но если это BOM то почему как я указывал выше со страницы с функцией сохранения переадресация работает норм а с обновлением нет, хотя они в целом идентичны


Приложите файлы. Не текст из файлов, а именно файлы целиком!

Либо это проблема с кодировкой, либо у Вас есть какой-то вывод в файлах. Другого не дано. Переведите с помощью notepad++ например, кодировки файлов в UTF-8 without BOM и вывод на сайте поменяйте на UTF-8 так будет меньше проблем потом с разработкой. ИМХО конечно!

Сообщение отредактировал WallEnd: 21.11.2012, 11:07:35

  • 0

#314
Everus

Everus
  • Гость
  • 7 сообщений

Переведите с помощью notepad++ например, кодировки файлов в UTF-8 without BOM и вывод на сайте поменяйте на UTF-8 так будет меньше проблем потом с разработкой. ИМХО конечно!

Только стоит помнить что многие строковые функции не дружат с UTF-8 и другими многобайтными кодировками кодировками..
  • 0

#315
WallEnd

WallEnd
  • Постоялец
  • 490 сообщений


Переведите с помощью notepad++ например, кодировки файлов в UTF-8 without BOM и вывод на сайте поменяйте на UTF-8 так будет меньше проблем потом с разработкой. ИМХО конечно!

Только стоит помнить что многие строковые функции не дружат с UTF-8 и другими многобайтными кодировками кодировками..

Зато приложение становится универсальным, пропадает геморрой с преждевременным выводом как в случае с Biterek, пропадает геморрой с применением готовых решений. А для всего остального есть mastercard iconv и mb_string.
  • 0

#316
WallEnd

WallEnd
  • Постоялец
  • 490 сообщений
Как вариант, если уверен что дело не в кодировке и гадить может какая-нить зарытая функция в каком-нибудь запрятанном наследованиями классе, то просто в начале выполнения скрипта буферизуй вывод, при этом заголовки отправляться будут, а стандартный вывод нет. Ну и, как уже сказали, очень важно при разработке видеть ошибки:
error_reporting(E_ALL);

Сообщение отредактировал WallEnd: 21.11.2012, 12:55:35

  • 0

#317
Everus

Everus
  • Гость
  • 7 сообщений

Зато приложение становится универсальным, пропадает геморрой с преждевременным выводом как в случае с Biterek, пропадает геморрой с применением готовых решений. А для всего остального есть mastercard iconv и mb_string.

Я и не писал что это плохо. Просто надо помнить об этом.
ИМХО Biterek стоит почитать про ООП и изучить современный фреймворк(Symfony, Zend, Yii...).
  • 0

#318
Biterek

Biterek
  • В доску свой
  • 1 712 сообщений

Я и не писал что это плохо. Просто надо помнить об этом. ИМХО Biterek стоит почитать про ООП и изучить современный фреймворк(Symfony, Zend, Yii...).

Спасибо! Я только на пути к ОПП... Разобрался сам тупанул перед <?php был пробел не видел очевидного с...ка :) бывает в упор смотришь разглядываешь код и не видишь этой самой ошибки, может это поначалу так. Спасибо за помощь
  • 0

#319
Biterek

Biterek
  • В доску свой
  • 1 712 сообщений
Можно еще вопрос? как место того запроса на выборку что ниже в коде, сделать в функций, функция на выборку из базы с id будет лежат в библиотеке а здесь чтоб я вызывал функцию и с помошью неё давал значения в value в форме ниже. Спасибо если поймете задумку и подскажите

<?php
require "eshop_db.inc.php";
require "eshop_lib.inc.php";
$id = clearData($_GET["id"], "i");

$result = mysql_query("SELECT * FROM catalog WHERE id='$id'");
$my = mysql_fetch_array($result);
?>
<html>
<head>
<title>Форма добавления товара в каталог</title>
</head>
<body>
<form action="update_catalog.php" method="post">
<p>Автор: <input value="<?=$my['author']?>" type="text" name="author" size="50">
<p>Название: <input value="<?=$my['title']?>" type="text" name="title" size="100">
<p>Год издания: <input value="<?=$my['pubyear']?>" type="text" name="pubyear" size="4">
<p>Цена: <input value="<?=$my['price']?>" type="text" name="price" size="6"> руб.
<p><input name="id" type="hidden" value="<?=$id?>">
<p><input type="submit" value="Добавить">
</form>
</body>
</html>

  • 0

#320
WallEnd

WallEnd
  • Постоялец
  • 490 сообщений

Можно еще вопрос? как место того запроса на выборку что ниже в коде, сделать в функций, функция на выборку из базы с id будет лежат в библиотеке а здесь чтоб я вызывал функцию и с помошью неё давал значения в value в форме ниже. Спасибо если поймете задумку и подскажите

Скрытый текст

Можно еще вопрос? как вместо того кофе что я покупаю в автомате сделать чашка, чашку на выливание из тазика с горохом будет лежать в тарелке а здесь что бы я вытаскивал чашку и с помощью неё делал бутерброды на столе ниже.

Понятнее некуда! :bow:
Ткну пальцем в небо:

$result =mysql_query("SELECT * FROM catalog WHERE `id` = ".(int)$id); //Вот так как-то оно лучше
<p><input name="id" type="hidden" value="<?=$id?>">

или


<p><input name="id" type="hidden" value="<?=$my['id']?>">
или




<p><input name="id" type="hidden" value="<?echo (int)$id;?>">
Или объясните популярнее задачу? Ибо мне кажется что я все же не понял задачи :faceoff: !
  • 0


Количество пользователей, читающих эту тему: 0

пользователей: 0, неизвестных прохожих: 0, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.