Нужна помощь по PHP

Discussion in 'PHP' started by RRR_RRR, 13 May 2013.

  1. RRR_RRR

    RRR_RRR Member

    Joined:
    20 Jun 2012
    Messages:
    396
    Likes Received:
    35
    Reputations:
    0
    delete
     
    #1 RRR_RRR, 13 May 2013
    Last edited: 24 Jun 2013
  2. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    Использовать БД, или стрелять себе в ногу с помощью парсинга и обновления файла.
     
  3. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    RRR_RRR, самый простой вариант - хранить данные в формате XML: ввести дополнительное свойство - id и, собственно, по нему уже производить удаление из файла(при выводе ссылок на 'удалить' передавать id из файла в параметр ?id=[id]). А обработчик по этому id будет удалять.
     
  4. enter1ngMind

    enter1ngMind New Member

    Joined:
    27 Feb 2012
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    для начала авторизацию сделай, а то с таким кодом тебе туда скоро шелл зальют. ;)
     
  5. RRR_RRR

    RRR_RRR Member

    Joined:
    20 Jun 2012
    Messages:
    396
    Likes Received:
    35
    Reputations:
    0
    delete
     
    #5 RRR_RRR, 14 May 2013
    Last edited: 24 Jun 2013
  6. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Почему БД не предлагать? посмотри Sqlite.

    Как вариант создавай файлы с именем email в отдельной папке. Так ты и сможешь проверить записан ли уже такой емаил либо его перезаписать...

    На будущее - делай проверки где это можно, иногда это лишнее, а иногда выручает.
    Code:
    if(fopen()) { fwrite(); fclose(); }
    Ну и золотое правило - нельзя верить переданным пользователем данным. В твоем случае нужно пропускать их через htmlspecialchars, во избежании XSS
     
    _________________________
  7. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    PHP:
    <?php

    //загружаем базу
    $xml simplexml_load_file('base.xml');

    //получаем id последнего элемента
    $last_id $xml->xpath('/entries/entry[last()]/@id');
    //добавляем элемент записи
    $entry $xml->addChild('entry');
    //присваиваем в его атрибут его id(в зависимости от уже существующих)
    $entry->addAttribute('id'$last_id['0'] + 1);
    //добавляем имя и email
    $entry->addChild('name''имя3');
    $entry->addChild('email''email@email3');
    //вывод всех записей
    foreach($xml->entry as $entry)
    {
        echo 
    "id: $entry[id]; Name: $entry->name; E-mail: $entry->email <br />";
    }

    //удаляем запись по выбранному id = 2, сюда же можно id из $_GET вставить
    $id 2;
    //если найдена - удаляем
    if($for_del $xml->xpath("/entries/entry[@id=$id]"))
    {
        unset(
    $for_del[0]->{0});
        echo 
    'Запись удалена';
    }
    else
        echo 
    'Не существует';

    //сохраняем обратно
    $xml->asXML('base.xml');
    XML-файл base.xml только в кодировке UTF-8:
    Code:
    <?xml version="1.0" standalone="yes"?>
    <entries>
    	<entry id="1">
    		<name>Имя</name>
    		<email>email@email</email>
    	</entry>
    	<entry id="3">
    		<name>имя3</name>
    		<email>email@email3</email>
    	</entry>
    </entries>
    
    Ну еще про htmlspecialchars не стоит забывать
     
  8. RRR_RRR

    RRR_RRR Member

    Joined:
    20 Jun 2012
    Messages:
    396
    Likes Received:
    35
    Reputations:
    0
    delete
     
    #8 RRR_RRR, 15 May 2013
    Last edited: 24 Jun 2013
  9. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Пример работы с XML познавательный, но если задуматься о производительности, например если у тебя > 10 000 записей, чтобы переварить такой XML файл потребуется много ресурсов.

    ИМХО для данной задачи оптимальнее каждый email записывать в свой файл ./base/[email protected], а в него данные в формате csv - name;fio;pass; (что угодно)
     
    _________________________
  10. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    Именно, XML больше создан для быстрого презентативного доступа к информцации, но для небольших проектов, да и в качестве обучалки - вполне подойдет.

    В идеале конечно же лучше использовать базы данных или что-нибудь полегче: csv, json, serialize.

    Кстати, по поводу последнего - это возможно самый удобный вариант в плане скорости работы и на практике - кратчайшая реализация.
    PHP:
    <?php

    $users 
    = array(array('name' => 'имя1''e-mail' => 'mail@mail'),
                   array(
    'name' => 'имя2''e-mail' => 'mail@mail2')
                   );

    //сохранили в файл
    file_put_contents('base.dat'serialize($users));


    //прочли из файла
    $users_new unserialize(file_get_contents('base.dat'));

    var_dump($users_new);
    P.S ну или вообще хранить все в собственном формате с таблицей импорта для быстрого доступа к определенным блокам данных.
     
  11. herfleisch

    herfleisch Elder - Старейшина

    Joined:
    7 Jan 2009
    Messages:
    579
    Likes Received:
    203
    Reputations:
    13
    Почему бы не SQLite? Более разумного решения я тут не вижу.