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

Форум MySQL

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

 

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

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

тема: Запись в БД(Гостевая книга)
 
 автор: Fddd   (20.10.2006 в 22:38)   письмо автору
 
 

Вот недавно освоился в PHP с файлами, и хотелосьбы освоиться и с БД.
Как соедниться с БД и записать информацию из формы в БД?
Форма содержит два поля: Имя и Текст.

Буду не против если кто посоветует что почитать на эту тематику из электронных версий :) Учебник на этом сайте читал...
Я использую стандартный пакет Деневера.

   
 
 автор: cheops   (20.10.2006 в 22:53)   письмо автору
 
   для: Fddd   (20.10.2006 в 22:38)
 

Возможно вам будет интересна тема по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=19122.

   
 
 автор: Fddd   (21.10.2006 в 16:23)   письмо автору
 
   для: cheops   (20.10.2006 в 22:53)
 

Итак, мои выводы. Поправьте пожалуйсто если я не прав...
Меня смущает 1 и 2 пункт. Нельзя ли создавать БД и таблицы через PHP скрипты?
Для того чтобы сделать Гостеву книгу:
1. Создать вручную БД(Например guest). Для этого(в Деневере) пишем http://localhost/Tools/phpMyAdmin/ и там создаём.
2. Опять же вручную нужно создать Таблицы в БД. Для этого в настройках БД - guest, выбираем SQL и пописываем:

CREATE TABLE `content` (
id int auto_increment primary key,
name text,
message text
);

3. Соединение с MySQL:

mysql_connect ("localhost", "root", ""); //Подключение к серверу БД
mysql_select_db ("guest"); // Выбор БД

4. Добавление в базу:

mysql_query ("INSERT INTO `content` VALUES ('', 'Имя', 'Сообщение')"); 

5. Чтение из базы:

$result = mysql_query ("SELECT `name`, `message` FROM `content`");
while ($row = mysql_fetch_assoc($result)) {
        echo $row["name"];
        echo $row["message"];
}

6. Вот вроде и всё. Вот скрипт Гесты:

<form method="post">
Имя:<br><input name="name" type="text" value=""><br>
Сообщение:<br><textarea name="message" rows=5 cols=20 wrap="on"></textarea><br>
<input type="submit" value="Добавить">
</form>

<?php
/* Открываем соединение с MySQL-сервером.
Сервер - localhost, Юзер - root, Пароль - "" */
mysql_connect ("localhost""root""");

/* Выбираем Созданную БД(guest). */
mysql_select_db ("guest");

if (
$_POST) {
    
/* Записываем $_POST[mame] и $_POST[message] в созданную таблицу content */
    
mysql_query ("INSERT INTO `content` VALUES ('', '$_POST[name]', '$_POST[message]')");
}

/* Читаем из таблицы content: name и message */
$result mysql_query ("SELECT `name`, `message` FROM `content`");

/* mysql_fetch_assoc - извлекает ряд результата как ассоциативный массив */
while ($row mysql_fetch_assoc($result)) {
        echo 
"Имя: ".$row["name"]."<br>";
        echo 
"Сообщение: ".$row["message"]."<br><br>";
}
?>

   
 
 автор: cheops   (21.10.2006 в 16:31)   письмо автору
 
   для: Fddd   (21.10.2006 в 16:23)
 

1-2) Можно таблицу и автоматически создавать, для этого SQL-запрос CREATE TABLE скормить фукнции mysql_query().
<?php
  $query 
"CREATE TABLE `content` ( 
id int auto_increment primary key, 
name text, 
message text 
);"
  
@mysql_query($query);
?>

Однако эту операцию следует выполнять лишь один раз за всё время существования гостевой книги и его часто осуществляют вручную.

   
 
 автор: Fddd   (21.10.2006 в 17:24)   письмо автору
 
   для: cheops   (21.10.2006 в 16:31)
 

Спасибо...
А заменяют(редактируют) сообщения как? Как открыть только одно сообщение? И как записать его обратно?

   
 
 автор: LuxeMate   (21.10.2006 в 18:05)   письмо автору
 
   для: Fddd   (21.10.2006 в 17:24)
 

Открыть сообщение и редактировать по ID

редактировать так...эм...я приведу привер из своей гостевой

Вот форма редактирования: editmsg.php

<?php 
include_once('authfailed.php');
include_once(
"connect.php"); 
$id = ($_GET['id']);

$query mysql_query("SELECT * FROM `messages` WHERE `id` = '$id'");
while(
$row=mysql_fetch_array($query))

$name $row['name'];
$msg $row['msg'];
}
?>
<h2 align="center"><span class="style1Отредактируйте выбраное вами сообщение и нажмите "Исправить".</span>
</h2>
<form action='edit_mysql.php' method='post'>
<table cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
  <tr>
    <td width="245" height="29" background="images/b_top.gif" bgcolor="#CCCCCC">&nbsp;Написал: <?php echo $name?></td>
  </tr><tr><td bgcolor="#CCCCCC"><textarea name='msg_edited' cols='40' rows='10'><?php echo $msg?></textarea></td></tr><tr><td height="29" align="center" background="images/b_top.gif" bgcolor="#CCCCCC">
      <input type="hidden" name="id_edited" value="<?php echo $id?>">
      <input type='submit' name='submit' value='Исправить'/></td>
  </tr></table>
</form>


А вот скрипт редактирования уже в БД: editmsgmysql.php

<?php
include_once("connect.php");
$id = ($_POST['id_edited']);
$msg_admin = ($_POST['msg_edited']);
$add_text '<BR><BR><font style="font-size: 11px; color: red;">&nbsp;Отредактировано администратором!</font>';
$msg = ("$msg_admin $add_text");
$query mysql_query("UPDATE `messages` SET `msg` = '$msg' WHERE `id` = '$id'");
if(
$query)
{
echo 
"<center><table><META HTTP-EQUIV='Refresh' CONTENT='2; URL=index.php'><br><font class='ob'><H4>Сообщение успешно отредактировано. Вы автоматически перейдёте к просмотру сообщений.</H4></font><br><br><br><br></table></center>"
}
else
{
echo 
mysql_error();
}
?>

   
 
 автор: Fddd   (21.10.2006 в 21:34)   письмо автору
 
   для: LuxeMate   (21.10.2006 в 18:05)
 

Спасибо.
Основной скелет гостевой книги написан :). Действительно база намного удобнее чем файлы :)
Только вот я заметил: Если удалить все сообщения(к примеру их 5 было) то при добавление нового его ID будет к примеру 6. Никак с этим не борятся?

   
 
 автор: cheops   (21.10.2006 в 22:37)   письмо автору
 
   для: Fddd   (21.10.2006 в 21:34)
 

Никак с этим не борятся - это нормально, просто не привязывайтесь к первичному ключу, нумеруйте столбцы искусственно. Если сильно раздражает, то можете выставить начало инкрементного счётчика при помощи запроса
ALTER TABLE tbl AUTO_INCREMENT = 1

   
 
 автор: LuxeMate   (21.10.2006 в 22:43)   письмо автору
 
   для: Fddd   (21.10.2006 в 21:34)
 

Незнаю точно(у меня такая же штука с юзерами),но наверное это зделано для того чтобы не повторялся один ID дважды,если вы стёрли последнее сообщение то все нормально если вы добавите новое на ID старого,но а если из 5 удалить 3-ее,то при добавлении получится что оно встанет на место 3-его,а потом поди пойми где новые а где старые записи,вот наверное по этому,когда ID это integer со включенным auto inc. ID и не повторяются...хоть убейся =)))

   
Rambler's Top100
вверх

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