Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Нет записи в базу

Форум для авторов модов для phpBB 2.0.x.
Аватара пользователя
mtzet
phpBB 1.2.0
Сообщения: 19
Стаж: 17 лет 3 месяца

Сообщение mtzet »

Народ, я начинающий программист и у меня возникла проблема, помогите пожалуйста кто может. Проблема следующего характера:
Создал через phpmyAdmin БД с названием 'syte', в ней создал таблицу 'users' затем два поля 'username' и 'text_user'.

Код: Выделить всё

CREATE TABLE `users` (
  `username` varchar(25) NOT NULL default '',
  `text_user` text NOT NULL,
  PRIMARY KEY  (`username`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Затем через РНР делаю запросы к БД, и не получается ни занести инфу, ни считать от туда. Подскажите пожалуйста где ошибка.

Вот мой скрипт:

Код: Выделить всё

<html>
<head>
  <title></title>
</head>
<body>
<?php
  if ((isset($_POST['act']))&&($_POST['act']=='act'))
  {
  	if(!empty($_POST['name']))$user_name = $_POST['name'];
  	if(!empty($_POST['mes']))$mes = $_POST['mes'];
  	// Определяем значения переменным
    $hostname="localhost";
    $username="root";
    $password="";
    // Имя базы данных
    $dbname="syte";
    // Имя таблицы
    $usertable="users";
    // Создать соединение с MySql
    MYSQL_CONNECT($hostname,$username) OR DIE("Не могу подсоединиться");
    // Выбор БД
    MYSQL_SELECT_DB($dbname) or die("Не могу выбрать БД");
    // Введение информации в БД
    $query="INSERT INTO users(username text_user) VALUES ('$user_name','$mes')";
    MYSQL_QUERY($query);
    // Закрыть соединение
    MYSQL_CLOSE();
    print "Запись введена в БД! <br>";
    echo "<br><br><a href=".$_SERVER['PHP_SELF'].">еще раз</a>";
    
  }
  else{

    $hostname="localhost";
    $username="root";
    $password="";
    $dbname="syte";
    $usertable="users";
   // Создать соединение с MySql
   mysql_connect($hostname,$username) or die("Не могу подсоединиться");
   mysql_select_db("$dbname") or die("Не могу выбрать БД");
   // Выбрать все записи
  $query="select * from ".$usertable;
  $result=mysql_query($query);
  while ($rez=mysql_fetch_array($result)){
  	echo $rez;
  }
  	?>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="POST">
введите имя:<input name="name" type="text" value="">
<br>ваше сообщение:<br><textarea name="mes" rows=5 cols=20 wrap="off"></textarea>
<input name="act" type="hidden" value="act">
<input type="submit" value="отправить">
</form>
<?php
}?>
</body>

</html>
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Нет обработки ошибок собственно запроса...
Нужно примерно так

Код: Выделить всё

mysql_query($sql) or die(mysql_error());
Добавлено спустя 2 минуты 22 секунды:

Я молчу про то что у вас переменные $user_name и $mes могут получиться неинициализированными.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
mtzet
phpBB 1.2.0
Сообщения: 19
Стаж: 17 лет 3 месяца

Сообщение mtzet »

Ну смотрите, оно ошибок не выдает, якобы все Ок, но на самом деле ничего не вносит в эту таблицу, можете пожалуйста по-подробнее объяснить где я напортачил, может при создании самих полей в таблице необходимо задать какие-то особые параметры. Цель: создать поле с именем отправителя сообщения, и собсно поле с самим сообщением
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

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

Кстати...

Код: Выделить всё

username text_user
Где запятая?

Даже если это поможет - обработка ошибок все равно нужна... часто их просто взглядом не вычислить.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
mtzet
phpBB 1.2.0
Сообщения: 19
Стаж: 17 лет 3 месяца

Сообщение mtzet »

Хорошо, огромнейшее спасибо Xpert, сейчас все исправлю и попробую заново. Спасибо что так быстро откликнулись на мою проблему.

Добавлено спустя 8 минут 21 секунду:

Огромнейшее Вам спасибо еще раз Xpert, теперь оно записывает в БД всё как надо, только вот выводит из БД какую-то фигню, array, я заменил в
mtzet писал(а):while ($rez=mysql_fetch_array($result))
на $rez=mysql_fetch_row - результат тот же самый. Сейчас займусь корректным выводом данных из БД.
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Во-первых, лучше mysql_fetch_assос, а во вторых результатом работой этой ф-и явдляется массив. В общем, курите доки :)
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
mtzet
phpBB 1.2.0
Сообщения: 19
Стаж: 17 лет 3 месяца

Сообщение mtzet »

Смотрите, можно так?

Код: Выделить всё


$query="select * from ".$usertable;
$result=mysql_query($query);

// Запрашиваем идентификатор данных о полях таблицы
$fields = mysql_num_fields($result);
for($i=0; $i<$fields; $i++) {
$r=mysql_result($result, $i);
echo $r;
}
Добавлено спустя 9 минут 59 секунд:

А на счёт обработчика ошибок я так понимаю надо вот так?
т.е. перед этой строкой
Xpert писал(а):mysql_query($sql) or die(mysql_error());
нужно переменной $sql присвоит такую штуку:

Код: Выделить всё

$sql = mysql_error();

или 

$sql = mysql_errno();

или и то и другое?
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Сообщение rxu »

mtzet
Есть мануалы, и есть файлы phpBB, в которых примеров нормального оформления разных запросов в базу - пруд пруди. Можете прямо оттуда брать целые блоки для своих нужд.
Изображение
Аватара пользователя
mtzet
phpBB 1.2.0
Сообщения: 19
Стаж: 17 лет 3 месяца

Сообщение mtzet »

Всё, я разобрался с корректным выводом:

Код: Выделить всё

$rows = mysql_num_rows($result);
  $fields = mysql_num_fields($result);
  for($i=0; $i<$rows; $i++)
  {
  	for ($j=0; $j<$fields; $j++)
   {
   $r=mysql_result($result, $i, $j);
   echo $r."                       ";
   }
   echo "<br><br>";
  }
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

А я бы сделал так

Код: Выделить всё

while ($row = mysql_fetch_assoc($result))
{
echo "$row[username] $row[text_user] <br /><br />";
}
И еще все-таки обратите внимание
Xpert писал(а):у вас переменные $user_name и $mes могут получиться неинициализированными.
Проверки нет на пустоту, какой смысл заносить в базу пустые записи?
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Аватара пользователя
mtzet
phpBB 1.2.0
Сообщения: 19
Стаж: 17 лет 3 месяца

Сообщение mtzet »

Xpert,
Огромнеешее Вам спасибо, Ваш способ на много лучше и больше мне подходит, в плане реализации совмещения вывода данных из БД с применением элементов дизайна страницы.

Добавлено спустя 5 минут 16 секунд:

На счёт проверки на пустоту я реализовал следующий блок:

Код: Выделить всё

$number=mysql_num_rows($result);
// Проверка существования пустых записей

if ($number == 0)
{
   exit ();
}
else {
while ($row = mysql_fetch_assoc($result))
{
echo "$row[username] $row[text_user] <br /><br />";
}
}
Аватара пользователя
mtzet
phpBB 1.2.0
Сообщения: 19
Стаж: 17 лет 3 месяца

Сообщение mtzet »

Уважаемые программисты, я не знаю к какой теме отнести мой вопрос, администраторы исправят я надеюсь, поэтому я решил спросить тут же, где мне уже однажды помогли. Вопрос такой: каким средством я могу осуществить в выполнении моего сценария переход на другой документ. Например у меня выполняется сценарий в подкаталоге "root/gbook/index.php" и мне необходимо при невыполнении определенного условия отправить процесс выполнения сценария в другой каталог, например - "root/movies/index.php". Каким образом можно это сделать? Я так понимаю что функция links() - это не то что мне нужно?
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 16367
Стаж: 17 лет 11 месяцев
Откуда: Красноярск
Благодарил (а): 521 раз
Поблагодарили: 1744 раза

Сообщение rxu »

mtzet
Во-первых, кросс-постинг запрещён.
Во-вторых, смотря что имеется ввиду. Если обычный редирект, то

Код: Выделить всё

header( 'Location: http://www.yoursite.com/new_page.html' );
Если выполнение другого скрипта в теле этого, то include.
Изображение

Вернуться в «Для авторов (phpBB 2.0.x)»