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

Форум PHP

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

 

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

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

тема: Не работает вывод из базы
 
 автор: Habl   (26.08.2013 в 15:41)   письмо автору
 
 


<?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

  Ответить  
 
 автор: confirm   (26.08.2013 в 16:16)   письмо автору
 
   для: Habl   (26.08.2013 в 15:41)
 

Сообщение говорит о причине - Не возможно переопределить db_connect () (ранее объявленный ..." - дальше указано где, что вы даже не сочли нужным проанализировать.

Кстати, а зачем функция select_data вообще нужна? И зачем $count = 0; и $count++;?
$result[]=$row; - и указателя индекса не надо.

  Ответить  
 
 автор: Habl   (26.08.2013 в 16:52)   письмо автору
 
   для: confirm   (26.08.2013 в 16:16)
 

Я смотрел по видео уроку, там у человека было все норм, а меня ошибки повылетали, вот и спросил

select_data делает выборку из таблицы бд

как тогда сделать более правильно?

  Ответить  
 
 автор: confirm   (26.08.2013 в 17:11)   письмо автору
 
   для: Habl   (26.08.2013 в 16:52)
 

Вы не видео уроки смотрите, а читайте. Причина в том, что указанная функция объявляется дважды, и в каком месте она уже была ранее объявлена, указана в ошибке, прочтите внимательно до конца сообщение об ошибке. То есть, у вас происходит примерно следующее:
<?
function f() {
  
//
}
//и далее вновь
function f() {
  
//
}
В подключаемом файле видимо эта же функция тоже присутствует (или это же имя функции используется).

Я спросил зачем вообще эта функция потому, что собственно она ничего полезного не делает, потому как трудно представить, что исключительно все ваши запросы в проекте выбирают именно все без всяких условий, с разнице только конкретных таблиц. Другими словами полезность ее сомнительна. Правда это только мое предположение.

  Ответить  
 
 автор: Habl   (26.08.2013 в 17:14)   письмо автору
 
   для: confirm   (26.08.2013 в 17:11)
 

Вы конечно извините, ну о кого не спросишь вес говорят что так не правильно, делай так и т.д. Голова уже кипит делаешь одно говорят не правильно, делаешь другое говорят не правильно. В итоге уже не знаешь к кому лучше прислушаться...

  Ответить  
 
 автор: confirm   (26.08.2013 в 17:20)   письмо автору
 
   для: Habl   (26.08.2013 в 17:14)
 

Я не знаю, что за видео уроки вы смотрите, но если вас интересует мое мнение о них, то могу сказать, что полезность от них весьма сомнительная. Язык программирования, это не вязание на спицах, которому еще можно научится смотря видео уроки. Язык нужно изучать, и лучше чем хорошие книги для этого быть не может. Для начальных шагов по изучению РНР его официальное руководство и то больше принесет пользы, чем сомнительные видео уроки.

  Ответить  
 
 автор: Jovidon   (27.08.2013 в 12:29)   письмо автору
 
   для: confirm   (26.08.2013 в 17:20)
 

Если вы заметили эти люди которые выучили php через видео уроки всегда выводят информацию через printf, почемута. echo самый лекий я думая.

  Ответить  
 
 автор: psychomc   (27.08.2013 в 12:31)   письмо автору
 
   для: Jovidon   (27.08.2013 в 12:29)
 

+1. и цикл феерический, да и db_connect унылая. вообще, таким вот "учителям" по-хорошему нужно отрывать руки. по сути сами ничего не умеют, но уже пытаются учить

  Ответить  
 
 автор: confirm   (27.08.2013 в 13:06)   письмо автору
 
   для: Jovidon   (27.08.2013 в 12:29)
 

Не знаю с видео уроков ли эта мода или нет, но уж коли так хочется эту функцию прикрутить к выводу массива, то почему тогда не vprintf или vsprintf, если цель упростить. Не понятно вообще чего тут форматировать надо, при выводе незатейливых данных из базы.

Самое лучшее, это не заставлять интерпретатор ковыряться в строке без надобности, то есть одинарные кавычки и конкатенация.

  Ответить  
 
 автор: psychomc   (27.08.2013 в 15:04)   письмо автору
 
   для: confirm   (27.08.2013 в 13:06)
 

да, плюс ко всему, конкатенация еще и хорошо видна в любом редакторе.

  Ответить  
 
 автор: Habl   (28.08.2013 в 09:41)   письмо автору
 
   для: 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 == 0) echo "<div style='clear:both;'></div>";  
          }
    }
?>

  Ответить  
 
 автор: confirm   (28.08.2013 в 10:01)   письмо автору
 
   для: 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>', это не единственный и далеко не лучший способ вывода товаров на страницу, в смысле форматирования страницы.

  Ответить  
 
 автор: Habl   (28.08.2013 в 11:34)   письмо автору
 
   для: confirm   (28.08.2013 в 10:01)
 

о ясно, а я думаю что у меня <div style:clerar:both;></div> выводится столько же раз сколько и позиций к выводу, ок теперь увидел свою ошибку, спасибо!

  Ответить  
 
 автор: confirm   (28.08.2013 в 11:50)   письмо автору
 
   для: Habl   (28.08.2013 в 11:34)
 

$result, это ресурс возвращенный запросом, а $i < $result;, это мягко выражаясь несуразица.

  Ответить  
 
 автор: Habl   (28.08.2013 в 11:58)   письмо автору
 
   для: confirm   (28.08.2013 в 11:50)
 

Хорошо буду думать как решить по другому
У Вас ошибочка
<p><a href="/shop/'.$row['hpu_cat'].'/'.$row['id'].'>'.$row['title'].'"</a></p>
двойная кавычка нужна для закрытия ссылки

  Ответить  
 
 автор: confirm   (28.08.2013 в 12:02)   письмо автору
 
   для: Habl   (28.08.2013 в 11:58)
 

Пропустил, добавьте.

А что думать, если надо через три вставлять, то я написал как. Могут быть только вариации, но принцип будет тот же. Если форматирование по другому, то лучше <u><li>элементы описывающие товар</li></ul>, и стили перенести в CSS.

  Ответить  
 
 автор: Habl   (28.08.2013 в 12:06)   письмо автору
 
   для: confirm   (28.08.2013 в 12:02)
 

Да стили в css это понятно, у меня почему то первые 4 элементы выводятся в одну строчку, а другие уже по 3

  Ответить  
 
 автор: confirm   (28.08.2013 в 12:18)   письмо автору
 
   для: 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 в процентах, и можно выводить в строке сколько влезет в родителя.

  Ответить  
Rambler's Top100
вверх

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