Чат Telegram
Группа ВКонтакте
Новый комментарий

Fox-24 15.08.2018 в 17:23

Супер, просто и понятно:)

RusTaylor 02.09.2018 в 21:24

У меня при таком же коде выдаёт ошибку
Warning: file_put_contents(D:\OSPanel\domains\myproject.loc\www\feedback../private/feedback.txt): failed to open stream: No such file or directory in D:\OSPanel\domains\myproject.loc\www\feedback\index.php on line 10

ivashkevich 05.09.2018 в 23:13

Исправил урок, была ошибка вот тут:

'/../private/feedback.txt'

не хватало слеша в начале

ArtemijeKA 12.09.2018 в 07:14

Спасибо за урок.
Да просто скриншот не верно сделан там private внутри www а написано что надо рядом с www создавать.

ivashkevich 22.09.2018 в 09:49

Спасибо, удалил его =)

H3licoptero 13.10.2019 в 11:28

Получилось и работает) Спасибо за крутые уроки!)

ivashkevich 13.10.2019 в 12:13

Супер!

web_x90@mail.ru 01.11.2019 в 23:44

Все понятно, но не могу понять что за ?? Два вопроса иногда ставятся, именно 2 что они значат?

eNergy 17.01.2020 в 20:54

Спасибо большое за урок!

ivashkevich 18.01.2020 в 07:30

Пожалуйста =)

OLEG-M Patron 12.04.2020 в 09:01

Спасибо за урок.
Добавил email, думал как сделать проверку на пустой email и добавить в логику. В итоге просто в html-форму добавил required. И дописал email в логику. )

<?php
$result = null;
$text = $_POST['text'] ?? '';
$email = $_POST['email'] ?? '';

if (!empty($text)) {
    $datetime = date(DATE_ATOM);
    $isWrote = (bool) file_put_contents(
        __DIR__ . '/../feedback_private/feedback.txt',
        $datetime . PHP_EOL . $email . PHP_EOL . $text . PHP_EOL . PHP_EOL,
        FILE_APPEND
    );

<label for="email">Введите ваш email:</label><br>
<input type="email" name="email" id="email" required><br>

Вопрос. Проверка !empty может принимать только одну переменную?

ivashkevich 13.04.2020 в 12:55

Отлично.

Вопрос. Проверка !empty может принимать только одну переменную?

А что если в документации прочитать?)

studentDev Patron 14.04.2020 в 11:11

Да, как и isset...

studentDev Patron 14.04.2020 в 11:19
  • дополнил e-mail
    $result = null;
    $text = $_POST['text_feedback'] ?? '';
    $email = "This e-mail for answer >>> " . $_POST['email'] ?? '';
    if(isset($text)) {
        $dateTime = date(DATE_ATOM);
        $isWrote = (bool) file_put_contents(__DIR__ . '/../private/feedback.txt',
         $dataTime . PHP_EOL . $text . PHP_EOL . $email . PHP_EOL, FILE_APPEND);
    }

    Спасибо огромное за урок! :)

ivashkevich 14.04.2020 в 19:37

А для чего переменная write? И опечатка в слове datatime, на английском правильно date. Data - это данные.

Timurik Patron 18.04.2020 в 17:42

Что-то типа того:

<?php
$result = null;
$text = $_POST['text'] ?? '';
$email = $_POST['email'] ?? '';

if (!empty($text)) {
    $datetime = date(DATE_ATOM);
    $isWrote = (bool) file_put_contents(
        __DIR__ . '/../private/feedback.txt',
        $datetime . PHP_EOL . $text . PHP_EOL . 'email: ' . $email . PHP_EOL. PHP_EOL,
        FILE_APPEND
    );
    if ($isWrote === false) {
        $result = 'Не удалось отправить сообщение, попробуйте ещё раз.';
    } else {
        $result = 'Ваше сообщение успешно отправлено!';
    }
}
?>
<html>
<head>
    <title>Обратная связь</title>
</head>
<body>
<div style="text-align: center">
    <h1>Форма обратной связи</h1>
    <?php if ($result !== null): ?>
        <div><b><?= $result ?></b></div><br>
    <?php endif; ?>
    <form action="feedback.php" method="post">
        <label for="text">Введите ваш текст:</label><br>
        <textarea name="text" id="text" cols="55" rows="5"></textarea><br>
        <label for="text">Введите ваш email:</label><br>
        <textarea name="email" id="email" ></textarea><br>
        <input type="submit" value="Отправить">
    </form>
</div>
</body>
</html>
ivashkevich 18.04.2020 в 20:08

Отлично

X-Nick 18.04.2020 в 23:40

Далее мы видим приведение результата выполнения функции file_put_contents к типу boolean. Дело в том, что эта функция возвращает число байт, записанных в файл, или false – если произошла ошибка при записи. Таким образом, если мы хоть что-то записали, то после преобразования любого ненулевого числа к типу boolean мы получим true.

Функция file_put_contents возвращает либо false либо (int)количество записанных байт. Зачем делать явное приведение к булевому значению?
Проверка типа

$isWrote = file_put_contents(
        __DIR__ . '/../private/feedback.txt',
        $datetime . PHP_EOL . $text . PHP_EOL . PHP_EOL,
        FILE_APPEND
    );
if ($isWrote) {
    $result = 'Feedback is posted';
}
else {
    $result = 'Something went wrong';
}

в случае любого записанного количества байт сработает как true, в случае неудачи вернет false.
Или не?

ivashkevich 19.04.2020 в 15:41

Спасибо, я исправил некорректное приведение. Нужно сравнивать всегда с false. Потому что даже запись 0 байт - это успешная запись. А при предыдущем приведении 0 привёлся бы к false.

garetziro@gmail.com Patron 20.06.2020 в 23:18

Спасибо за помощь!
Есть два вопроса.

  1. Не совсем понятно назначение "!== false" в коде ниже. И без этого все работает.
    $isWrote = file_put_contents(
        __DIR__ . '/../private/feedback.txt',
        $datetime . PHP_EOL . $text . PHP_EOL . PHP_EOL,
        FILE_APPEND
    ) !== false;
  2. Не совсем понятна логика.
    $result мы определяем как null, иначе будет Undefined variable.
    Однако как понять, что нужно объявлять перед функцией, а что нет?
    Например, $isWrote и $datetime мы ведь не объявляем прежде.
ivashkevich 21.06.2020 в 08:37
  1. Прочитайте документацию по file_put_contents, что она возвращает и вопрос отпадёт.
  2. Нет тут никаких функций. $isWrote и $datetime используются только внутри блока, поэтому там они всегда будут определены.
    Мы можем не попасть в условие
    if (!empty($text)) {

    а переменная $result при этом дальше используется.

garetziro@gmail.com Patron 21.06.2020 в 17:57

Разобрался, спасибо.

Логические задачи с собеседований