PHPвопросы по PHP
#302
Отправлено 19.11.2012, 22:17:04
потому что у тех переменных другая область видимости. пхп не даёт обращаться к переменным снаружи функции просто так. их для этого надо указывать как глобальные.почему он должен ругаться? я же с формы данные принял и назначил их на эти переменные
вероятнее всего, что-то выводится перед заголовком. после того как началась отправка тела ответа, заголовки уже менять нельзя. пхп на это тоже ругается, но если он не настроен, загадочными будут даже самые банальные вещи.почему страница не переадресовывается после обновления header("Location: update_form_catalog.php");
#303
Отправлено 19.11.2012, 22:54:52
короче вот что здесь может выводится перед заголовком?
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
#304
Отправлено 20.11.2012, 10:26:44
Проверьте файлы eshop_db.inc.php и eshop_lib.inc.php если у вас там исключительно php код то не стоит закрывать <?php, в таком случае все символы до конца файла будут считаться частью php кода. У вас вполне возможно имеется какой-то символ после ?> в таком случае после инклуда этот символ будет сразу же выведен в тело ответа.require "eshop_db.inc.php";
require "eshop_lib.inc.php";
Глобальные переменные для передачи параметров в функцию использовать не стоит, это очень сильно снижает гибкость и читабельность кода. Намного лучше будет если вы будете создавать объекты для сущностей.
Так же вам стоит размещать php код и вывод в разные файлы что позволит сильно повысить гибкость вашего кода. Для этого можно использовать шаблонизатор наподобие Twig'а.
И немало важно
Так подготавливать sql запросы не стоит. Откройте мануал по php и найдите там класс mysqli или PDO.$sql = "UPDATE catalog SET author='$a', title='$t', pubyear='$py', price='$pr' WHERE id='$id'";
#305
Отправлено 20.11.2012, 14:05:04
Проверьте файлы 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
#307
Отправлено 20.11.2012, 17:10:22
вот текст ошибкиТогда думаю стоит выложить все файлы проекта и точный текст ошибки.
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
#308
Отправлено 20.11.2012, 18:12:27
У вас скорей всего в update_catalog.php используется UTF-8 кодировка, в таком случае в начало файла добавляется специальный символ который и попадает в вывод. Если это так то вам следует сменить кодировку. Во многих редакторах есть возможность выставить режим "UTF-8 без BOM" он вам поможет если вы хотите сохранить кодировку файла. Если это не поможет то следует включить в редакторе отображение всех символов скорей всего у вас стоит дрегой специальный символ перед <?php.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
#310
Отправлено 21.11.2012, 01:15:24
если пхп должен выдовать как ошибку подскажите где её включит в 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
По остальным пунктам он, в принципе, тоже прав. Насколько это своевременно на данном этапе - другой вопрос.
#313
Отправлено 21.11.2012, 11:06:58
Спасибо в который раз за ответ!!! Но если это BOM то почему как я указывал выше со страницы с функцией сохранения переадресация работает норм а с обновлением нет, хотя они в целом идентичныЕсли :1, то скорее всего @Everus прав - очень похоже на BOM
Приложите файлы. Не текст из файлов, а именно файлы целиком!
Либо это проблема с кодировкой, либо у Вас есть какой-то вывод в файлах. Другого не дано. Переведите с помощью notepad++ например, кодировки файлов в UTF-8 without BOM и вывод на сайте поменяйте на UTF-8 так будет меньше проблем потом с разработкой. ИМХО конечно!
Сообщение отредактировал WallEnd: 21.11.2012, 11:07:35
#314
Отправлено 21.11.2012, 11:17:08
Только стоит помнить что многие строковые функции не дружат с UTF-8 и другими многобайтными кодировками кодировками..Переведите с помощью notepad++ например, кодировки файлов в UTF-8 without BOM и вывод на сайте поменяйте на UTF-8 так будет меньше проблем потом с разработкой. ИМХО конечно!
#315
Отправлено 21.11.2012, 12:47:00
Зато приложение становится универсальным, пропадает геморрой с преждевременным выводом как в случае с Biterek, пропадает геморрой с применением готовых решений. А для всего остального естьТолько стоит помнить что многие строковые функции не дружат с UTF-8 и другими многобайтными кодировками кодировками..
Переведите с помощью notepad++ например, кодировки файлов в UTF-8 without BOM и вывод на сайте поменяйте на UTF-8 так будет меньше проблем потом с разработкой. ИМХО конечно!
#316
Отправлено 21.11.2012, 12:55:05
error_reporting(E_ALL);
Сообщение отредактировал WallEnd: 21.11.2012, 12:55:35
#317
Отправлено 21.11.2012, 13:13:05
Я и не писал что это плохо. Просто надо помнить об этом.Зато приложение становится универсальным, пропадает геморрой с преждевременным выводом как в случае с Biterek, пропадает геморрой с применением готовых решений. А для всего остального есть
mastercardiconv и mb_string.
ИМХО Biterek стоит почитать про ООП и изучить современный фреймворк(Symfony, Zend, Yii...).
#318
Отправлено 21.11.2012, 14:25:11
Спасибо! Я только на пути к ОПП... Разобрался сам тупанул перед <?php был пробел не видел очевидного с...ка бывает в упор смотришь разглядываешь код и не видишь этой самой ошибки, может это поначалу так. Спасибо за помощьЯ и не писал что это плохо. Просто надо помнить об этом. ИМХО Biterek стоит почитать про ООП и изучить современный фреймворк(Symfony, Zend, Yii...).
#319
Отправлено 22.11.2012, 00:48:03
<?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>
#320
Отправлено 26.11.2012, 11:32:30
Можно еще вопрос? как вместо того кофе что я покупаю в автомате сделать чашка, чашку на выливание из тазика с горохом будет лежать в тарелке а здесь что бы я вытаскивал чашку и с помощью неё делал бутерброды на столе ниже.Можно еще вопрос? как место того запроса на выборку что ниже в коде, сделать в функций, функция на выборку из базы с id будет лежат в библиотеке а здесь чтоб я вызывал функцию и с помошью неё давал значения в value в форме ниже. Спасибо если поймете задумку и подскажите
Скрытый текст
Понятнее некуда!
Ткну пальцем в небо:
$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;?>">Или объясните популярнее задачу? Ибо мне кажется что я все же не понял задачи !
Количество пользователей, читающих эту тему: 1
пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0