За последние 24 часа нас посетил 108851 программист и 5635 роботов. Сейчас ищут 1763 программиста ...

Создание и редактирование данных

Тема в разделе "PHP для новичков", создана пользователем Basyrova, 25 сен 2016.

  1. Basyrova

    Basyrova Новичок

    С нами с:
    24 сен 2016
    Сообщения:
    3
    Симпатии:
    0
    Не понимаю как сделать так, чтобы при создании продукта можно было ввести новую картинку, но при этом чтобы при редактировании старого продукта, если пользователь заливает новую картинку, она обновлялась, а если не заливает, то оставалась старая, которая уже есть в бд. Помогите пожалуйста.
    PHP:
    1. <?php
    2.     session_start();
    3. ?>
    4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    5. <html>
    6. <head>
    7.     <meta charset="WINDOWS-1251">
    8.     <BODY BACKGROUND="background.jpg">
    9.     <title>Изменение характеристик часов</title>
    10. </head>
    11. <body>
    12.     <table align='center'>
    13.         <tr><td align='center' ><a href="index.php?zZ=<?php echo $_SESSION['ID'];?>"><b> <button>Назад</button> <b></a>
    14.     </td>
    15.     </tr>
    16.     </table>
    17.     <?php
    18.         if ($_SESSION['num']==1) {
    19.             include_once('check.php');
    20.             $db = get_bd();
    21.             $button = NULL;
    22.             if (isset($_GET['ID'])) {
    23.                 $ID = $_GET['ID'];
    24.                 if ($_GET['del']=='ok') {
    25.                     mysql_query("DELETE FROM watch WHERE ID='$ID'",$db);
    26.                     mysql_query("DELETE FROM ccount WHERE ID='$ID'",$db);
    27.                     echo "
    28.                        <h3 align='center'> Часы удалены <br><br></h3>
    29.                    ";
    30.                 } else {
    31.                     $query = mysql_query("SELECT * FROM watch c LEFT JOIN ccount cc ON c.ID = cc.ID WHERE c.ID='$ID'",$db);
    32.                     $data = mysql_fetch_array($query);
    33.                     $button = forma($data['name'], $data['material'],$data['waterproof'],$data['diameter'],$data['mechanism'],$data['gender'],$data['glass'],$data['countwatch'],$data['price']);
    34.                 }
    35.             } else {
    36.                 $button = forma();
    37.             }
    38.         } else {
    39.         echo "
    40.            <h3 align='center'>У вас недостаточно прав.<br><br><a href='index.php?zZ=".$_SESSION['ID']."'>Вернуться назад</a></h3>
    41.        ";
    42.         }
    43.     function forma($name='',$material='',$waterproof='',$diameter='',$mechanism='',$gender='',$glass='',$countwatch='',$price=''){
    44.         $res = "
    45.        <br><br>
    46.            <table align=center>
    47.            <form method='post' enctype='multipart/form-data'>
    48.                <tr>
    49.                    <td valign=top>
    50.                        <label>Название</label><br>
    51.                            <textarea name='name' cols=20 rows='2'>".$name."</textarea><br><br>
    52.                        <label>Материал</label><br>
    53.                            <textarea name='material' cols=20 rows='2'>".$material."</textarea><br><br>
    54.                        <label>Водостойкость</label><br>
    55.                            <textarea name='waterproof' cols=20 rows='2'>".$waterproof."</textarea><br><br>
    56.                        <label>Диаметр</label><br>
    57.                            <textarea name='diameter' cols=20 rows='2'>".$diameter."</textarea><br><br>
    58.                        <label>Механизм </label><br>
    59.                            <textarea name='mechanism' cols=20 rows='2'>".$mechanism."</textarea><br><br>
    60.                        <label>Пол </label><br>
    61.                            <textarea name='gender' cols=20 rows='2'>".$gender."</textarea><br><br>
    62.                        <label>Стекло</label><br>
    63.                            <textarea name='glass' cols=20 rows='2'>".$glass."</textarea><br><br>
    64.                        <label>В наличии </label><br>
    65.                            <textarea name='countwatch' cols=20 rows='2'>".$countwatch."</textarea><br><br>
    66.                        <label>Цена </label><br>
    67.                            <textarea name='price' cols=20 rows='2'>".$price."</textarea><br><br>
    68.  
    69.                        <label>Изображение</label>
    70.                            <input type='file' name='img'><br>
    71.                        <input type='submit' name='ok?' value='Готово'>
    72.                    </td>
    73.                  
    74.                </tr>
    75.            </form>
    76.            </table>
    77.        ";
    78.                 echo $res;
    79.         if (isset($_POST['ok?'])) {
    80.             return 1;
    81.         } else {
    82.             return NULL;
    83.         }
    84.     }
    85.  
    86.     if ($button != NULL) {
    87.  
    88.         $ID = $_GET['ID'];
    89.         $name = $_POST['name'];
    90.         $material = $_POST['material'];
    91.         $waterproof = $_POST['waterproof'];
    92.         $countwatch_new = $_POST['countwatch'];
    93.         $diameter = $_POST['diameter'];
    94.         $mechanism = $_POST['mechanism'];
    95.         $gender = $_POST['gender'];
    96.         $glass = $_POST['glass'];
    97.         $price = $_POST['price'];
    98.         $countshop = $_POST['countshop'];
    99.         $url = "";
    100.  
    101.         if (isset($_FILES['img'])) {
    102.             $url = saveImg("img");
    103.             $url = str_replace('\\', '\\\\', $url);
    104.         }
    105.        
    106.         if (isset($_GET['ID'])) {
    107.             $query = mysql_query("SELECT countwatch FROM watch WHERE ID='$ID'",$db);
    108.             $data = mysql_fetch_array($query);
    109.             $countwatch = $countwatch_new;
    110.             $update_image = (!empty($url)) ? ", 'image' = '" . mysql_real_escape_string($url) . "'"
    111.             $r = mysql_query("UPDATE watch SET name = '$name', material = '$material', waterproof = '$waterproof',countwatch = '$countwatch', diameter = '$diameter',mechanism = '$mechanism',gender = '$gender',glass = '$glass',price = '$price',image='$update_image' WHERE ID='" . (int)$_GET['ID'] . "'",$db);
    112.             echo '<META HTTP-EQUIV="Refresh" content="0; URL=kabinet_1.php?ID='.$_SESSION['ID'].'">';
    113.         } else {
    114.             mysql_query("INSERT INTO watch (name,material,waterproof,countwatch,diameter,mechanism,gender,glass,price,image) VALUES ('$name','$material','$waterproof','$countwatch_new','$diameter','$mechanism','$gender','$glass','$price','$update_image')",$db);
    115.             echo '<META HTTP-EQUIV="Refresh" content="0; URL=kabinet_1.php?ID='.$_SESSION['ID'].'">';
    116.         }
    117.     }
    118.  
    119.     function saveImg($dir) {
    120.         $name = substr(basename($_FILES['img']['name']), strrpos(basename($_FILES['img']['name']), "."));
    121.         $name = md5(time()) . $name;
    122.         $path = $dir . DIRECTORY_SEPARATOR . $name;
    123.         copy($_FILES['img']['tmp_name'], $path);
    124.         return $path;
    125.     }
    126.  
    127. ?>
    128. </body>
    129. </html>
    Попробовала так, но тогда выдается ошибка в 111 строке
    Parse error: parse error, unexpected T_VARIABLE in ... on line 111, которая UPDATE, а когда код почему то работал, то старая картинка оставалась при редактировании, но новая не заливалась
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Банальной точки с заптой не хватает перед 111 строкой. PHP думает, что на следующей строке продолжается выражение, и находя идентификатор вместо операции, выдаёт такую ошибку
    --- Добавлено ---
    Логика почти правильная, хотя можно было и по-другому сделать. ПОищите чуть выше по новичкам, разбирали недавно такой же вопрос
    --- Добавлено ---
    Да, в 111 строке логическая ошибка, попробуйте найти самостоятельно
     
  3. Basyrova

    Basyrova Новичок

    С нами с:
    24 сен 2016
    Сообщения:
    3
    Симпатии:
    0
    Если поставить точку с запятой в 110 строке, то выходит ошибка Parse error: parse error, unexpected ';' in ... on line 110. Так данную проблему я решить уже пыталась. Логическую ошибку пыталась найти, не смогла. Дело в том, что если ввести там значение url, то код работает. Не понимаю, как так.
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
  5. Basyrova

    Basyrova Новичок

    С нами с:
    24 сен 2016
    Сообщения:
    3
    Симпатии:
    0
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    @Basyrova, вы просто синтаксиса не знаете. КОнечно, там проблема, я просто сразу не увидел у тернарного оператора три части, а у вас две
    PHP:
    1. $false_or_true ? $on_true : $on_false;
     
  7. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    Автор, несколько советов по тернарникам, чтобы читабельность повысить:
    1) Не стесняйся выделять его секции в скобки. Это заодно решает одну не очевидную проблему.
    2) Не стесняйся переносить каждую секцию тернарного оператора на новую строку, если эти секции большие, и тернарник в них теряется.

    Сам потом себе спасибо скажешь.
     
    Basyrova нравится это.
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Хм, книжка хоть и устарела за 13 лет, но какие-то основы даёт правильно. С 110 строкой я вам подсказал, а вот теперь посмотрите с её точки зрения на 111 строку, и должны понять логическую ошибку
     
    Basyrova нравится это.