Изменяем записи в базе данных


Сразу забегая вперёд, покажу конечный вариант запроса для изменения данных в таблице mySql:

UPDATE   MyTable   SET  pole_1=value_1,  pole_2=value_2  WHERE id=5

Это общая схема изменения данных в таблице mysql.

После создания скрипта для сортировки мы теперь понимаем, что следовало сохранять данные в поле name в порядке «Фамилия, Имя». Мы можем исправить положение с помощью программы PHPMyAdmin и исправить вручную все сохраненные данные - однако можно создать небольшой скрипт, который считывает значение поля name, изменяет его в соответствии с шаблоном «Фамилия, Имя», сохраняет измененное значение и для контроля выводит результаты в виде Web-страницы.

В нашем примере исходное значение, которое необходимо определенным образом изменить, содержится в переменной $name. В этой переменной фамилия располагается в конце строки, после последнего в этой строке символа пробела (последнего - так как возможен случай, когда имя состоит из не-скольких слов и, следовательно, содержит несколько символов пробела). Таким образом, в качестве имени мы должны рассматривать все символы, которые располагаются перед последним символом пробела в строке, которая содержится в переменной $name.

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

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

$last_name = trim(strrchr($name, " "));

2. Теперь нам необходимо получить имя, и здесь мы объединяем две функции. Функция strrpos() позволяет нам получить позицию (в виде числа) указанного символа, где он последний раз встречается в данной строке. Следующая инструкция возвращает нам позицию, в которой в строке $name был последний раз обнаружен символ пробела:

$last_space * strrpos( $name, " " );

3. Далее мы используем функцию substr(), которая возвращает часть исходной строки. Мы передаем в качестве параметров этой функции исходную строку, а также начальную и конечную позиции фрагмента, который нас интересует. Выглядит эго следующим образом:

$first_name = substr($name, 0, $last_space );

4. Теперь мы можем создать новую запись уже по шаблону «Фамилия, Имя», для этого мы просто объединяем две строки с помощью оператора

$name_new = $last_name. ", ".$first_name;

Перед тем, как сохранить измененную запись в базе данных, давайте для проверки выведем полученные данные - нам необходимо убедиться, что все будет работать так, как мы это задумали.
Для этого мы добавляем в цикл while новые строки и выводим полученный результат с помощью echo. Полученный небольшой скрипт будет выглядеть следующим образом (рис. 5.14):

<? include("mysql.inc") ?>
<html>
<head></head>
<body>
<?
$query = "SELECT * FROM testjiable ORDER BY name";
$sql = mysql_query($query);
while ($dp = mysql_fetch__object ($sql) ) {
$id = $dp -> id;
$name = $dp -> name;
$last_name = trim( strrchr($name, " ") );
$last_space = strrpos( $name, " " );
$first_name = substr( $name, 0, $last_space ); $name_new = $last_name, ", ".$first_name;
echo $name," = ", $name_new, "<br>";
}
mysql_close($dp);
?>
</body>
</html>

Для того, чтобы записать измененные данные в базу данных, мы используем MySQL-команду UPDATE, ЭТОЙ команде сначала передается название таблицы, в которой необходимо изменить данные. Затем с помощью команды SET мы задаем новые значения для определенных полей. С помощью WHERE мы формируем команду, с помощью которой MySQL определяет, к какой именно записи относится изменение данных. Здесь мы используем поле id, например, показанная ниже команда действует на таблицу test_table, находит в ней запись, в которой индекс id равен значению переменной $id, и изменяет содержание поля name на значение, которое содержится в переменной $name_new:

UPDATE test_table SET name = '$name_new' WHERE id = $id

Затем данный запрос будет с помощью функции mysql_query() передан серверу базы данных. Результат, который возвращает эта функция, сохраняется в переменной $dummy, которая не представляет для нас интереса. Небольшое замечание: переданное для команды SET значение представляет собой символьную строку, и значит, она должна быть заключена в кавычки.
Итак, довольно разговоров, вот сам код программы:

<?
$update = "UPDATE test_table SET name = '$name_new'' WHERE id = $id";
$dummy = mysql_query($update);
?>

Для того чтобы откорректировать записи в таблице, достаточно однократного выполнения данного скрипта. Чтобы избежать ошибочного повторного запуска такого скрипта, после выполнения которого записи изменятся с формата «Фамилия, Имя» обратно на «Имя, Фамилия», мы добавим к этому скрипту небольшой фрагмент кода, который будет гарантировать правильность данных.
Сделаем так, что обновление данных будет выполняться только в том случае, если переменная $name содержит запятую. Для проверки наличия запятой мы используем функцию strpos(), которая возвращает позицию, на которой в строке был впервые обнаружены указанные символы. Если же эти символы в данной строке не обнаружены, то функция возвращает значение false, Чтобы удалить из строки лишние знаки пробела, мы используем в заключение функцию trim().

Так как при выполнении этих функций на экран не выводится никаких сообщений, то HTML-код нам не нужен и мы просто сохраняем РНР-код в файле update.php и вызываем в браузере этот файл, когда необходимо запустить скрипт на выполнение. После выполнения скрипта необходимо с помощью PHPMyAdmin проверить, добились ли мы желаемых результатов.

<?
include("mysql.inc");
$ query = "SELECT * FROM test_table ORDER BY name";
$sql = mysql_query($query);
while ($dp = mysql_fetch_object($sql)) {
$id = $dp -> id;
$name = $dp -> name;
if ( !strpos($name, ",")){
$last_name = trim( strrchr($name, " ") );
$last_space = strrpos( $name, " " );
$first_name = substr($name, 0, $last_space );
$name_new = $last_jiame. ", ".$first_name;
$update = "UPDATE test_table SET name = '$name_new' WHERE id = $id"; $dummy = mysql_query($update) ;
}
}
mysql__close ($dp);
?>

После этого, запуская предыдущий скрипт для построчного вывода записей, мы получаем нужный нам результат - список, в котором все записи отсортированы по фамилиям.

 


Тэги:

Комментарии: 0

Прокомментировать »

 
 
 

Прокомментировать

 
 
Сообщение *
 
Проверочный код *
 
 
 
Яндекс.Метрика