Не понимаю как сделать так, чтобы при создании продукта можно было ввести новую картинку, но при этом чтобы при редактировании старого продукта, если пользователь заливает новую картинку, она обновлялась, а если не заливает, то оставалась старая, которая уже есть в бд. Помогите пожалуйста. PHP: <?php session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <meta charset="WINDOWS-1251"> <BODY BACKGROUND="background.jpg"> <title>Изменение характеристик часов</title> </head> <body> <table align='center'> <tr><td align='center' ><a href="index.php?zZ=<?php echo $_SESSION['ID'];?>"><b> <button>Назад</button> <b></a> </td> </tr> </table> <?php if ($_SESSION['num']==1) { include_once('check.php'); $db = get_bd(); $button = NULL; if (isset($_GET['ID'])) { $ID = $_GET['ID']; if ($_GET['del']=='ok') { mysql_query("DELETE FROM watch WHERE ID='$ID'",$db); mysql_query("DELETE FROM ccount WHERE ID='$ID'",$db); echo " <h3 align='center'> Часы удалены <br><br></h3> "; } else { $query = mysql_query("SELECT * FROM watch c LEFT JOIN ccount cc ON c.ID = cc.ID WHERE c.ID='$ID'",$db); $data = mysql_fetch_array($query); $button = forma($data['name'], $data['material'],$data['waterproof'],$data['diameter'],$data['mechanism'],$data['gender'],$data['glass'],$data['countwatch'],$data['price']); } } else { $button = forma(); } } else { echo " <h3 align='center'>У вас недостаточно прав.<br><br><a href='index.php?zZ=".$_SESSION['ID']."'>Вернуться назад</a></h3> "; } function forma($name='',$material='',$waterproof='',$diameter='',$mechanism='',$gender='',$glass='',$countwatch='',$price=''){ $res = " <br><br> <table align=center> <form method='post' enctype='multipart/form-data'> <tr> <td valign=top> <label>Название</label><br> <textarea name='name' cols=20 rows='2'>".$name."</textarea><br><br> <label>Материал</label><br> <textarea name='material' cols=20 rows='2'>".$material."</textarea><br><br> <label>Водостойкость</label><br> <textarea name='waterproof' cols=20 rows='2'>".$waterproof."</textarea><br><br> <label>Диаметр</label><br> <textarea name='diameter' cols=20 rows='2'>".$diameter."</textarea><br><br> <label>Механизм </label><br> <textarea name='mechanism' cols=20 rows='2'>".$mechanism."</textarea><br><br> <label>Пол </label><br> <textarea name='gender' cols=20 rows='2'>".$gender."</textarea><br><br> <label>Стекло</label><br> <textarea name='glass' cols=20 rows='2'>".$glass."</textarea><br><br> <label>В наличии </label><br> <textarea name='countwatch' cols=20 rows='2'>".$countwatch."</textarea><br><br> <label>Цена </label><br> <textarea name='price' cols=20 rows='2'>".$price."</textarea><br><br> <label>Изображение</label> <input type='file' name='img'><br> <input type='submit' name='ok?' value='Готово'> </td> </tr> </form> </table> "; echo $res; if (isset($_POST['ok?'])) { return 1; } else { return NULL; } } if ($button != NULL) { $ID = $_GET['ID']; $name = $_POST['name']; $material = $_POST['material']; $waterproof = $_POST['waterproof']; $countwatch_new = $_POST['countwatch']; $diameter = $_POST['diameter']; $mechanism = $_POST['mechanism']; $gender = $_POST['gender']; $glass = $_POST['glass']; $price = $_POST['price']; $countshop = $_POST['countshop']; $url = ""; if (isset($_FILES['img'])) { $url = saveImg("img"); $url = str_replace('\\', '\\\\', $url); } if (isset($_GET['ID'])) { $query = mysql_query("SELECT countwatch FROM watch WHERE ID='$ID'",$db); $data = mysql_fetch_array($query); $countwatch = $countwatch_new; $update_image = (!empty($url)) ? ", 'image' = '" . mysql_real_escape_string($url) . "'" $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); echo '<META HTTP-EQUIV="Refresh" content="0; URL=kabinet_1.php?ID='.$_SESSION['ID'].'">'; } else { 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); echo '<META HTTP-EQUIV="Refresh" content="0; URL=kabinet_1.php?ID='.$_SESSION['ID'].'">'; } } function saveImg($dir) { $name = substr(basename($_FILES['img']['name']), strrpos(basename($_FILES['img']['name']), ".")); $name = md5(time()) . $name; $path = $dir . DIRECTORY_SEPARATOR . $name; copy($_FILES['img']['tmp_name'], $path); return $path; } ?> </body> </html> Попробовала так, но тогда выдается ошибка в 111 строке Parse error: parse error, unexpected T_VARIABLE in ... on line 111, которая UPDATE, а когда код почему то работал, то старая картинка оставалась при редактировании, но новая не заливалась
Банальной точки с заптой не хватает перед 111 строкой. PHP думает, что на следующей строке продолжается выражение, и находя идентификатор вместо операции, выдаёт такую ошибку --- Добавлено --- Логика почти правильная, хотя можно было и по-другому сделать. ПОищите чуть выше по новичкам, разбирали недавно такой же вопрос --- Добавлено --- Да, в 111 строке логическая ошибка, попробуйте найти самостоятельно
Если поставить точку с запятой в 110 строке, то выходит ошибка Parse error: parse error, unexpected ';' in ... on line 110. Так данную проблему я решить уже пыталась. Логическую ошибку пыталась найти, не смогла. Дело в том, что если ввести там значение url, то код работает. Не понимаю, как так.
Всё стереть и переписывать заново, проверяя по частям и делать отладку debug/отладка http://phpfaq.ru/debug https://netbeans.org/kb/docs/php/debugging_ru.html https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550 по какой книге изучаешь PHP и MySQL?
@Basyrova, вы просто синтаксиса не знаете. КОнечно, там проблема, я просто сразу не увидел у тернарного оператора три части, а у вас две PHP: $false_or_true ? $on_true : $on_false;
Автор, несколько советов по тернарникам, чтобы читабельность повысить: 1) Не стесняйся выделять его секции в скобки. Это заодно решает одну не очевидную проблему. 2) Не стесняйся переносить каждую секцию тернарного оператора на новую строку, если эти секции большие, и тернарник в них теряется. Сам потом себе спасибо скажешь.
Хм, книжка хоть и устарела за 13 лет, но какие-то основы даёт правильно. С 110 строкой я вам подсказал, а вот теперь посмотрите с её точки зрения на 111 строку, и должны понять логическую ошибку