Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как вносить данные с формы в таблицу в которой есть внешний ключ

Сообщения:  [1-10]   [11-16] 

 
 автор: davidoff_72   (07.08.2015 в 22:22)   письмо автору
 
   для: Igorek   (07.08.2015 в 17:52)
 

Спасибо. Чувствую что понимаю, но сам написать не смогу, если надо будет.

  Ответить  
 
 автор: Igorek   (07.08.2015 в 17:52)   письмо автору
 
   для: davidoff_72   (02.08.2015 в 14:25)
 

тернарный оператор

  Ответить  
 
 автор: davidoff_72   (02.08.2015 в 14:25)   письмо автору
 
   для: Igorek   (30.07.2015 в 20:47)
 

все таки не могу разобрать - почему знак вопроса между констуркциями, почему двое точие null?
 
<?php 
include('connect.php'); 
if (
$_POST

    
$city = isset($_POST['city']) ? mysql_real_escape_string(trim($_POST['city'])) : null
    
$country_id = isset($_POST['country_id']) ? (int)$_POST['country_id'] : null
    if (
$city && $country_id
    { 
        
mysql_query("INSERT INTO `city`(`city`, `country_id`) VALUES ('$city', $country_id)"); 
    } 

?> 


Уважаемые программисты, не ругайте сильно!

  Ответить  
 
 автор: Igorek   (30.07.2015 в 20:47)   письмо автору
 
   для: davidoff_72   (29.07.2015 в 21:42)
 

> Начинать изучать mysqli ?
Лучше PDO

mysql_real_escape_string - экранирует специальные символы. Если в переменной содержатся кавычки(например), то велика вероятность, что запрос станет синтаксически некорректным, либо станет небезопасным(SQL-инъекция).
<?php
$username 
"Garry O'Konnor"// одинарная кавычка!
$sql "SELECT * FROM table_name WHERE username = '$username'"
mysql_query($sql); // mysql ругнется здесь

$username mysql_real_escape_string("Garry O'Konnor"); 
$sql "SELECT * FROM table_name WHERE username = '$username'";
mysql_query($sql);  // теперь все хорошо. Перед одинарной кавычкой добавлен экранирующий символ (обратный слэш)


примеров с sql-инъекциями полно в интернете, включая официальный мануал для этой функции

  Ответить  
 
 автор: davidoff_72   (29.07.2015 в 21:42)   письмо автору
 
   для: Igorek   (29.07.2015 в 07:48)
 

Спасибо. Я не программист. Это у меня увлечение, трачу два часа в неделю на изучение. Нравится и мечтаю сделать программу для своей работы.
К сожалению не всё понимаю, и не далеко не все доходит то что написано в мануале. например -
mysql_real_escape_string
- для меня не совесем понятно что делает.
Начинать изучать mysqli ?

  Ответить  
 
 автор: Igorek   (29.07.2015 в 07:48)   письмо автору
 
   для: davidoff_72   (27.07.2015 в 22:20)
 

Не совсем понимаю проблемы. Внешний ключ дает нам ограничение внешнего ключа (foreign key constraint) для обеспечения целостности БД, т.е. на вашем примере - вы не сможете добавить значение country_id в таблицу city такое, которого нет в таблице country, как и не сможете удалить из country строку, если для её country_id есть соответствующие записи в city. Если вам необходимо будет обновить обе таблицы с добавлением нового country_id, то не обходимо будет соблюдать очередность - сначала добавляем значение в country, и потом только в city (для удаления - наоборот, либо использовать правила ON DELETE CASCADE). Вот в общем и все заморочки с внешними ключами.
По поводу формы - не важно какая она будет и откуда будут браться данные в нее. Ваша задача как программиста - получить данные (из $_POST массива в большинстве случаев), подготовить их для записи в БД (валидация, санитизация), и выполнить 1+ INSERT'ов.

> Достаточно адаптировать ваш скрипт?
можно и так, можно использовать готовые фреймворки, библиотеки и т.д. Рекомендую на первых порах все делать самому. Только не использовать расширение mysql(оно уже давно deprecated), почитать про валидацию, экранирование данных, понять что происходит когда пользователь жмет кнопку отправить вашей формы и т.д.

  Ответить  
 
 автор: davidoff_72   (27.07.2015 в 22:20)   письмо автору
 
   для: Igorek   (27.07.2015 в 22:07)
 

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

  Ответить  
 
 автор: Igorek   (27.07.2015 в 22:07)   письмо автору
 
   для: davidoff_72   (27.07.2015 в 21:43)
 

> Интересно, это единственный метод или бывают какие то альтернативные?
о каком методе идет речь?

  Ответить  
 
 автор: davidoff_72   (27.07.2015 в 21:43)   письмо автору
 
   для: Igorek   (26.07.2015 в 16:08)
 

Спасибо!
Я пропустил элементарную вещь - name для select . остальное мне не все понятно, но вставил - работает. Буду разбираться.
Интересно, это единственный метод или бывают какие то альтернативные?
Спасибо

  Ответить  
 
 автор: Igorek   (26.07.2015 в 16:08)   письмо автору
 
   для: davidoff_72   (26.07.2015 в 14:43)
 

примерно так:

<?php
include('connect.php');
if (
$_POST)
{
    
$city = isset($_POST['city']) ? mysql_real_escape_string(trim($_POST['city'])) : null;
    
$country_id = isset($_POST['country_id']) ? (int)$_POST['country_id'] : null;
    if (
$city && $country_id)
    {
        
mysql_query("INSERT INTO `city`(`city`, `country_id`) VALUES ('$city', $country_id)");
    }
}
?>
<form method="post">
    <input type="text" name="city">
    <select name="country_id">
        <?php
        $sites 
mysql_query("SELECT * FROM `country`");
        while (
$row mysql_fetch_array($sites))
        {
            echo 
"<option value='" $row['country_id'] . "'>" $row['country_name'] . "</option>";
        }
        
?>
    </select>
    <input type="submit" name="go" value="внести">
</form>

  Ответить  

Сообщения:  [1-10]   [11-16] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования