Проблем с сайт

PHP:
<?php
 include("admin/conf.php");
if($resultFromOur = $conn->query($our)){
   while($row = $resultFromOut->fetch_array()){
      
      $pp = "4";
      
      $table = "link";
      
      $totalSql = "SELECT COUNT(id) FROM ".$table;
      
      if($resultFromTotal = $con->query($totalSql)){
         $numOfPages = $resultFromTotal / $pp;
         
         if(!isSet($_GET['page'])){
            $page = 1;
         }else{
            $page = filter_input(INPUT_GET,'page');
         }
         
         $limitvalue = $page * $pp - ($pp);
         
         $sql = "SELECT * FROM $table ORDER BY id DESC LIMIT $limitvalue, $pp"
         
         if($resultSql = $conn->query($sql)){
            while($r = $resultSql->fetch_array()){
               echo (" <a href=\"$r[url]\">$r[ime]</a><br />\n"); 
            }
         }
      }
   }
}





?>
Този код дава


Parse error: syntax error, unexpected T_IF in /home/a7816969/public_html/viewnews.php on line 103

Как да го оправя?
 
В края на долния реда по-долу сложи знака ; (точка и запетая).

Код:
$sql = "SELECT * FROM $table ORDER BY id DESC LIMIT $limitvalue, $pp"

И силно ти препоръчвам да прочетеш някоя книжка с основите на езика. Тази книга например е добра, но е старо издание - ако си я намериш отнякъде - ще ти свърши добра работа:

http://www.helikon.bg/books/33/-php-5.-Професионално-програмиране_116768.html
 
Ще трябва да я търсия втора ръка. Но намерих друга.
http://asenevtsi.com/index.php/компютри-и-интернет/php-mysql-практическо-програмиране-второ-издание Тази ще ми е от полза ли?
Може ли помощ за този код?
PHP:
<?php
 include("admin/conf.php");
$thispage = $_SERVER['PHP_SELF'];
// запазваме GET стойностите с изключение на page
$getwithoutpage = "?";
if (isset($_GET))
        foreach($_GET as $k=>$v)
                if ($k!='page') $getwithoutpage.=$k."=".urlencode($v)."&";
 
$showeachside = 5; //  Колко страници да се показват отляво и отдясно на текущата страница

// Колко реда на страница
$rowsPerPage = 5;

// Подразбираме показване на първа страница
$pageNum = 1;

// ако $_GET['page'] е дифинирано използваме тази страница
if(isset($_GET['page']) and is_numeric($_GET['page']))
{
    $pageNum = $_GET['page'];
}

// пресмятаме отместването
$offset = ($pageNum - 1) * $rowsPerPage;
$sql = "SELECT * FROM comments WHERE id='$id' ORDER BY id_com DESC LIMIT   $offset, $rowsPerPage";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["ime"]. " " . $row["comentar"]. "<br>";
    }
} else {
    echo "0 results";
}
$query1   = "SELECT COUNT(*) AS numrows FROM comments WHERE id='$id' ORDER BY id_com  LIMIT ";
$result  = $conn->query($query1);
$row     = $conn->fetch_array($result);

$num = $row['numrows']; // броя на редовете

$start = ($pageNum -1) * $rowsPerPage;
if(empty($start))$start=0;  // текуща стартова позиция

$max_pages = ceil($num/$rowsPerPage); // брой на страниците
$cur = ceil($start/$rowsPerPage)+1; // текуща страница
$conn->close();

 ?>
Дава това Fatal error: Call to undefined method mysqli::fetch_array() in /home/a7816969/public_html/viewnews.php on line 117
Ред 117 е този
PHP:
$row     = $conn->fetch_array($result);
 
pro12 каза:
Ще трябва да я търсия втора ръка. Но намерих друга.
http://asenevtsi.com/index.php/компютри-и-интернет/php-mysql-практическо-програмиране-второ-издание Тази ще ми е от полза ли?
Може ли помощ за този код?
PHP:
<?php
 include("admin/conf.php");
$thispage = $_SERVER['PHP_SELF'];
// запазваме GET стойностите с изключение на page
$getwithoutpage = "?";
if (isset($_GET))
        foreach($_GET as $k=>$v)
                if ($k!='page') $getwithoutpage.=$k."=".urlencode($v)."&";
 
$showeachside = 5; //  Колко страници да се показват отляво и отдясно на текущата страница

// Колко реда на страница
$rowsPerPage = 5;

// Подразбираме показване на първа страница
$pageNum = 1;

// ако $_GET['page'] е дифинирано използваме тази страница
if(isset($_GET['page']) and is_numeric($_GET['page']))
{
    $pageNum = $_GET['page'];
}

// пресмятаме отместването
$offset = ($pageNum - 1) * $rowsPerPage;
$sql = "SELECT * FROM comments WHERE id='$id' ORDER BY id_com DESC LIMIT   $offset, $rowsPerPage";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["ime"]. " " . $row["comentar"]. "<br>";
    }
} else {
    echo "0 results";
}
$query1   = "SELECT COUNT(*) AS numrows FROM comments WHERE id='$id' ORDER BY id_com  LIMIT ";
$result  = $conn->query($query1);
$row     = $conn->fetch_array($result);

$num = $row['numrows']; // броя на редовете

$start = ($pageNum -1) * $rowsPerPage;
if(empty($start))$start=0;  // текуща стартова позиция

$max_pages = ceil($num/$rowsPerPage); // брой на страниците
$cur = ceil($start/$rowsPerPage)+1; // текуща страница
$conn->close();

 ?>
Дава това Fatal error: Call to undefined method mysqli::fetch_array() in /home/a7816969/public_html/viewnews.php on line 117
Ред 117 е този
PHP:
$row     = $conn->fetch_array($result);

защото не го викаш правилно трябва да го замениш с $result->fetch_array();

Код:
<?php
 include("admin/conf.php");
$thispage = $_SERVER['PHP_SELF'];
// запазваме GET стойностите с изключение на page
$getwithoutpage = "?";
if (isset($_GET)){
        foreach($_GET as $k=>$v){
                if ($k!='page') $getwithoutpage.=$k."=".urlencode($v)."&";
        }
}
 
$showeachside = 5; //  Колко страници да се показват отляво и отдясно на текущата страница

// Колко реда на страница
$rowsPerPage = 5;

// Подразбираме показване на първа страница
$pageNum = 1;

// ако $_GET['page'] е дифинирано използваме тази страница
if(isset($_GET['page']) and is_numeric($_GET['page']))
{
    $pageNum = $_GET['page'];
}

// пресмятаме отместването
$offset = ($pageNum - 1) * $rowsPerPage;
$sql = "SELECT * FROM comments WHERE id='$id' ORDER BY id_com DESC LIMIT   $offset, $rowsPerPage";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["ime"]. " " . $row["comentar"]. "<br>";
    }
} else {
    echo "0 results";
}
$query1   = "SELECT COUNT(*) AS numrows FROM comments WHERE id='$id' ORDER BY id_com  LIMIT ";
$result  = $conn->query($query1);
$row     = $result->fetch_array();

$num = $row['numrows']; // броя на редовете

$start = ($pageNum -1) * $rowsPerPage;
if(empty($start))$start=0;  // текуща стартова позиция

$max_pages = ceil($num/$rowsPerPage); // брой на страниците
$cur = ceil($start/$rowsPerPage)+1; // текуща страница
$conn->close();

 ?>

Идеята е че ти вече един път си отворил връзката, а когато фетчваш обекти използваш обекта в който си запазил резултата за да извикаш fetch_* метод. До колкото за книгата аз лично я имам и смятам, че е добра няма да те направи някъв мастър, но е интересна има и доста задачи в нея,подробно обеснени. Така че да, става
 
Направх си търсачка. Сложих и странциране дав тази грешка.
Fatal error: Call to a member function fetch_array() on a non-object in /home/a7816969/public_html/search1.php on line 124
Не знам какво значи. Как да я махна?
PHP:
<?
$thispage = $_SERVER['PHP_SELF'];
// запазваме GET стойностите с изключение на page
$getwithoutpage = "?";
if (isset($_GET)){
        foreach($_GET as $k=>$v){
                if ($k!='page') $getwithoutpage.=$k."=".urlencode($v)."&";
        }
}
 
$showeachside = 5; //  Колко страници да се показват отляво и отдясно на текущата страница

// Колко реда на страница
$rowsPerPage = 5;

// Подразбираме показване на първа страница
$pageNum = 1;

// ако $_GET['page'] е дифинирано използваме тази страница
if(isset($_GET['page']) and is_numeric($_GET['page']))
{
    $pageNum = $_GET['page'];
}

// пресмятаме отместването
$offset = ($pageNum - 1) * $rowsPerPage;
if ($_POST['submit']) {
$duma = $_POST['duma'];
include("admin/conf.php");
if (strlen($duma) < 4) {
echo "Трябва да въведете повече от 4 символа.";
}
else {
$sql = "SELECT * FROM news WHERE ime LIKE '%$duma%' ORDER BY id DESC LIMIT $offset, $rowsPerPage";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "Name: " . $row["ime"]. "<br>";
    }
} else {
    echo "0 results";
}


}
}
$query1   = "SELECT COUNT(*) AS numrows FROM news WHERE ime LIKE '%$duma%' ORDER BY id LIMIT ";
$result  = $conn->query($query1);
$row     = $result->fetch_array();

$num = $row['numrows']; // броя на редовете

$start = ($pageNum -1) * $rowsPerPage;
if(empty($start))$start=0;  // текуща стартова позиция

$max_pages = ceil($num/$rowsPerPage); // брой на страниците
$cur = ceil($start/$rowsPerPage)+1; // текуща страница
$conn->close();
?>
Ето реда 124
PHP:
$row     = $result->fetch_array();
Към търсачката Как да сложа второ поле за търсене. Тоес знам как да направя 2поле. Но незнам как да направя заявка за 2 поле. 2 заявка да търси по автор.
 
pro12 каза:
Направх си търсачка. Сложих и странциране дав тази грешка.
Fatal error: Call to a member function fetch_array() on a non-object in /home/a7816969/public_html/search1.php on line 124
Не знам какво значи. Как да я махна?
Първият резултат в гугъл...
https://www.google.bg/search?q=Fatal+error%3A+Call+to+a+member+function+fetch_array()+on+a+non-object&oq=Fatal+error%3A+Call+to+a+member+function+fetch_array()+on+a+non-object&aqs=chrome..69i57.190j0j1&sourceid=chrome&es_sm=93&ie=UTF-8

http://stackoverflow.com/a/19837346
stackoverflow каза:
In simple words "$result doesn't contain what you think it does". I think that your problem is that $result is probably returning false. That means that your query has failed.

Try to var_dump($result) and see if it is false.
 
pro12 каза:
Дава това. 0 resultsbool(false) Проблема в заявката ли е?

Имаш

$result = $conn->query($query1);
$row = $result->fetch_array();

Гледаме mysqli->query какво връща: "Returns FALSE on failure." -- "Връща FALSE при грешка". Грешката можеш да видиш така $conn->error (преди $result->fetch_array()).
 
Ми естествено, че ще го даде тоа ерор. mysqli->error е property, а не method.

object->property
object->method()

Като естествено mysqli->error ще ти върне стринг, т.е. трябва да го принтираш, напр. die($conn->error);
 
Това, което ще прочетете или няма да прочетете по-надолу е тотален офтопик. Няма да кажа нищо технически свързано към проблема, а само ще направя един анализ на всички изговорени неща (написани мнения, не само в тази тема, а).
Ще говоря само в 1 л. / ед. ч. Така виждам аз нещата. Не целя да обидя никого, по никакъв начин. Споделям моето наблюдение и история през годините.
Нека започнем от заглавието на темата – „Проблем със сайта“. От тук мога да направя извода, че автора си няма напредстава какъв е проблема за това не е дал по-описателно заглавие. Което е напълно човешко, всеки е започнал от някъде.

Защо трябва да имаме описателни заглавия?
Погледнете на този форум не като на инструмент, който да решава вашите проблеми, а като една огромна база данни със знание. Знанието е изключително важно. И още по-важно е да го споделяме. Имайки описателно заглавие, търсенето на даден проблем става изключително лесно. Почти всеки проблем е бил дискутиран и решенията са налице. Затова е интернет толкова полезно средство. Sharing is caring.

Всеки език си има документация. Всяка функция е описана. Всеки резултат на тази функция също. Поглеждам към самия въпрос (за да разбера какъв е този проблем със сайта):
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in (...)
Виждам, че има и указан ред в грешката, автора е дал какво отговаря на този ред. Обаче всяка програма, всеки скрипт е съвкупност от функции/променливи/логика и рядко един ред код дава представата за самия проблем. Споделянето на допълнителна информация е плюс, както за автора така и за хората, които имат желание да помогнат.

