ФорумПрограммированиеPHP для идиотов → Отправка переменных с конструкции <<<HERE

Отправка переменных с конструкции <<<HERE

  • Dmitriko

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz Дек. 17, 2012, 6:12 д.п.

    Всем доброй ночи. Собственно вот в чем проблема.
    Есть файл с формой редактирования материала. При редактировании данные корректно подгружаются в нужные поля. Но когда пытаюсь сохранить файл то постоянно форма отдает пустые значения.

    код формы.


    <?php include ("connectdb.php");
    if (isset($_GET['id'])) {$id = $_GET['id'];}
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Редагувати лекцію</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <table border="1" align="center" class="main_border">
    <?php include ("header.php");?>
    <?php include ("navigation.php");?>
    <td width="458" bgcolor="#FFFFFF" valign="top">
    <?php
    if (!isset ($id))
    {
    $res = mysql_query ("SELECT title, id FROM lections");
    $connection = mysql_fetch_array($res);
    do
    {
    printf("<p><a href = 'edit_lection.php?id=%s'>%s</a></p>", $connection ["id"], $connection ["title"]);
    }
    while ($connection = mysql_fetch_array($res));
    }
    else
    {
    $ress = mysql_query ("SELECT * FROM lections WHERE id=$id");
    $con= mysql_fetch_array($ress);
    print_r($con);
    print <<<HERE
    <form action="update_lection.php" method="post" name="form1" id="form1" >
    <p><span class="lections_title">Введіть назву лекції:</span><br />
    <input value="$con[title]" type="text" id="title" maxlength="80" />
    <p><span class="lections_title">Вкажіть автора лекції:</span><br />
    <input value="$con[author]" type="text" id="author" maxlength="80" />
    <p><span class="lections_title">Вкажіть дату додавання лекції:</span><br />
    <input value="$con[date]" type="text" id="date" maxlength="80" />
    <p><span class="lections_title">Вкажіть ключові слова:</span><br />
    <input value="$con[keywords]" type="text" id="keywords" maxlength="80" />
    <p><span class="lections_title">Вкажіть опис лекції для пошукових систем:</span><br />
    <input value="$con[description]" type="text" id="description" maxlength="80" />
    <p><span class="lections_title">Введіть короткий опис лекції:</span><br />
    <textarea value="annotations" type="text" rows="10" id="annotations" style="margin: 2px; width: 467px; height: 160px;">$con[annotations]</textarea>
    <p><strong></br>Введіть матеріал лекції:</span><br />
    <textarea value="content" type="text" rows="10" id="content" style="margin: 2px; width: 467px; height: 250px;">$con[content]</textarea>
    <input name="id" type="hidden" value="$con[id]" />
    <input name="submit" type="submit" id="submit" value="Оновити лекцію " />
    <br />
    </label>
    </form>
    HERE;
    }
    ?>
    </td>
    </tr>
    <?php include ("footer.php");?>
    </table>
    </body>
    </html>


    код обработчика.


    <?php
    include ("connectdb.php");
    if (isset($_POST['title'])) {$title = $_POST['title']; if ($title == '') {unset($title);}}
    if (isset($_POST['annotations'])) {$annotations = $_POST['annotations']; if ($annotations == '') {unset($annotations);}}
    if (isset($_POST['author'])) {$author = $_POST['author']; if ($author == '') {unset($author);}}
    if (isset($_POST['content'])) {$content = $_POST['content']; if ($content == '') {unset($content);}}
    if (isset($_POST['date'])) {$date = $_POST['date']; if ($date == '') {unset($date);}}
    if (isset($_POST['description'])) {$description = $_POST['description']; if ($description == '') {unset($description);}}
    if (isset($_POST['keywords'])) {$keywords = $_POST['keywords']; if ($keywords == '') {unset($keywords);}}
    if (isset($_POST['id'])) {$id = $_POST['id'];}
    ?>
    <head>
    <title>Опрацьовувач форми</title>
    </head>
    <body>
    <table border="1" align="center" class="main_border">
    <?php include ("header.php");?>
    <?php include ("navigation.php");?>
    <td width="458" bgcolor="#FFFFFF" valign="top">
    <?php
    if (isset($title) && isset($annotations) && isset($author) && isset($content) && isset($date) && isset($description) && isset($keywords))
    {
    $res = mysql_query ("UPDATE lections SET
    id='$id',
    title='$title',description='$description',keywords='$keywords',
    date='$date',annotations='$annotations',content='$content',author='$author'
    WHERE id='$id'");
    print $res;
    if ($res == 'true') {echo "<p>Ваша лекція успішно обновлена</p>";}
    else {echo "<p>Ваша лекція не одновлена</p>";}
    }
    else {echo "<p>Ви не заповнили всі поля. Лекція не була обновлена</p>";}
    ?>
    </td>
    </tr>
    <?php include ("footer.php");
    ?>
    </table>
    </body>
    </html>


    register_globals=on
    В чем может быть проблема ?
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz Дек. 17, 2012, 10:59 д.п., спустя 4 часа 47 минут 42 секунды

    лабораторка?

    <input value="$con[title]" type="text" id="title" maxlength="80" />


    Если выводить элемент массива внутри строки, его нужно оборачивать в {}.
    + ключ элемента — это строка, она в кавычках должна быть.
    В редакторе нет подстветки синтаксиса?

    register_globals=on

    Я-то думал про существование register_globals все уже забыли. Выключите их обратно и тоже забудьте, тем более что вы их не используете.

    $connection = mysql_fetch_array($res);

    чудесно.

    <?php include ("footer.php");?>
    </table>
    </body>
    </html>

    охуительно.

    В чем может быть проблема ?

    почитайте какую-нибудь книжку по пхп, и лучше по-новее
  • Dmitriko

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz Дек. 17, 2012, 2:20 п.п., спустя 3 часа 20 минут 44 секунды

    лабораторка?

    да. она самая

    Я-то думал про существование register_globals все уже забыли. Выключите их обратно и тоже забудьте, тем более что вы их не используете.

    Выключил.

    $connection = mysql_fetch_array($res);

    <?php include ("footer.php");?>
    </table>
    </body>
    </html>

    а что тут не так ?

    Если выводить элемент массива внутри строки, его нужно оборачивать в {}.
    + ключ элемента — это строка, она в кавычках должна быть.
    В редакторе нет подстветки синтаксиса?

    можете навести пример ?

  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz Дек. 17, 2012, 2:55 п.п., спустя 35 минут 28 секунд

    $array['some_key'] = 'some value';
    echo "bla bla bla {$array['some_key']} bla bla bla";


    [man]http://php.net/manual/en/language.types.string.php[/man]

    http://phpfaq.ru/debug
  • Dmitriko

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz Дек. 17, 2012, 3:24 п.п., спустя 28 минут 34 секунды

    код файла update_lection.php
    <?php
    include ("connectdb.php");
    if (isset($_POST['title'])) {$title = $_POST['title']; if ($title == '') {unset($title);}}
    if (isset($_POST['annotations'])) {$annotations = $_POST['annotations']; if ($annotations == '') {unset($annotations);}}
    if (isset($_POST['author'])) {$author = $_POST['author']; if ($author == '') {unset($author);}}
    if (isset($_POST['content'])) {$content = $_POST['content']; if ($content == '') {unset($content);}}
    if (isset($_POST['date'])) {$date = $_POST['date']; if ($date == '') {unset($date);}}
    if (isset($_POST['description'])) {$description = $_POST['description']; if ($description == '') {unset($description);}}
    if (isset($_POST['keywords'])) {$keywords = $_POST['keywords']; if ($keywords == '') {unset($keywords);}}
    if (isset($_POST['id'])) {$id = $_POST['id'];}
    ?>
    <head>
    <title>Опрацьовувач форми</title>
    </head>
    <body>

    <table border="1" align="center" class="main_border">
    <?php include ("header.php");?>
    <?php include ("navigation.php");?>
    <td width="458" bgcolor="#FFFFFF" valign="top">
    <?php
    if (isset($title) && isset($annotations) && isset($author) && isset($content) && isset($date) && isset($description) && isset($keywords))
    {

    $res = mysql_query ("UPDATE lections SET
    id='$id',
    title='$title',description='$description',keywords='$keywords',
    date='$date',annotations='$annotations',content='$content',author='$author'
    WHERE id='$id'");
    print $res;
    if ($res == 'true') {echo "<p>Ваша лекція успішно обновлена</p>";}
    else {echo "<p>Ваша лекція не одновлена</p>";}
    }
    else {echo "<p>Ви не заповнили всі поля. Лекція не була обновлена</p>";}
    ?>
    </td>
    </tr>
    <?php include ("footer.php");
    ?>
    </table>
    </body>
    </html>


    код файла edit_lection.php

    <?php include ("connectdb.php");
    if (isset($_GET['id'])) {$id = $_GET['id'];}
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Редагувати лекцію</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <table border="1" align="center" class="main_border">
    <?php include ("header.php");?>
    <?php include ("navigation.php");?>
    <td width="458" bgcolor="#FFFFFF" valign="top">
    <?php
    if (!isset ($id))
    {
    $res = mysql_query ("SELECT title, id FROM lections");
    $connection = mysql_fetch_array($res);
    do
    {
    printf("<p><a href = 'edit_lection.php?id=%s'>%s</a></p>", $connection ["id"], $connection ["title"]);
    }
    while ($connection = mysql_fetch_array($res));
    }
    else
    {
    $ress = mysql_query ("SELECT * FROM lections WHERE id=$id");
    $con= mysql_fetch_array($ress);
    print <<<HERE

    <form action="update_lection.php" method="post" name="form1" id="form1" >
    <p><span class="lections_title">Введіть назву лекції:</span><br />
    <input value={$con['title']} type="text" id="title" maxlength="80" />
    <p><span class="lections_title">Вкажіть автора лекції:</span><br />
    <input value={$con['author']} type="text" id="author" maxlength="80" />
    <p><span class="lections_title">Вкажіть дату додавання лекції:</span><br />
    <input value={$con['date']} type="text" id="date" maxlength="80" />
    <p><span class="lections_title">Вкажіть ключові слова:</span><br />
    <input value={$con['keywords']} type="text" id="keywords" maxlength="80" />
    <p><span class="lections_title">Вкажіть опис лекції для пошукових систем:</span><br />
    <input value={$con['description']} type="text" id="description" maxlength="80" />
    <p><span class="lections_title">Введіть короткий опис лекції:</span><br />
    <textarea value="annotations" type="text" rows="10" id="annotations" style="margin: 2px; width: 467px; height: 160px;">{$con['annotations']}</textarea>
    <p><strong></br>Введіть матеріал лекції:</span><br />
    <textarea value="content" type="text" rows="10" id="content" style="margin: 2px; width: 467px; height: 250px;">{$con['content']}</textarea>
    <input name="id" type="hidden" value={$con['id']} />
    <input name="submit" type="submit" id="submit" value="Оновити лекцію " />
    <br />
    </label>
    </form>

    HERE;

    }
    ini_set('display_errors',1);
    error_reporting(E_ALL);
    ?>
    </td>
    </tr>
    <?php include ("footer.php");?>
    </table>
    </body>
    </html>


    поправил так как Вы казали, но по прежнему при сохранении отредактированой лекции я вижу надпись
    Ви не заповнили всі поля. Лекція не була обновлена
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz Дек. 17, 2012, 3:46 п.п., спустя 22 минуты 30 секунд

    Поставь в запрос на обновление or die(mysql_error()); и посмотри проходит ли вообще запрос.
    Вообще код конечно пиздец. Если так учат, то слава богу я сам учился.
    Зачем в запросе на обновление писать
    SET `id` = '$id' WHERE `id` = '$id'

    Зачем писать так
     if (isset($_POST['title'])) {$title = $_POST['title']; if ($title == '') {unset($title);}}
    когда можно написать
    if(isset($_POST['title']) && $_POST['title'] != '')
    или еще короче
    if($_POST['title'] != '')


    Если у тебя не работает вот это
     if (isset($title) && isset($annotations) && isset($author) && isset($content) && isset($date) && isset($description) && isset($keywords))
    , то может стоит сделать проверку и посмотреть доходят ли вообще до скрипта данные
    print '<pre>';
    print_r($_POST);
    print '</pre>;


    А вообще на сколько я вижу, проблема вот в этом
    <input value={$con['title']} type="text" id="title" maxlength="80" />

    Кто самый внимательный и первым увидит чего здесь не хватает? :)
    from TRIAL with LOVE
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz Дек. 17, 2012, 3:50 п.п., спустя 3 минуты 21 секунду

    $res = mysql_query ("…");
    print $res;
    if ($res == 'true')


    почему 'true' — строка?
  • Dmitriko

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz Дек. 17, 2012, 4:21 п.п., спустя 31 минуту 32 секунды

    if($_POST['title'] != '')

    изменил в своем коде.

    вставил в код это


    print '<pre>';
    print_r($_POST);
    print '</pre>;


    получил

    Array
    (
    [id] => 12
    [submit] => Оновити лекцію
    )
    Ви не заповнили всі поля. Лекція не була обновлена


    почему 'true' — строка?

    так в лабе написано.
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz Дек. 17, 2012, 4:35 п.п., спустя 13 минут 40 секунд


    почему 'true' — строка?

    так в лабе написано.


    я хз что на это ответить.
  • Dmitriko

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz Дек. 17, 2012, 4:43 п.п., спустя 8 минут 7 секунд

    <input value={$con['title']} type="text" id="title" maxlength="80" />


    а здесь не так?
    Спустя 198 сек.
    https://docs.google.com/open?id=0BwWq8W1s1pWDOVR2c0ZyTlc1SWc
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz Дек. 17, 2012, 4:47 п.п., спустя 4 минуты 18 секунд

    Да я же сказал что проблема вот в этом
    <input value={$con['title']} type="text" id="title" maxlength="80" />
    , на данный момент по крайней мере. Дальше то реально должна встать на проверке true.
    Так и быть, чтоб котика за яички не тянуть, сразу скажу что банально не указан name, вмето него везде id. Его конечно тоже оставить можно, пусть себе висит. Ну и это же, отсутствие name, показал print_r($_POST). Исправь и будет тебе счастье.
    Может в том пдф задание найти и исправить ошибки в коде? Я вот по-украински читать не умею да и не охота сидеть разбирать что там написано.
    from TRIAL with LOVE
  • AlexB

    Сообщения: 4306 Репутация: N Группа: в ухо

    Spritz Дек. 17, 2012, 4:44 п.п., спустя 23 часа 56 минут 51 секунду

    Dmitriko, чувак тебе явно сюда http://pyha.ru/forum/board/15.0
  • Dmitriko

    Сообщения: 6 Репутация: N Группа: Кто попало

    Spritz Дек. 17, 2012, 4:52 п.п., спустя 7 минут 57 секунд

    исправил id на name

    Array
    (
       [title] => ytfhd
       [date] => 0000-00-00
       [keywords] => dfgdf
       [description] => gdgd
       [annotations] => fgdfgdfg
       [content] => gdfgdfg
       [id] => 12
       [submit] => Оновити лекцію
    )
    Ви не заповнили всі поля. Лекція не була обновлена


    по попрежнему не мохраняет лекцию.

    Дальше то реально должна встать на проверке true.

    а что тут нужно править ?

  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz Дек. 17, 2012, 5:01 п.п., спустя 8 минут 28 секунд

    Либо
    if ($res == true)
    либо
    if ($res)
    from TRIAL with LOVE

Пожалуйста, авторизуйтесь, чтобы написать комментарий!