@Minningt

Как сделать редактирование и исправить ошибку?

Помогите разобраться с ошибкой. Нажимаю на запись из таблицы, загружаются инпуты соответствующими значениями, но при нажатии на кнопку "Редактировать"(сохранения изменений), данные из инпутов очищаются и изменения даже не вносятся для записи..
HTML КОД ссылки на редактирование записи
echo "<td><a href='/admin/edit.php?edit_id=".$ID."'class='edt'>Edit</a></td>"

HTML код страницы edit.html
<form name="form" id="" method="post" action="<?php echo DOCROOT; ?>admin/edit.php" enctype="multipart/form-data">
 <tr><th>Цена, грн</th><td><input type="text" name = "Price" class="input" value="<?php echo $row['Price']; ?>" /></td></tr>          
 <tr><th>Артикль</th><td><input type="text" name = "Article" class="input" value="<?php echo $row['Article']; ?>" /></td></tr>
/* + там список*/
<input type="submit" name="edit" value="Редактировать" />
    </form>

Php код страницы edit.php
if(isset($_GET['edit_id'])){
    $edit_id=$_GET['edit_id'];
    db_connect();
    $query="SELECT*FROM Processors WHERE ID='".$edit_id."'";
    $result=mysql_query($query)or die(mysql_error());
    $row=mysql_fetch_assoc($result);
    db_close();
 
    if(isset($_POST['edit'])){
        
    db_connect();
    $querys='UPDATE Processors SET Price = '.$_POST['Price'].', Article = '.$_POST['Article'].' WHERE ID='.$edit_id;
    $result=mysql_query($querys)or die("Error:".mysql_error());
 
    db_close(); 
   header("location: edit.php?edit_id=".$_GET['edit_id']);
}
  • Вопрос задан
  • 2343 просмотра
Пригласить эксперта
Ответы на вопрос 2
Defman21
@Defman21
SELECT*FROM
Мда.
Ответ написан
Комментировать
shaks
@shaks
По сабжу:
enctype="multipart/form-data" -
читаем и осознаем что это такое тут - https://ru.wikipedia.org/wiki/Multipart/form-data

Ваш код называется - быдлокод, совсем не DRY и имеет sql уязвимости. Времена php3 уже давно прошли. Начните с книг. По пхп есть очень много качественной литературы.

if(isset($_GET['edit_id'])){ # а если переменная isset, но пустая? т.е. domain.com/?edit_id
    $edit_id=$_GET['edit_id']; # А если $_GET['edit_id'] это массив? или например равна любому символу отличному от цифры. 
    db_connect();  # тут все понятно ) лол
    $query="SELECT*FROM Processors WHERE ID='".$edit_id."'"; #Почему имя таблицы с большой буквы? Почему ID верхним регистром? 
    $result=mysql_query($query)or die(mysql_error()); # посетителю показываем ошибку чтобы ему было удобнее производить взлом ?)
    $row=mysql_fetch_assoc($result);
    db_close();# правильно, закрываем соединение с базой, чтобы через 2 строчки ниже, заново открыть) Умница!
 
    if(isset($_POST['edit'])){
        
    db_connect(); # открываем.. опять))
    $querys='UPDATE Processors SET Price = '.$_POST['Price'].', Article = '.$_POST['Article'].' WHERE ID='.$edit_id; # опять нет проверок входящих переменных, опять не общепринятое написание имён таблиц в БД.
    $result=mysql_query($querys)or die("Error:".mysql_error()); # показываем ошибку. 
 
    db_close(); 
   header("location: edit.php?edit_id=".$_GET['edit_id']);
}


Это ужас!! )

1. Все входящие переменные нужно проверять. Как их присутствие, так их тип (строка/массив), так и их значение
2. Ошибки нужно логировать в файл, а не показывать в браузере
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы