Permalänk
Medlem

Hjälp med PHP-script. :)

Hej Sweclockers.
Har installerat phpBB till min sida, värt att tilläggas är att mina kunskaper inom PHP är nära noll.

Försöker sätta in detta script på förstasidan av själva hemsidan, då forumet är en helt annan del http://www.cricketmx.com/articles/read/working-example-of-dis...

Grejen blir att jag får dessa error:

Citat:

Allmänt fel
SQL ERROR [ mysql4 ]

Unknown column 't.topic_approved' in 'where clause' [1054]

SQL

SELECT p.*, t.*, u.username, u.user_colour FROM (phpbb_posts p) LEFT JOIN phpbb_users u ON (u.user_id = p.poster_id) LEFT JOIN phpbb_topics t ON (p.topic_id = t.topic_id) WHERE t.forum_id IN (1, 2) AND t.topic_status <> 2 AND t.topic_approved = 1 ORDER BY p.post_id DESC LIMIT 5

BACKTRACE

FILE: (not given by php)
LINE: (not given by php)
CALL: msg_handler()

FILE: [ROOT]/phpbb/db/driver/driver.php
LINE: 855
CALL: trigger_error()

FILE: [ROOT]/phpbb/db/driver/mysql.php
LINE: 181
CALL: phpbb\db\driver\driver->sql_error()

FILE: [ROOT]/phpbb/db/driver/mysql_base.php
LINE: 45
CALL: phpbb\db\driver\mysql->sql_query()

FILE: [ROOT]/phpbb/db/driver/driver.php
LINE: 261
CALL: phpbb\db\driver\mysql_base->_sql_query_limit()

FILE: [ROOT]/phpbb/db/driver/factory.php
LINE: 321
CALL: phpbb\db\driver\driver->sql_query_limit()

FILE: /storage/content/92/133592/domännamn.se/public_html/home.php
LINE: 50
CALL: phpbb\db\driver\factory->sql_query_limit()

FILE: /storage/content/92/133592/domännamn.se/public_html/index2.php
LINE: 112
CALL: include('/storage/content/92/133592/domännamn.se

Har ingen aning om vad någonting av det här betyder, vill bara få till det här och bli klar.
Har googlat runt lite men utan resultat.

Tack.

Permalänk

Finns ingen kolumn i din databas med namnet "topic_approved".

Visa signatur
Permalänk
Medlem
Skrivet av Kebabhyvlarn:

Finns ingen kolumn i din databas med namnet "topic_approved".

Tack för svar. Men då en annan fattar noll så får jag be dig att utveckla lite mer.
Ska jag bara skapa en sådan kolumn i databasen eller?

Ska den heta topic_approved eller 't.topic_approved'?

mvh

Permalänk
Testpilot

t är namnet på tabellen, och i det här fallet är det genom "LEFT JOIN phpbb_topics t" ett alias för phpbb_topics så det är i den tabellen du ska skapa ett fält som heter topic_approved om du behöver det.

Problemet kan kanske komma av att du använder en annan version av forumet än den här nya koden är skriven för och din version kanske tillhandahåller samma funktion som topic_approved fast på ett annat sätt så att bara lägga till ett fält som enbart innehåller "1" till alla trådar ger ju inget utan då är det bättre att helt enkelt ta bort den delen ur din SQL-fråga (den rödmarkerade delen alltså):

$posts_ary = array( 'SELECT' => 'p.*, t.*, u.username, u.user_colour', 'FROM' => array( POSTS_TABLE => 'p', ), 'LEFT_JOIN' => array( array( 'FROM' => array(USERS_TABLE => 'u'), 'ON' => 'u.user_id = p.poster_id' ), array( 'FROM' => array(TOPICS_TABLE => 't'), 'ON' => 'p.topic_id = t.topic_id' ), ), 'WHERE' => $db->sql_in_set('t.forum_id', array_keys($auth->acl_getf('f_read', true))) . ' AND t.topic_status <> ' . ITEM_MOVED . ' AND t.topic_approved = 1', 'ORDER_BY' => 'p.post_id DESC', );

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk
Medlem
Skrivet av hunden:

t är namnet på tabellen, och i det här fallet är det genom "LEFT JOIN phpbb_topics t" ett alias för phpbb_topics så det är i den tabellen du ska skapa ett fält som heter topic_approved om du behöver det.

Problemet kan kanske komma av att du använder en annan version av forumet än den här nya koden är skriven för och din version kanske tillhandahåller samma funktion som topic_approved fast på ett annat sätt så att bara lägga till ett fält som enbart innehåller "1" till alla trådar ger ju inget utan då är det bättre att helt enkelt ta bort den delen ur din SQL-fråga (den rödmarkerade delen alltså):

$posts_ary = array( 'SELECT' => 'p.*, t.*, u.username, u.user_colour', 'FROM' => array( POSTS_TABLE => 'p', ), 'LEFT_JOIN' => array( array( 'FROM' => array(USERS_TABLE => 'u'), 'ON' => 'u.user_id = p.poster_id' ), array( 'FROM' => array(TOPICS_TABLE => 't'), 'ON' => 'p.topic_id = t.topic_id' ), ), 'WHERE' => $db->sql_in_set('t.forum_id', array_keys($auth->acl_getf('f_read', true))) . ' AND t.topic_status <> ' . ITEM_MOVED . ' AND t.topic_approved = 1', 'ORDER_BY' => 'p.post_id DESC', );

Testade både att skapa topic_approved och att ta bort den rödmarkerade delen men båda varianterna slutade upp med att ingenting visades över huvud taget.

Jag är så grymt förvirrad. Borde börja ta kurser.

Permalänk
Testpilot

Var lite otydlig och klantig kanske, det funkar inte om man tar bort det rödmarkerade utan det är raden som är den skyldige, man måste justera koden lite runt om.

... AND t.topic_status <> ' . ITEM_MOVED . ' AND t.topic_approved = 1', ...

borde bli

... AND t.topic_status <> ' . ITEM_MOVED, ...

Om du väljer att istället lägga till fältet topic_approved måste du som jag skrev innan sätta alla raders värde till 1 och alla nya trådar måste du se till att de får det värdet med så det är verkligen ingen bra lösning.

Blir det bara blankt som i en helt vit sida tyder det på att du har syntax-fel i någon PHP-fil men att servern är inställd på att inte visa några felmeddelanden, har du möjligtvis tillgång till en logfil på servern där du kan läsa ut sådana felmeddelanden istället? det skulle underlätta din felsökning.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]

