2012-06-24 5 views
2

Я создаю сайт для найма персонала, и у меня возникла проблема с добавлением новых данных в запись, созданную на предыдущей странице.обновление записи, которую я только что создал

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

Проблема заключается в том, что я не могу заставить код вызывать идентификатор записи соответствующей записи. Я думал об использовании mysql_insert_id, но проблема с ним двоякая. Во-первых, я не уверен, знаю ли я, как правильно это использовать, и несколько поисков Google по этому вопросу не оставили мне ничего более мудрее. Во-вторых, поскольку у компании будет несколько филиалов по всей стране, существует вероятность того, что два пользователя могут добавлять кандидатов одновременно, а пользователь А может добавить фотографию в запись, созданную пользователем B.

Я попытался использовать $ _POST, чтобы получить идентификатор записи, но данные, похоже, не передают данные на следующую страницу после того, как они были вставлены в таблицу.

Я не совсем новый для PHP, но это не то, что я делал раньше, потому что раньше у меня был друг, который бы справлялся с такими вещами, но он, к сожалению, скончался несколько месяцев назад, поэтому мне нужно научитесь делать это, когда я иду, с небольшим успехом.

Надеюсь, что я достаточно четко разбираюсь в своей проблеме, потому что я нахожусь в убытке.

Любая помощь будет принята с благодарностью.

+0

добро пожаловать в переполнение стека! Обязательно сохраните ВСЕ ответы, которые вы найдете полезными, в том числе вопросы других. И проверьте/примите лучший ответ на свои вопросы. –

ответ

0

Прежде всего, я бы использовал PDO (или mysqli) для устаревших расширений mysql_ *.

Использование PDO, после того, как вы выполните ваше заявление, вы можете использовать две функции, чтобы получить идентификатор вам нужно:

$stmt->execute($values);  // $stmt contains the prepared statement 

$return_code = $stmt->rowCount(); 
// $return_code = 1 : new record 
// $return_code = 2 : updated record 

if ($return_code == 1) 
{ 
    $ID_YOU_NEED = $db->lastInsertId(); // $db is the database connection 
} 

Кстати, я использую rowCount(), потому что я обычно использую ON DUPLICATE KEY UPDATE на большинство моих вставных запросов , вы можете пропустить этот шаг.

Затем я хотел бы сохранить ID в сеансе или добавить его как скрытое поле для следующей формы .

Кстати, в зависимости от требований, я бы ничего не в БД хранить только пока, пока вся необходимая информация не входят.

+0

-1 Никогда не храните dbms id как скрытое поле, так как нет никакой защиты - любой может изменить значение и тем самым иметь доступ к записям других людей в базе данных. –

+0

@ Larry K Я думаю, вы правы, в этом случае это будет плохая идея; Я много работаю над системой прямо сейчас, когда только администратор может редактировать данные и не полностью читать вопрос (хотя, вероятно, у меня, вероятно, будет скрытая переменная, чтобы соответствовать другой переменной сеанса) ... – jeroen

+1

Опять же, отзыв. Ваш последний совет («Я бы ничего не хранил в db, пока пока не появилась вся необходимая информация») заставил меня задуматься. Я думаю, что понял свою проблему. У меня на самом деле не хватает времени на этом этапе проекта, и получение этого последнего запроса действительно доказывает трудоемкость (я думаю, что лишение сна приводит к его сбору). Я знаю сеансы и, используя сеансы, мне не нужно вызывать последний идентификатор, потому что я собираю все данные, а затем вставляю запись в конце всего процесса. Не могли бы вы сказать, что моя логика здесь звучит? – UbuntuElphie

1

Вам было бы лучше использовать php PDO. В этом случае есть функция, которая получает идентификатор вставленной строки (http://us3.php.net/manual/en/pdo.lastinsertid.php). Когда вы запустите свой код вставки, запустите это сразу после него, и он даст вам идентификатор строки, которую вы только что вставили. Теперь прикрепите этот идентификатор к ссылкам для пользователя или переменной сеанса (или что-то еще, что зависит от пользователя), и вы сможете легко отслеживать последнюю строку, которую каждый человек сможет редактировать.

+0

Было бы лучше сохранить в сеансе и сохранить его полностью невидимым и серверным. Передача его в ссылках или в виде информации о форме представляет проблемы безопасности. – Ilion

+0

Yup, я полностью согласен с вами, но кажется, что этот парень является совершенно новым для программирования или, по крайней мере, PHP, и заставить его работать, вероятно, будет проще с помощью ссылки вначале. Когда он работает и понимает эти понятия, я бы сказал, что он может вернуться и укрепить код от проблем безопасности. Опять же, но не соглашаясь с вашим комментарием. – Fluffeh

+0

Спасибо за отзыв. @Fluffeh, ты мертв, что я новичок в этом. До сих пор мои навыки PHP требовали от меня минимального минимума, чтобы мой помощник мог войти и сделать то, что нужно сделать, чтобы заставить код работать так, как он предназначен. Как уже упоминалось, он умер на полпути к этому проекту, поэтому я немного шатаюсь в темноте, пока я нахожу свои ноги. – UbuntuElphie

0

Во-первых,

в вашей странице, которая вставляет записи в базы данных, вам нужно получить идентификатор вновь созданной записи. Используйте mysqli::insert-id Есть и другие способы сделать это.

Во-вторых,

Хранить идентификатор записи в сеансе пользователя и использовать его в последующих страниц для обновления записи. Для безопасности важно сохранить идентификатор в сеансе, а не как значение GET url, а также как «скрытое» поле.

+0

Спасибо за отзыв. Я определенно буду использовать сеансы, а не скрытое поле (ранее мне советовали против GET Value, но, до тех пор, я не прочитал полученную мной обратную связь, не осознал уязвимость скрытого поля) – UbuntuElphie

Смежные вопросы