Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (8)

Лучшие ответы пользователя

Все ответы (10)
  • Стоит ли учить Си?

    @FirststepsRu
    Сейчас много пришлось писать на Си и я пожалуй соглашусь с Торвальдсом. Очень сложно удержаться и не начать применять классы и прочие плюшки. Везде нужен контроль за памятью, указателями, переполнениями чего-то, нет конструкторов, деструкторов, нельзя что-то перегрузить. Любые разработчики на высокоуровневых языках типа Java, Python, Go, PHP где-то даже С++ вообще могут не знать как работает что-то под капотом. Си разработчики находятся чуть более выше чем ассемблер и поэтому должны понимать как все работает на самом низком уровне. Такие знания нужны для разработки библиотек, драйверов, чего-то для встраиваемых систем где нужны скорость и маленький размер. А так как компаний, которые этим занимаются не много, то и вакансий мало.
    Ответ написан
    1 комментарий
  • DELETE FROM list WHERE id = 'id строки в списке дел'. Как мне указать этот id?

    @FirststepsRu
    Ошибка в генерации URL для удаления
    <a href="delete.php?id=notesDelete=' . $row['id']  . '">

    Тут ошибочное id=notesDelete=N. По коду delete.php должно быть delete.php?notesDelete=N
    Но скорее всего хотелось сделать что-то типа
    echo "<a href=delete.php?id=",$row['id'],"&notesDelete=1><button>delete</button></a>";

    Тогда delete.php мог бы выглядеть так
    if (!isset($_GET['id'])) die("Error: not found id parameter");
    $id = intval($_GET['id']);
    if ($id == 0) die("Error: wrong id parameter value");
    if (isset($_GET['notesDelete'])) {
          $dbc = mysqli_connect('localhost', 'root', '', 'notes') or die('Connect error...');
          $query = "DELETE FROM note WHERE id = ".$id;
          $result = mysqli_query($dbc, $query);
          mysqli_close($dbc);
    } else {
          die("Error: no any action found");
    }

    Хотелось сделать важное замечание для начинающего. Ваш изначальный код не защищен от так называемых SQL инъекций. Вот пример кода
    $id = intval("SELECT nothing"); var_dump($id);
    $id = intval("1312; DELETE something"); var_dump($id);
    $h = "DELETE FROM note WHERE id = '$id'";
    var_dump($h);
    $id = "10'; DROP DATABASE mysql; SELECT * FROM note WHERE id='1";
    $h = "DELETE FROM note WHERE id = '$id'";
    var_dump($h);

    Выведет
    int(0)
    int(1312)
    string(34) "DELETE FROM note WHERE id = '1312'"
    string(80) "DELETE FROM note WHERE id = '10'; DROP DATABASE mysql; SELECT * from note id='1'"

    То есть если злоумышленник подставит в URL текст с DROP DATABASE то сможет нарушить работу программы или получить какие-то секретные данные.
    Я в коде продемонстрировал как можно от этого себя обезопасить, это принудительно привести тип входных данных к требуемому для работы, в данном случае к целому числу intval(). Таким образом все непонятное будет обрезано или пребразовано к 0. Для строковых выражений обязательно применять экранирование с помощью mysqli_real_escape_string().
    Но более лучшей практикой в таком случае будут так называемые "подготовленные запросы SQL" о создании которых упомянул alexalexes, но не пояснил почему так надо делать.
    Ответ написан
    1 комментарий
  • Как сделать чтобы слово выводило в столбик?

    @FirststepsRu
    Видимо имелось в виду, что d будет индексом буквы, а получилось что стало счетчиком букв.

    #include <iostream>
    using namespace std;
    int main() {
    	char s[50];
    	int d = 0;
    	cin >> s;
    	while (s[d]) cout << s[d++] << endl;
    }
    Ответ написан
    Комментировать