Permalänk

Ett allmänt tips, lite beroende på vad ditt projekt går ut på, kan vara att använda dig av prepared statements istället för att konkatenera(lägga ihop med punkt). Detta motverkar SQL injections, och är oerhört viktigt ur ett säkerhetsperspektiv. Utan detta kan användare av sajten komma åt data från din databas.

PHP Manual
Guide (W3 Schools

Permalänk
Medlem

Installerade samma version av forumet som koden var skrivet till. Den hade topic_approved i databasen redan.

Men nu är sidan fortfarande helt blank (home.php)
Såhär ser koden ut, jag förstår inte vad det är för fel och jag får inga errors över huvud taget.

<?php /* * home.php * Description: example file for displaying latest posts and topics * by battye (for phpBB.com MOD Team) * September 29, 2009 */ define('IN_PHPBB', true) $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './forum/'; $phpEx = substr(strrchr(__FILE__, '.'), 1); include($phpbb_root_path . 'common.' . $phpEx); include($phpbb_root_path . 'includes/bbcode.' . $phpEx); include($phpbb_root_path . 'includes/functions_display.' . $phpEx); // Start session management $user->session_begin(); $auth->acl($user->data); $user->setup('viewforum'); $search_limit = 3; $posts_ary = array( 'SELECT' => 'p.*, t.*, u.username, u.user_colour', 'FROM' => array( POSTS_TABLE => 'p', ), 'LEFT_JOIN' => array( array( 'FROM' => array(USERS_TABLE => 'u'), 'ON' => 'u.user_id = p.poster_id' ), array( 'FROM' => array(TOPICS_TABLE => 't'), 'ON' => 'p.topic_id = t.topic_id' ), ), 'WHERE' => $db->sql_in_set('t.forum_id', array_keys($auth->acl_getf('f_read', true))) . ' AND t.topic_status <> ' . ITEM_MOVED . ' AND t.topic_approved = 1', 'ORDER_BY' => 'p.post_id DESC', ); $posts = $db->sql_build_query('SELECT', $posts_ary); $posts_result = $db->sql_query_limit($posts, $search_limit); while( $posts_row = $db->sql_fetchrow($posts_result) ) { $topic_title = $posts_row['topic_title']; $post_author = get_username_string('full', $posts_row['poster_id'], $posts_row['username'], $posts_row['user_colour']); $post_date = $user->format_date($posts_row['post_time']); $post_link = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "p=" . $posts_row['post_id'] . "#p" . $posts_row['post_id']); $post_text = nl2br($posts_row['post_text']); $bbcode = new bbcode(base64_encode($bbcode_bitfield)); $bbcode->bbcode_second_pass($post_text, $posts_row['bbcode_uid'], $posts_row['bbcode_bitfield']); $post_text = smiley_text($post_text); $template->assign_block_vars('announcements', array( 'TOPIC_TITLE' => censor_text($topic_title), 'POST_AUTHOR' => $post_author, 'POST_DATE' => $post_date, 'POST_LINK' => $post_link, 'POST_TEXT' => censor_text($post_text), )); } page_header('External page'); $template->set_filenames(array( 'body' => 'external_body.html' )); page_footer(); ?>

Permalänk
Testpilot

Som sagt kan den blanka sidan troligtvis ha att göra med att din webserver inte visar felmeddelanden för besökare utan dessa hamnar i en log-fil istället, utan att ha tillgång till logfilen blir det väldigt svårt att hitta problemet. Det jag ändå kan se är att din första kodrad (den efter kommentarerna) saknar semikolon på slutet, det är ett syntax-fel.

En felaktig SQL-fråga ger för övrigt inte en blank sida då det inte är ett syntax-fel i PHP-koden, hade du modifierat SQL-frågan som jag visade hade du sluppit installera en annan forumversion.

Visa signatur

Kolla gärna in min RGB-LED-ljusstake i galleriet
[Gigabyte GA-Z97MX-Gaming 5][Intel Core i5 4690K][Corsair XMS3 16GB][Asus GeForce RTX 2060 Super Dual Evo OC]