|
|
|
|
<?php
function db_connect(){
$user = 'admin';
$pswd = 'admin';
$host = 'localhost';
$db = 's';
$connection = mysql_connect ($host,$user,$pswd);
$select_db = mysql_select_db ("s",$connection);
mysql_query ("SET NAMES utf8");
if (!$connection || $select_db("$db")) {
return false;
}
return $connection;
}
?>
|
Вот функция выборки
<?php
function select_data ($table){
$query = mysql_query ("SELECT * FROM $table");
if(mysql_num_rows($query)>0)
{$count = 0;
while($row = mysql_fetch_array($query)) {
$result[$count]=$row;
$count++;
}
return $result;
}
else {
return false;
}
}
?>
|
Вот сама выборка
<?php
include ("./function.php");
db_connect();
$data = select_data('categoryes');
foreach ($data as $item):
printf (
"<ul class='menu'><li class='menu_right_link_ul'><a title='%s' class='menu_right_link_setting' href='/shop/%s'>%s</a></li></ul>"
,$item["meta_d"],$item["hpu_cat"],$item["meta_d"]);
endforeach;
?>
|
И сама ошибка Fatal error: Cannot redeclare db_connect() (previously declared | |
|
|
|
|
|
|
|
для: Habl
(26.08.2013 в 15:41)
| | Сообщение говорит о причине - Не возможно переопределить db_connect () (ранее объявленный ..." - дальше указано где, что вы даже не сочли нужным проанализировать.
Кстати, а зачем функция select_data вообще нужна? И зачем $count = 0; и $count++;?
$result[]=$row; - и указателя индекса не надо. | |
|
|
|
|
|
|
|
для: confirm
(26.08.2013 в 16:16)
| | Я смотрел по видео уроку, там у человека было все норм, а меня ошибки повылетали, вот и спросил
select_data делает выборку из таблицы бд
как тогда сделать более правильно? | |
|
|
|
|
|
|
|
для: Habl
(26.08.2013 в 16:52)
| | Вы не видео уроки смотрите, а читайте. Причина в том, что указанная функция объявляется дважды, и в каком месте она уже была ранее объявлена, указана в ошибке, прочтите внимательно до конца сообщение об ошибке. То есть, у вас происходит примерно следующее:
<?
function f() {
//
}
//и далее вновь
function f() {
//
}
| В подключаемом файле видимо эта же функция тоже присутствует (или это же имя функции используется).
Я спросил зачем вообще эта функция потому, что собственно она ничего полезного не делает, потому как трудно представить, что исключительно все ваши запросы в проекте выбирают именно все без всяких условий, с разнице только конкретных таблиц. Другими словами полезность ее сомнительна. Правда это только мое предположение. | |
|
|
|
|
|
|
|
для: confirm
(26.08.2013 в 17:11)
| | Вы конечно извините, ну о кого не спросишь вес говорят что так не правильно, делай так и т.д. Голова уже кипит делаешь одно говорят не правильно, делаешь другое говорят не правильно. В итоге уже не знаешь к кому лучше прислушаться... | |
|
|
|
|
|
|
|
для: Habl
(26.08.2013 в 17:14)
| | Я не знаю, что за видео уроки вы смотрите, но если вас интересует мое мнение о них, то могу сказать, что полезность от них весьма сомнительная. Язык программирования, это не вязание на спицах, которому еще можно научится смотря видео уроки. Язык нужно изучать, и лучше чем хорошие книги для этого быть не может. Для начальных шагов по изучению РНР его официальное руководство и то больше принесет пользы, чем сомнительные видео уроки. | |
|
|
|
|
|
|
|
для: confirm
(26.08.2013 в 17:20)
| | Если вы заметили эти люди которые выучили php через видео уроки всегда выводят информацию через printf, почемута. echo самый лекий я думая. | |
|
|
|
|
|
|
|
для: Jovidon
(27.08.2013 в 12:29)
| | +1. и цикл феерический, да и db_connect унылая. вообще, таким вот "учителям" по-хорошему нужно отрывать руки. по сути сами ничего не умеют, но уже пытаются учить | |
|
|
|
|
|
|
|
для: Jovidon
(27.08.2013 в 12:29)
| | Не знаю с видео уроков ли эта мода или нет, но уж коли так хочется эту функцию прикрутить к выводу массива, то почему тогда не vprintf или vsprintf, если цель упростить. Не понятно вообще чего тут форматировать надо, при выводе незатейливых данных из базы.
Самое лучшее, это не заставлять интерпретатор ковыряться в строке без надобности, то есть одинарные кавычки и конкатенация. | |
|
|
|
|
|
|
|
для: confirm
(27.08.2013 в 13:06)
| | да, плюс ко всему, конкатенация еще и хорошо видна в любом редакторе. | |
|
|
|
|
|
|
|
для: confirm
(27.08.2013 в 13:06)
| | Спасибо Вам за совет читать :) Уже начал просматривать мануал php, доступно написано.
Еще один вопрос...
Что я делаю тут не так? Мне нужна что выводилось по три элемента на странице, а далее перенос строки и опять вывод трех элементов
<?php
while ($row = mysql_fetch_assoc($result)) {
printf ("
<div style='float:left; padding:30px;'>
<p><img alt='$row[title]' title='$row[title]' src='$row[img]'/></p>
<p><a href='/shop/%s/%s'>$row[title]</a></p>
<p>$row[settings]</p>
<p>$row[price] руб за 1 метр</p>
</div>
", $row["hpu_cat"],$row["id"],$row["title"]);
for ($i=0; $i < $result; $i++){
if ($i % 3 == 0) echo "<div style='clear:both;'></div>";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Habl
(28.08.2013 в 09:41)
| |
<?
$i = 0;
while ($row = mysql_fetch_assoc($result)) {
echo '<div style="float:left;padding:30px">
<p><img alt="'.$row['title'].'" title="'.$row['title'].'" src="'.$row['img'].'"/></p>
<p><a href="/shop/'.$row['hpu_cat'].'/'.$row['id'].'>'.$row['title'].'</a></p>
<p>'.$row['settings'].'</p>
<p>'.$row['price'].' руб. за 1 метр</p>
</div>';
if ($i && !($i % 3)) echo '<div style="clear:both"></div>';
$i++;
}
|
То что в одинарных кавычках, это строка:
<?
$a = 12;
echo 'string 1 $a'; //выведет как есть
|
То что в двойных кавычках подлежит обработке:
<?
$a = 12;
echo "string 2 $a"; //выведет string 2 12
|
Поэтому не "<div style='clear..., а '<div style="clear..., так как нет в этой строке ничего, на что бы нужно было обратить внимание интерпретатора, нет в ней данных для него.
printf выводит отформатированную строку согласно параметрам sprintf. Нечего в данном случае форматировать, и использовать эту функцию здесь, ну ради что нагрузить интерпретатор лишней работой, более ничего.
PS. Кстати, div float:left и прицепом к нему '<div style="clear:both"></div>', это не единственный и далеко не лучший способ вывода товаров на страницу, в смысле форматирования страницы. | |
|
|
|
|
|
|
|
для: confirm
(28.08.2013 в 10:01)
| | о ясно, а я думаю что у меня <div style:clerar:both;></div> выводится столько же раз сколько и позиций к выводу, ок теперь увидел свою ошибку, спасибо! | |
|
|
|
|
|
|
|
для: Habl
(28.08.2013 в 11:34)
| | $result, это ресурс возвращенный запросом, а $i < $result;, это мягко выражаясь несуразица. | |
|
|
|
|
|
|
|
для: confirm
(28.08.2013 в 11:50)
| | Хорошо буду думать как решить по другому
У Вас ошибочка
<p><a href="/shop/'.$row['hpu_cat'].'/'.$row['id'].'>'.$row['title'].'"</a></p>
двойная кавычка нужна для закрытия ссылки | |
|
|
|
|
|
|
|
для: Habl
(28.08.2013 в 11:58)
| | Пропустил, добавьте.
А что думать, если надо через три вставлять, то я написал как. Могут быть только вариации, но принцип будет тот же. Если форматирование по другому, то лучше <u><li>элементы описывающие товар</li></ul>, и стили перенести в CSS. | |
|
|
|
|
|
|
|
для: confirm
(28.08.2013 в 12:02)
| | Да стили в css это понятно, у меня почему то первые 4 элементы выводятся в одну строчку, а другие уже по 3 | |
|
|
|
|
|
|
|
для: Habl
(28.08.2013 в 12:06)
| | Перенесите if ($i && !($i % 3)) echo '<div style="clear:both"></div>'; в самое начало цикла.
<style>
.products {
list-style: none;
margin: 0;
padding: 0;
}
.products li {
display: inline-block;
width: 30%; /* по 3 товара в строке*/
vertical-align: top;
margin-right: 20px;
margin-bottom: 50px;
}</style>
<ul class="products">
<?
for($i=0; $i<13; $i++) echo '<li><h4>Product</h4><img /><p>text text text text text text text text text text text text text</p></li>';
?>
</ul>
|
И забейте на div. Стоит только изменить ширину li в процентах, и можно выводить в строке сколько влезет в родителя. | |
|
|
|