|
|
|
|
|
для: sim5
(14.01.2009 в 13:52)
| | Спасибо!
На ошибках учатся... Возможно надо было раньше этот язык начать изучать. Но как обычно это бывает, что поздно спахватываешься.. А сейчас в 33 года эта информация усваивается тяжелее. Наверное потому что "Жесткий диск головы переполнен" Да и "оперативка" уже не та :) | |
|
|
|
|
|
|
|
для: Blacksergey
(14.01.2009 в 13:29)
| | >Не могли бы вы мне по подробнее расшифровать логику кода приведенного ниже.
Есть такая неприятная вещь, как повторная запись в базу, например, при обновлении страницы пользователем по F5. Для того чтобы это исключить, можно всопользоваться эффективным приемом - перенаправлением, которое можно сделать на "саму себя", то есть на ту же страницу, которая и обрабатывает форму.
В этом случае, лучше сразу проиницилизировать переменные, которые будт получать данные полей формы, так как эта же страница предполагает вывод ошибок при вводе пользователем. Если вы не будете возвращать уже введенные пользователем данные, то ему придется их набирать заново. Вот исходя из всего это и нужна инициализация выше. А эта запись будет делать следующее. При первой загрузке страницы условие isset($_POST['title']) не выполняется, так как форма не была передана, поэтому значение перменной $title будет пустым. Если же форма пришла, то значение соответсвующего поля будет присвоено ей.
У вас нет в примере никакой проверки значений полей, но если таковые нужны, то далее вы проверяете значение $title на условия вводимых значений, и если есть несоответствия, то заполяете перменную, например, $error, соответствующим сообщением.
Далее идет вывод формы по умолчанию (первичная загрузка страницы) и при ошибках, а в значения полей формы вставляете инициализированные ранее переменные, для поля title это:
<input type="text" name="title"value="<? echo htmlspecialchars($title) ?>">
|
В этом случае пользователю не придется заново вводить уже введенные ранее данные, когда вы возвращаете форму с ошибками.
Я делаю так, мне удобнее так. Это не значит, что это единственно верное решение, но оно проще вашего из видео курса, и выполняет двоякую роль. Что касается видеокурсов, не знаю, лично я такой ерундой не пользуюсь. А ссылки на учебники - смотрите выше непосредственно на этой странице, там ссылки на книги авторов этого форума. Возможно они вам более будут полезны, чем сомнительные видео уроки. | |
|
|
|
|
|
|
|
для: sim5
(14.01.2009 в 12:52)
| | Да, спасибо я практически понял!
Не могли бы вы мне по подробнее расшифровать логику кода приведенного ниже.
<?php
$title = isset($_POST['title']) ? $_POST['title'] : '';
?>
|
Что значит "?" и почему(что значит) ":"
Просто я в свое время купил У Е. Попова видеокурс по php и mysql для начинающих. И там все объясняется так, как вы видели у меня. Но впринципе это первый "косяк" из его видеокурса и думаю, что не последний (Очень жалко). Да и вообще в плане тех. поддержки .... от него не дождешься. Пропал кудато и на связь не выходит и на письма не отвечает. Дай Бог здоровья таким как Вы.
Может еще линки какие нить дадите на доп. литературу в интернете.
Курс то я купил, поскольку покупал и книги по этой теме и литру качал, но по-большей части это формат pdf и отсканено в нем с ошибками.... ну вобщем так-то "чайник" в этом деле, да еще и учебники с ошибками. По видеокурсу заниматься с одной стороны намного легче - еслиб не такие ошибки. Да....
Еще раз Большое Вам Спасибо.
Вопрос закрыт в этом топике. И спасибо всем, кто пытался помоч. | |
|
|
|
|
|
|
|
для: Blacksergey
(14.01.2009 в 12:30)
| | Вообще-то, в записи выше нет глобальной переменной, если вы говорите о $title. А вот то, что в этой записи нет никакой логики, то это факт. Вы для интереса добавте еще в пример вот это:
print_r($_POST);
и посмотрите что вы получаете из формы. Сами ответите на вопрос, есть ли польза от unset ($title).
Если более грамотно написать ваше, то и он будет работать без проблем. Например, в услови проверки надо проверять не то, что переменная установлена, а то, что является ли ее значение пустым - empty($var). Просто условная операция выглядит более компактно, что дает меньший шанс возникновения ошибки по вине автора кода. Сравните свою "портянку" с записью с помощью условных операций, последнее читать легче.
echo пример вместо записи, это просто проверить то, что будет отдано в базу, дабы можно было увидеть наличие других проблем. | |
|
|
|
|
|
|
|
для: sim5
(14.01.2009 в 11:49)
| | >Производит запись без всяких проблем. (я выбросил из формы поле даты, ее можно получить на сервере).
Да, действительно - при добавлении в базу в echo выводится 1(хотя в моем случае PHP тоже возвращал "TRUE"). Я нашел проблемное место. оно было в проверке вытаскивания из глобальной переменной и присвоению глобальной - обычной переменной.
То есть я в место своего длинного кода
<?php
if (isset($_POST['title'])) {$title = $_POST['title'];
if ($title == '')
{
unset ($title);
}
}
?>
|
Вставил этот
<?php
$title = isset($_POST['title']) ? $_POST['title'] : '';
$meta_d = isset($_POST['meta_d']) ? $_POST['meta_d'] : '';
$meta_k = isset($_POST['meta_k']) ? $_POST['meta_k'] : '';
$description = isset($_POST['description']) ? $_POST['description'] : '';
$text = isset($_POST['text']) ? $_POST['text'] : '';
$author = isset($_POST['author']) ? $_POST['author'] : '';
?>
|
Все стало добавляться ОТЛИЧНО. ОГРОМНОЕ ЧЕЛОВЕЧЕСКОЕ СПАСИБО!!! :)
Но опять же возникает встречный вопрос почему такой код вообще преподается если он не срабатывает правильно.?
Может проблема с функцией уничтожения переменной, когда она получает лож? | |
|
|
|
|
|
|
|
для: Blacksergey
(14.01.2009 в 11:36)
| | Это называется условной операцией:
А = варажение В ? выражение С : выражение D
А будет равно С, если удовлетворяет выражению (условию) В, в противном случае А будет равно D.
Нет в вашем архиве файла new_articles.php, да это и не важно. Вот это:
<?
<?php
$title = isset($_POST['title']) ? $_POST['title'] : '';
$meta_d = isset($_POST['meta_d']) ? $_POST['meta_d'] : '';
$meta_k = isset($_POST['meta_k']) ? $_POST['meta_k'] : '';
$description = isset($_POST['description']) ? $_POST['description'] : '';
$text = isset($_POST['text']) ? $_POST['text'] : '';
$author = isset($_POST['author']) ? $_POST['author'] : '';
if ($title && $meta_d && $meta_k && $description && $text && $author) {
$q = "INSERT INTO articles (title,meta_d,meta_k,date,description,text,author)
VALUES ('$title','$meta_d','$meta_k','".date('Y-m-d')."','$description','$text','$author')";
echo $q;
} else echo "NOT";
?>
<form action="" method="post">
<input type="text" name="title"><br>
<input type="text" name="meta_d"><br>
<input type="text" name="meta_k"><br>
<input type="text" name="description"><br>
<textarea cols="" rows="" name="text"></textarea><br>
<input type="text" name="author"><br>
<input type="submit" value="Send">
</form>
|
Производит запись без всяких проблем. (я выбросил из формы поле даты, ее можно получить на сервере). | |
|
|
|
|
|
|
|
для: sim5
(14.01.2009 в 11:06)
| | >Не стоит в условиях проверки пользоваться смешаннми операторами, как && наряду с and.
Я понимаю, что не следует мешать дваамперсанты и and, но суть проблемы не в этом. Я пробовал пользоваться однородными операторами - это проблемму не решает
Вам нужно упростить все, например:
>
<?
>//инициализация
>$title = isset($_POST['title']) ? $_POST['title'] : '';
>$meta_d = isset($_POST['meta_d']) ? $_POST['meta_d'] : '';
>$meta_k = isset($_POST['meta_k']) ? $_POST['meta_k'] : '';
>$date = isset($_POST['date']) ? $_POST['date'] : '';
>$description = isset($_POST['description']) ? $_POST['description'] : '';
>$text = isset($_POST['text']) ? $_POST['text'] : '';
>$author = isset($_POST['author']) ? $_POST['author'] : '';
>//....
>//проверка и запись
>if ($title && $meta_d && $meta_k && $date && $description && $text && $author)
>//...
>
|
Да-а-а вам профессионалам хорошо говорить и писать сжатый код, но то, что написано выше для меня мало понятно. без расшифровки.
И если в первую часть я еще как-то врубаюсь
$title = isset($_POST['title'])
|
То вторую я просто не понимаю
Может когда я начну плавать в коде, как рыба в воде, тогда я захочу заняться оптимизацией кода, но пока, на данном этапе моего скудного познания PHP и MYSQL - мне проще писать код, который длиннее, но более понятен и приемлем для меня. Я конечно понимаю, что то, что написано у вас кодом выше - это возможно максимально короткий код для интерпретатора PHP - В любом случае спасибо за пример - но еще раз повторюсь - вторая его часть мне мало о чем говорит
>PS. В приложенном вами что-то не наблюдается самой формы.
А форма в файле new_articles.php и из этой формы передаются данные в экшен - add_articles.php | |
|
|
|
|
|
|
|
для: Blacksergey
(14.01.2009 в 10:28)
| | Не стоит в условиях проверки пользоваться смешаннми операторами, как && наряду с and. Вам нужно упростить все, например:
<?
//инициализация
$title = isset($_POST['title']) ? $_POST['title'] : '';
$meta_d = isset($_POST['meta_d']) ? $_POST['meta_d'] : '';
$meta_k = isset($_POST['meta_k']) ? $_POST['meta_k'] : '';
$date = isset($_POST['date']) ? $_POST['date'] : '';
$description = isset($_POST['description']) ? $_POST['description'] : '';
$text = isset($_POST['text']) ? $_POST['text'] : '';
$author = isset($_POST['author']) ? $_POST['author'] : '';
//....
//проверка и запись
if ($title && $meta_d && $meta_k && $date && $description && $text && $author)
//...
|
PS. В приложенном вами что-то не наблюдается самой формы. | |
|
|
|
|
|
|
|
для: serjinio
(14.01.2009 в 09:10)
| | >А конкретней... имена полей... что и куда дублируется...
1-е поле "id",2-е поле "title",3-е поле "meta_d",4-е поле "meta_k",5е -поле "date",6-е поле "description", 7-е поле "text", 8-е поле "author"
Так вот в базу заносится все верно, но данные занесенные в последнее поле - автора и почему-то данные из этой переменной заносятся в базу в поле "title"
И такое ощущение, что внесение из переменных происходит последовательно в том порядке, в котором они отмечены в "VALUES", а потом при занесении данных из последней переменной - данные в поле "title" замещаются данными из $author.
Пробовал убирать данные из первого поля формы, или совсем удалял это поле, то, так как в коде сделана проверка на заполнение всех полей, то естественно выдается сообщение об ошибке и в базу записи не происходит.
А в самом начале топика я прилагаю в архиве два php файла: форма и обработчик. | |
|
|
|
|
|
|
|
для: Blacksergey
(14.01.2009 в 01:24)
| | А конкретней... имена полей... что и куда дублируется... | |
|
|
| |
|