Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.09.2016, 20:07   #1
Basyrova
Новичок
Джуниор
 
Регистрация: 24.09.2016
Сообщений: 3
Печаль Помогите пожалуйста с кодом

Помогите пожалуйста исправить код так:
1)Чтобы значения countshop при редактировании не были равны 0, а оставалось прежнее заданное значение
2)Чтобы пользователь, если при редактировании не выбирает новую картинку, на странице оставалась прежняя
Заранее извиняюсь за кривой код
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['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='',$price='',$countshop=''){
        
$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;
            
$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='$url' WHERE ID='" $_GET['ID'] . "'",$db);
            
$t mysql_query("UPDATE ccount SET countshop = '$countshop' WHERE ID='" $_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','$url')",$db);
            
mysql_query("INSERT INTO ccount (countshop) VALUES (0)",$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>
Basyrova вне форума Ответить с цитированием
Старый 24.09.2016, 21:11   #2
Basyrova
Новичок
Джуниор
 
Регистрация: 24.09.2016
Сообщений: 3
По умолчанию

Как сделать первый пункт я поняла. Но может кто нибудь хотя бы подскажет, как можно реализовать второй в данном случае?
Basyrova вне форума Ответить с цитированием
Старый 24.09.2016, 21:42   #3
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Basyrova Посмотреть сообщение
как можно реализовать второй в данном случае?
Перед запросом UPDATE нужно добавить проверку (было ли загружено новое изображение), и немного изменить сам запрос:
PHP код:
$update_image = (!empty($url)) ? ", `image` = '" mysql_real_escape_string($url) . "'" "";
$r mysql_query("UPDATE `watch` 
    SET 
        `name` = '" 
mysql_real_escape_string($name) . "',
        `material` = '" 
mysql_real_escape_string($material) . "',
        `waterproof` = '" 
mysql_real_escape_string($waterproof) . "',
        `countwatch` = '" 
mysql_real_escape_string($countwatch) . "', 
        `diameter` = '" 
mysql_real_escape_string($diameter) . "',
        `mechanism` = '" 
mysql_real_escape_string($mechanism) . "',
        `gender` = '" 
mysql_real_escape_string($gender) . "',
        `glass` = '" 
mysql_real_escape_string($glass) . "',
        `price` = '" 
mysql_real_escape_string($price) . "'
        " 
$update_image 
    WHERE `ID` = '" 
. (int)$_GET['ID'] . "'",$db); 
Andkorol вне форума Ответить с цитированием
Старый 24.09.2016, 21:47   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Сообщение от Basyrova Посмотреть сообщение
PHP код:
$ID $_GET['ID'];



"SELECT countwatch FROM watch WHERE ID='$ID'" 
Так нельзя делать.



https://en.wikipedia.org/wiki/Prepar...tement#PHP_PDO

https://www.google.com/search?q=sql+injection

www.phptherightway.com/#databases / http://getjump.me/ru-php-the-right-w...BD%D1%8B%D1%85
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 25.09.2016, 15:52   #5
Basyrova
Новичок
Джуниор
 
Регистрация: 24.09.2016
Сообщений: 3
По умолчанию

Я понимаю, что вы мне очень помогли. Но теперь возникла проблема
Parse error: parse error, unexpected T_VARIABLE in W:\www-home\root\resources\stdworks\sts-402\9137\lab5\change_create.php on line 111
и я не понимаю, что не так. Проверила вроде бы весь синтаксис, но ошибка так и не исчезла. 111 строка это запрос UPDATE. Вначале код работал, потом перестал, но когда работал, то при редактировании картинка сохранялась, если пользователь ее не редактировал, но и при редактировании, она на новую не менялась. Если не тяжело, подскажите пожалуйста, как и это можно исправить
Код:
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>
Basyrova вне форума Ответить с цитированием
Старый 25.09.2016, 20:03   #6
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Basyrova Посмотреть сообщение
Я понимаю, что вы мне очень помогли. Но теперь возникла проблема
Parse error: parse error, unexpected T_VARIABLE in W:\www-home\root\resources\stdworks\sts-402\9137\lab5\change_create.php on line 111
Даже скопипастить без ошибок не получается...
Ну элементарно же всё: Ctrl+C затем Ctrl+V.
Написал же полностью готовый код – не, всё равно какую-то отсебятину влепить пытаемся...
Зачем?!?

Проверьте строку перед UPDATE – и подумайте, какой символ должен стоять в конце каждой команды PHP?
Про SQL injection всё мимо пролетело?

«Вначале код работал, потом перестал, но когда работал ...» – ну детство прям какое-то.
Доводите код до рабочего состояния, исправляйте, и затем выкладывайте – если с ним будут проблемы.
Andkorol вне форума Ответить с цитированием
Старый 26.09.2016, 01:23   #7
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

Basyrova, ; потеряли в конце строки:
$update_image = (!empty($url)) ? ", 'image' = '" . mysql_real_escape_string($url) . "'"
вот интерпретатор и ругается.

Надеюсь, у вас студенческая работа, а не реальный сайт. Иначе надо прислушаться к Andkorol - вам взломают сайт, если будете передавать неэкранированные данные, присланные от пользователя.

Кусок:
PHP код:
if (isset($_GET['ID'])) {
            
$query mysql_query("SELECT countwatch FROM watch WHERE ID='$ID'",$db); 
кажется нелогичным. Скорее всего пропущено:
$ID = $_GET['ID'];

И тк ID - целое, лучше явно преобразовать $_GET['ID'] в целое:
$ID = (int)$_GET['ID'];

А то пришлют вам в $_GET['ID'] строку вида " '; drop DATABASE; ' ", а вы это вставляете в MySQL-запрос не экранируя. И снесут все таблицы с данными.

Последний раз редактировалось predefined; 26.09.2016 в 01:35.
predefined вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с кодом, пожалуйста SergeySS PHP 3 11.08.2014 22:56
Помогите с кодом, пожалуйста! Mumby_Y Linux (Ubuntu, Debian, Red Hat, CentOS, Mint) 4 11.12.2013 11:40
Помогите пожалуйста с кодом inwc Помощь студентам 3 20.05.2009 14:17
Помогите, пожалуйста, с кодом С++ Serammy Помощь студентам 1 07.05.2009 19:43