Каква е ползата за автора?
Да речем, че имам проблем. Блъскам си главата цял час, два, ден... Нормално е. Всеки забива някъде. Подготвяйки един структуриран и ясен въпрос ми дава възможност, докато се опитвам да обясня своя проблем, да погледна на нещата от друг ъгъл. Много често ми се е случвало да реша проблем, докато се опитвам да го обясня на друг човек (понякога и непрограмист). Дори за този метод си има статия в Wikipedia - http://en.wikipedia.org/wiki/Rubber_duck_debugging
Решенията са във въпросите, в повечето случаи.

Каква е ползата за другите?
Всъщност, замисляйки се по този въпрос, каквото и да напиша тук, ползите са огледални. Ако кажа, че на другите ще им е по-лесно да асимилират този въпрос и да дадат някакво решение, + има и за автора. Ако кажа, че възможността въпроса да бъде подминат, тогава + има отново за автора.
Заглавие, което е кратко обяснение за въпроса (не прекалено дълго, но не и прекалено кратко), може да хване окото на някого, който е срещал подобен проблем. Пример:
„Проблем със сайта“ – не ми говори нищо, може да не е нещо интересно за мен, може да не е в моята област
„Грешка при извличането на информация от MySQL” – изникват въпроси в главата ми: дали е грешка във връзката с базата данни, дали е проблем в самата заявка, може и сървърна грешка да е

Описателни заглавия хващат окото повече, отколкото неясните такива.
Съдържание на самия въпрос – то трябва да бъде максимално описателно. Приложен код, достатъчно за да се възпроизведе самия проблем, но не да си пейстнеш целия проект, от 12334412312 файла с 128397123 реда спагети код. Изброени случаи, които вече са били изпробвани и резултатите от тях. Какво сте пробвали, как, къде? Задавайки добър въпрос шансовете ви за добър отговор скачат доста.

Виждайки един добре зададен въпрос, хората, които четат вашата тема виждат, че вие сте заинтересовани достатъчно. Това привлича повече и повече хора да отговарят. Предизвиквате любопитство у тях, те започват да дебъгват с вас.
Въпроса е зададен, съфорумниците са започнали да отговарят. Темата върви.
Имайки впредвид кода, който е даден и проблемите, които се опитвате да изчистите, с ръка на сърцето мога да заявя, че това е излишна гимнастика. Решението е да се пренапише с up-to-date методи.

Програмирането, а и като цяло всичко в ИТ-то е млад занаят, променя се всяка година/месец/ден. Трябва всяка технология, която ви е грабнала да я следите. Защото всичко се подобрява. Няма перфектно нещо, което да не е мръднало, откакто е било съзадено.
Също така проблем, който съм забелязала с годините във форума. Копирането и слепянето на кодове. Това не ви прави програмисти. Взимайки файл/“скрипт“ от някъде и добавяйки го във вашата „система“ не ви прави програмисти. Писането на функции в разни файлове инклудвайки конфизи, бан системи, статистики – това не е програмиране. Програмирането е мислене – 90%. Уроците, които има тук, а и навсякъде в интернет не са готови решения. Те са предоставени по този начин, който е незавършен с идеята да се обяснят функции/идеи/методи за дадено нещо.

И аз съм била там, и аз съм правила това. Разбирам. Но се стига един момент, в който лепиш/мажеш/зидаш хиляди редове код, от които грам не разбираш дали работи или не работи и по-лошото не знаеш как. Разчиташ на форуми, хората да ти оправят грешките от 3-те инклуднати конфига. Връзката с базата данни за теб е файл. „Контролния панел“ на потребителя е скрипт. Гласувания и прегледи на дадено видео са просто 3 реда код, който пействаш, където ти кажат.
От този форум съм научила много. Срещнала съм много хора и съм направила добри приятелства. Отдавна гледам как се задават неясни въпроси и неясни отговори биват давани. Да отделиш време, да споделиш проблем или да помогнеш с нещо е прекрасно. Ако не бъде правено по правилния начин, взима да става безполезно и безмислено.
Давайте решения, давайте идеи, давайте предложения за подобряване на дадена логика/код. Не пестете думите си.

Protips:
1. Всеки search engine е първи приятел на програмиста.
2. StackOverflow е добър източник за отговори на вече съществували проблеми/въпроси.
3. Ако желаете да бъдете добри в това, в което се опитвате да сте, приемайте критики. Интересувайте се.


Не, че разбирам или се правя, че разбирам. Just sayin :roll:

Cheers,
Iv
 
Добре де човек :roll:

Защо пишеш $conn->error() ? Виждаш ли го в моите постове? Даже ти обясних каква е разликата (поне визуално) :roll:

Fakeheal, поклон! 8)
 
djman каза:
pro12 каза:
Дава това. 0 resultsbool(false) Проблема в заявката ли е?

Имаш

$result = $conn->query($query1);
$row = $result->fetch_array();

Гледаме mysqli->query какво връща: "Returns FALSE on failure." -- "Връща FALSE при грешка". Грешката можеш да видиш така $conn->error (преди $result->fetch_array()).
Да виждам го втвоите постове. Ти ми казваш да сложа това $conn->error пред $result->fetch_array() аз рабрах че трябва е така $conn->error ($result->fetch_array());
 
pro12 каза:
Fatal error: Call to undefined method mysqli::error() in /home/a7816969/public_html/search1.php on line 124

А ти защо го викаш по друг начин? Човек, прочети поста на Ив, и се замисли. Няма смисъл от това, което правиш, по начина по който го правиш - губиш най-вече своето време. Приеми го като доброжелателен съвет - наистина! :)
 
Ако наистина не ви се четат книжки и документация - нещата няма да се получат. Това налучкване (за съжаление точно така стоят нещата) от една страна няма да доведе до знания - дори ще навреди, а също така няма да се получи замислената система.
 
Като имам пари ще си купя книга. http://php.net/manual/en/mysqli.query.phpСложих тази проверка
PHP:
if (!$query1->query("SET @a:='this will not work'")) {
        printf("Error: %s\n", $query1->error);
    }
Ими излезе това.

Fatal error: Cannot access empty property in /home/a7816969/public_html/search1.php on line 124
 
What's up? Пак съм аз.

За да не отнеса някоя забележка, този ми пост няма да бъде изцяло офтопик.

Първо относно грешката, която си дал. Това, кеото си копи/пейстнал отново от документацията на php, е пълна простотия. Буквално.

Това не е проверка. Това е пример. Пример, който е обяснен в коментарите.
(Вметка: Коментарите са част от кода, който няма да бъде взет от самия език и ще бъде пропуснат. Използват се за поясняване, допълване и прегледност. Също така в php те се пишат по няколко начина:

1. Две наклонени черти надясно „//“ последвани от самия коментар. (one line comment)
Пример:
Код:
$a = 1; //това е коментар и няма да се вземе под внимание при интерпретирането на кода
2. Ако коментара по-дълъг може да се обгради във следните знаци “/*” и “*/”, респективно за начало и край.
Пример:
Код:
/* Това е много дълъг коментар,
Който може да бъде на няколко реда
Или много повече от няколко реда.
Може и „Война и мир“ да се напише тук,
На PHP хич не му пука */
$a = 1;
3. Вид коментар е със знака “#”, който има същите характеристики като този в т.1 – „//”)

И тези 3 реда код, който си копи/пейстнал се казва ако заявката, която се опитвам да изпълня върне “false”, кажи ми грешката, която е възникнала при изпълнението.

Код:
if (!$mysqli->query("SET @a:='this will not work'")) {
printf("Error: %s\n", $mysqli->error);
}

В твоя случай трябва да намериш заявката, която евентуално може да причинява грешката и да си направиш същото условие с твоята заявка и ако заявката върне “false” да си принтнеш грешката. Ей така за дебъгинг.
Код:
if($mysqli->query(“ТВОЯТА ЗАЯВКА Е ТУК“)) {
      die(“Грешка: “. $mysqli->error);
}

И от тук започва offtopic-a (again):

Не е нужно да си купуваш книга, за да научиш нещо. В предния си пост описах колко богат и ценен е интернет. Да, има много материали, които не са на добро ниво, но и обратното. Интернет е пълен с информация по всеки въпрос, дори и най-завъртените. Хората споделят и ние може само да се възползваме от това. Ако имаш проблем с английския, това също не е пречка. Много български програмисти са споделили своите знания (тука има стотици уроци), както под формата на видеа, така и текстове. В мрежата може да намериш супер много безплатни книги, както и супер много „не-толкова-безплатни” (if you know what I mean) книги.

И като заключение ще кажа, че хората горе, които вметнаха, че така губиш своето време, са напълно (по мое мнение) прави. Ако наистина искаш да се занимаваш с това сериозно, не губи времето си в кърпене, защото каквото и да правиш, повярвай ми никога няма да успееш да го завършиш.

Cheers,
Iv
 

Back
Горе