Fatal error: Call to a member function on a non-object

Salve a tutti!

Ragazzi oggi ho iniziato a smanettare un pò con l'sql e ho riscontrato ovviamente qualche problema: l'errore è sopra riportato.

Vi posto quindi il code per cercare di capire il problema dov'è:

$mysql = mysql_connect("localhost", $user, $pass)or die("<script>alert('Connection failed!')</script>");
$query = "SELECT forum_id, topic_type, topic_title, topic_views, auth_read FROM phpbb_topics AS t, phpbb_forums AS f WHERE f.forum_id=t.forum_id ORDER BY topic_time DESC LIMIT 10";
$result = mysql_query($query)or die(mysql_error());  //riga di errore

attendo un vostro aiuto  :-\

inviato 8 anni fa
Newbie
X 0 X

non riesco a trovare l'errore... sicuro che è quella la riga incriminata?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

bè, io sono andato avanti da quel punto lì, riuscendo a fare progressi insieme ad un mio amico, ma purtroppo ci siamo entrambi bloccati ad un punto nel quale il codice non dà errori di sintassi e neanche di connessione ad db, ma purtroppo nella tabella in html non viene visualizzato nulla  :(

ecco qui il code:

<table width="80%" border="1" align="center">
<tr>
<!-- LEFT MENU BEGIN -->
<td width="30%" border="1">
<?php
//QUERY MYSQL - RISOLUZIONE ULTIMI TOPIC
$user = 'username'; $pass = 'password'; $db = 'my_database';
$mysql = mysql_connect("localhost", $user, $pass)or die("<script>alert('Connection failed!')</script>");
$db = mysql_select_db($db)or die(mysql_error());
$sql = "SELECT t.forum_id, topic_id, topic_title FROM phpbb_topics AS t, phpbb_forums AS f WHERE f.forum_id=t.forum_id ORDER BY topic_time DESC LIMIT 10";
$result = mysql_query($sql);
echo "<br>";
while (list($forum_id, $topic_id, $topic_title, $auth_view, $auth_read) = mysql_fetch_row($result)) {
$forum_id = intval($forum_id);
$topic_id = intval($topic_id);
$topic_title = htmlspecialchars($topic_title, "nohtml");
echo "<img src='images/arrow.gif' border='0' alt=' ' title=' ' width='9' height='9'> <a href='../Forums/viewtopic.php?f=$forum_id&t=$topic_id'>$topic_title</a><br>";
}

echo "<br><center><a href='../Forums/'><b>Forums</b></a><br><br></center>";

mysql_free_result($result);
mysql_close($mysql);
// END RISOLUZIONE ULTIMI TOPIC
?>
<br><br>
</td>

e lo screen di ciò che viene mostrato

idee?  :wallbash:

premetto che i dati vengono prelevati dalle tabelle di un forum phpBB 3.0.1 e che le immagini sulla sinistra non si vedono poichè non le ho caricate

risposto 8 anni fa
Newbie
modificato 8 anni fa
X 0 X

nulla?  :(

risposto 8 anni fa
Newbie
X 0 X

Posta un dump della tabella, magari con qualche dato fake dentro, in questo modo posso fare qualche test per capire cos'è che sbagli. A prima vista il codice non sembra sbagliato.

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Ora che ci penso, che cos'è quel caos nel codice html!?!

Siete sicuri che non sia un problema di output dovuto al codice html scritto con i piedini? Prova a dare questo comando:

$mysql = mysql_connect("localhost", $user, $pass)or die("<script>alert('Connection failed!')</script>");
$db = mysql_select_db($db)or die(mysql_error());
$sql = "SELECT t.forum_id, topic_id, topic_title "
        . "FROM phpbb_topics AS t, phpbb_forums AS f "
        . "WHERE f.forum_id=t.forum_id ORDER BY topic_time DESC LIMIT 10";
$result = mysql_query($sql);
var_dump(mysql_fetch_row($result));

e posta l'output.

Ma se c'è output (voglio dire qualche risultato) sicuramente è un errore nell'html che fa impazzire il browser e non viene visualizzato nulla.

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

trash dunque, con questo code:

<?php
$user = 'username'; $pass = 'password'; $db = 'my_database';
$mysql = mysql_connect("localhost", $user, $pass)or die("<script>alert('Connection failed!')</script>");
$db = mysql_select_db($db)or die(mysql_error());
$sql = "SELECT t.forum_id, topic_id, topic_title "
        . "FROM phpbb_topics AS t, phpbb_forums AS f "
        . "WHERE f.forum_id=t.forum_id ORDER BY topic_time DESC LIMIT 10";
$result = mysql_query($sql);
var_dump(mysql_fetch_row($result));
?>

ho ottenuto questo output:

array(3) { [0]=>  string(2) "24" [1]=>  string(2) "58" [2]=>  string(7) "Ola!!!!" }

ora ciò che vuol dire? errore nel code generale html? o semplicemente nella tabella dove doveva stampare l'output il code php?

risposto 8 anni fa
Newbie
X 0 X

Vuol dire che php estrae correttamente i record dalla tabella del tuo database.

Quindi potrei, quasi certamente, dire che è un problema con il codice html scritto male che non permette di vedere il risultato della query.

Probabilmente è un problema con il codice causato dallo script di generazione della tabella.

[modalità purtista]

Comunque sia, una tabella non è la struttura adatta a contenere la tua lista di ultimi post del forum.

Infatti le tabelle servono a contenere dati tabellari, non liste.

Per le liste c'è il costrutto apposito ul (Unordered List, ma ci sono anche liste ordinate, quelle con i numeretti).

Eccoti un esempio adatto al caso tuo:

<?php
<?php
$user   = 'username';
$pass   = 'password';
$db     = 'my_database';
$mysql  = mysql_connect("localhost", $user, $pass)or die("<script>alert('Connection failed!')</script>");
$db     = mysql_select_db($db)or die(mysql_error());
$sql    = "SELECT t.forum_id as forum, topic_id as topic, topic_title as titolo"
        . "FROM phpbb_topics AS t, phpbb_forums AS f "
        . "WHERE f.forum_id=t.forum_id ORDER BY topic_time DESC LIMIT 10";
$result = mysql_query($sql);
?>
<ul>
<?php while($post = mysql_fetch_row($result)): ?>
    <li>
        <a href="/viewtopic.php?f=<?php echo $post['forum'] ?>&t=<?php echo $post['topic'] ?>"><?php echo $post['titolo'] ?></a>
    </li>
<?php endforeach ?>
</ul>

Ovviamente a quel punto puoi usare il css per mettere la freccetta che ti serve prima di ogni elemento della lista.

Mi raccomando nell'html sempre tutto in minuscolo e specificare gli attributi con le virgolette " (shift+2) e non con gli apici ' (il tasto con il punto interrogativo, senza shift, per intenderci).

[/modalità purista]

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
modificato 8 anni fa
X 0 X

grazie trash per i tuoi consigli, alla fine ho seguito scrupolosamente ciò che mi hai consigliato ma purtroppo quando ho fatto stampare il tutto in remoto, ecco lo stesso risultato, mi stampava solo i tipici pallini dei tag html indicati da te.

A questo punto ho guardato il sorgente html della pagina, e ho notato questo:

etc....etc...
     <li>
     <a href="/Forums/viewtopic.php?f=6&amp;t=55"></a><br>
    </li>
    <li>
     <a href="/Forums/viewtopic.php?f=6&amp;t=54"></a><br>
    </li>
etc...etc...

evidente quindi che prendeva e catalogava correttamente i link agli ultimi topic, ma non stampava la parola per permettere il reindirizzamento al topic e in questo caso il titolo stesso del topic.

Quindi ho provato a sostituire o meglio, a inserire dopo la variabile interna al code php <?php echo "$topic_title" ?> una parola qualsiasi e ho notato come venisse stampata a schermo, e permettesse il reindirizzamento.

Ecco che a questo punto mi son spostato a lavorare su ciò che veniva fatto alla variabile $topic_title

ho modificato quindi il code da così:

$topic_title = htmlspecialchars($topic_title, "nohtml");

a così

$topic_title = htmlspecialchars($topic_title);

lasciando quindi il valore di default ENT_COMPAT alla funzione htmlspecialchars.

In questo modo ecco che tutto torna:

tutto correttamente listato con i tag <ul><li>

e correttamente linkato    ;)

ci siamo riusciti  O0

grazie del prezioso aiuto e alla prox  :)

risposto 8 anni fa
Newbie
X 0 X

Se hai usato l'ultimo codice che ho postato il titolo dovrebbe essere l'elemento "titolo" nell'array ;)

Comunque guarda che è inutile fare qualcosa del genere: <?php echo "$qualcosa"; è sufficiente il solo nome della variabile :), senza le virgolette per intenderci.

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

perfetto! ancora grazie  :) ho semplificato ancora maggiormente l'intero code grazie a questo tuo consiglio  ;)

alla prox; ciao ciao  :)

risposto 8 anni fa
Newbie
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda