Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Рандомизация вывода сообщений из базы данных

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Аорс
Отправлено: 06 Апреля, 2015 - 19:26:42
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Апр. 2015  


Помог: 0 раз(а)




Здравствуйте! Мне необходимо выполнить такое задание:
4) Предоставить администратору возможность добавлять в базу данных сайта сообщений-новостей. На сайте случайным образом отображать одну из хранящихся новостей.

Я пытаюсь сделать это с помощью функции shuffle.
Имею базу данных в mySQL. База называется kurs, содержит таблицу mess, в которой под новости выделен столбец new.

Создал страницу для ввода сообщений:

Цитата:
<?php
session_start();
include("header.php");
echo $_SESSION["mess"];
$_SESSION["mess"]="";
?>
<form action="news_handler.php" method="POST" enctype="multipart/form-data">
Новости:
<br/>
<textarea cols="50" rows="7" name="new">Оставьте здесь свою новость</textarea>
<br/>
<input type="submit">
</form>

<?php
include("bottom.php");
?>


Скрипт для обработки сообщений в базе данных:

Цитата:
<?php
session_start();

$mysqli= new mysqli("localhost", "root", "", "kurs");
if($mysqli==0)
{
printf("Connect failed: %s\n", mysqli_connect_error());
exit;
}

$new = $_POST["new"];
$new = array('x' => 1);
srand((float)microtime() * 1000000);
shuffle($new);

$d=date("d-m-Y H:i:s");
$i=$_SESSION["user_id"];

if($stmt = $mysqli->prepare("INSERT INTO mess (user_id, new) VALUES (?,?)"))
{
/* bind parameters for markers */
$stmt->bind_param("ss",$i,$new);
/* execute query */
$stmt->execute();
/* close statement */
$stmt->close();
}

header("Location: index.php");

?>


И страницу для вывода новостей:

Цитата:
<?php
include("header.php");
session_start();


while (list($new1, $new2) = each($new)) {
echo "$new ";}

include("bottom.php");
?>


Однако на странице вывода новостей мне выдают ошибку:
Warning: Variable passed to each() is not an array or object in K:\home\localhost\www\kurs\index.php on line 6

Что я сделал не так?
 
 Top
Faraon-san
Отправлено: 06 Апреля, 2015 - 20:51:04
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




Аорс пишет:
while (list($new1, $new2) = each($new)) { echo "$new ";}

в функцию each передается не массив и не объект, переменной скорее всего не определена.
 
 Top
Аорс
Отправлено: 07 Апреля, 2015 - 09:33:22
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Апр. 2015  


Помог: 0 раз(а)




Вот же, я его определил:

$new = $_POST["new"];
$new = array('x' => 1);
 
 Top
Tyoma5891
Отправлено: 07 Апреля, 2015 - 09:50:07
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




Аорс пишет:
Вот же, я его определил:

$new = $_POST["new"];
$new = array('x' => 1);


в каком месте или файле? там где она используется она не определена...
 
 Top
Аорс
Отправлено: 07 Апреля, 2015 - 13:38:46
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Апр. 2015  


Помог: 0 раз(а)




А как её определить и где? Мне нужно, чтобы этот массив указывал на мою базу данных kurs, таблица mess, столбец new.
 
 Top
exlant
Отправлено: 07 Апреля, 2015 - 13:53:36
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




А что за странные манипуляции у вас в коде?
PHP:
скопировать код в буфер обмена
  1.  
  2. $new = $_POST["new"];
  3. $new = array('x' => 1);
  4. srand((float)microtime() * 1000000);
  5. shuffle($new);
  6.  

поместить с начало в переменную $_POST["new"], потом array('x' => 1), потом вообще не понятно зачем пытаетесь перемешать массив с одним элементом... ну и функция srand здесь тоже ни к чему!

А в последнем файле вообще полная непонятка:
у вас в задании сказано записать в базу, а потом из нее же вывести эту новость!
Где у вас хотя бы запрос к базе на вывод сообщений??
Что это вообще значит?
PHP:
скопировать код в буфер обмена
  1.  
  2. Вот же, я его определил:
  3.  
  4. $new = $_POST["new"];
  5. $new = array('x' => 1);
  6.  

И даже это, что вы определили, каким то магическим образом попадет из одного скрипта в другой, то все равно это приложение не будет выполнять поставленной задачи!

А еще:
PHP:
скопировать код в буфер обмена
  1.  
  2. //притом что в $new содержится массив
  3. $stmt->bind_param("ss",$i,$new);
  4. /* execute query */
  5. $stmt->execute();
  6.  

массивы в базу не пишутся! Нужно их в строку(или число) с начало перевести!

(Отредактировано автором: 07 Апреля, 2015 - 13:55:21)

 
 Top
Аорс
Отправлено: 07 Апреля, 2015 - 17:21:51
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Апр. 2015  


Помог: 0 раз(а)




Цитата:
Где у вас хотя бы запрос к базе на вывод сообщений??

А как он должен выглядеть? Дайте мне образец!
 
 Top
exlant
Отправлено: 07 Апреля, 2015 - 17:55:29
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




Аорс пишет:
Цитата:
Где у вас хотя бы запрос к базе на вывод сообщений??

А как он должен выглядеть? Дайте мне образец!

вот у вас есть
CODE (SQL):
скопировать код в буфер обмена
  1. "INSERT INTO mess (user_id, new) VALUES (?,?)")

запрос на вставку вашего сообщения в базу!
А еще должен быть запрос на вывод из базы...
http://php.net/manual/ru/mysqli....t.statements.php

Вас только это смущает, в вашем коде? Я бы посоветовал начать с основ! И для начало разобраться как работает php, и в особенности как php работает с базами данных, и вообще как делается чтение/запись!

(Отредактировано автором: 07 Апреля, 2015 - 17:56:50)

 
 Top
dcc0_refirbished
Отправлено: 08 Апреля, 2015 - 01:01:57
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Апр. 2015  


Помог: 0 раз(а)




Однако Вы не уточнили масштабы рандомизации.
Можно ведь рандомизировать, например, 1 новость из последних десяти, а можно из всех имеющихся.
Я бы делал так: первый запрос к базе - подсчет всех записей, на основе полученного числа
рандом в переменную и её вставить в запрос в limit, который и выведет эту новость.
 
 Top
exlant
Отправлено: 08 Апреля, 2015 - 02:14:25
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




dcc0_refirbished пишет:
Однако Вы не уточнили масштабы рандомизации.
Можно ведь рандомизировать, например, 1 новость из последних десяти, а можно из всех имеющихся.
Я бы делал так: первый запрос к базе - подсчет всех записей, на основе полученного числа
рандом в переменную и её вставить в запрос в limit, который и выведет эту новость.

О чем вы? Улыбка Человек не знает что такое SELECT....
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB