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

Форум PHP

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Как вносить данные с формы в таблицу в которой есть внешний ключ
 
 автор: davidoff_72   (21.07.2015 в 20:54)   письмо автору
 
 

написал вот такое вот, но не работает. не вностится информация


 таблица city 
 id_city smallint(10) unsigned auto_increment 
 city varchar(25)
 country_id tinyint(5) unsigned 
 PRIMARY KEY(id_city),
        FOREIGN KEY (country_id) 
        ENGINE=InnoDB CHARACTER SET=UTF8


таблица: country
 country_id tinyint(5) unsigned auto_increment 
 country_name varchar(255) 
PRIMARY KEY(country_id),
                ENGINE=InnoDB CHARACTER SET=UTF8


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

  Ответить  
 
 автор: Rolex   (22.07.2015 в 16:29)   письмо автору
 
   для: davidoff_72   (21.07.2015 в 20:54)
 

Напишите текст и номер ошибки.

  Ответить  
 
 автор: davidoff_72   (22.07.2015 в 21:44)   письмо автору
11.9 Кб
 
   для: Rolex   (22.07.2015 в 16:29)
 

одно поле текстовое в него вносится фамилия сотрудника а из выпадающего списка достается его должность (смотреть в прикрепленном файл). Оба значения отправляются из одной формы. Не могу понять как значение из выпадающего списка засунуть в $_POST, а может каким то другим способом...
Таблицы innodb, вязаны внешним ключем, проиндексированы.

а ошибку никакую не выдает. просто не вносит информацию и всё.

  Ответить  
 
 автор: indexer   (23.07.2015 в 10:47)   письмо автору
 
   для: davidoff_72   (21.07.2015 в 20:54)
 

в переменной $sites находится вся таблица country затем выделаете while и.... Какую запись таблицы выберет mysql_fetch_array()?

Затем отправляете post
закоментите строку
<?php
mysql_query
("INSERT INTO `city`(`city`, `country_id`) VALUES ('".$_POST['city']."', '$county')");

и напишите
<?php
echo "INSERT INTO `city`(`city`, `country_id`) VALUES ('".$_POST['city']."', '$county')";


....И зачем этот круговорот из city и country ?

З.Ы. что бы разобрать кашу из html+php+(что то еще) каждый раз нужно отправляться в самадхи.

  Ответить  
 
 автор: davidoff_72   (23.07.2015 в 11:29)   письмо автору
 
   для: indexer   (23.07.2015 в 10:47)
 

а как мне добится результата не отправляясь в самадхи? просто чтоб к фамилии сотрудника прикреплялась название должности из выпадающего спика

  Ответить  
 
 автор: davidoff_72   (26.07.2015 в 14:43)   письмо автору
 
   для: davidoff_72   (21.07.2015 в 20:54)
 

Люди помогите! подскажите! Спасибо

  Ответить  
 
 автор: 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>

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

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

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

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

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

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

  Ответить  
 
 автор: 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   (29.07.2015 в 21:42)   письмо автору
 
   для: Igorek   (29.07.2015 в 07:48)
 

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

  Ответить  
 
 автор: 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   (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   (07.08.2015 в 17:52)   письмо автору
 
   для: davidoff_72   (02.08.2015 в 14:25)
 

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

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

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

  Ответить  
Rambler's Top100
вверх

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