PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MySQL-Fehler


job
08.05.2007, 18:55:03
Servus zusammen.
Bin eigentlich mit den gängigsten Programmier-Dingen vertraut. SQL-mäßig sieht es aber ganz mau aus. Ich hab jetzt ein Script, dass ziemlich stresst. Könnt ihr da mal drüberschauen?

In zeile 51 wind ein Fehler angezeigt. Um die Suche zu verkürzen: die fünfte von unten.
Ich habe nun schon einmal einen Underscore eingefüht: "$cnt = mysql_num(hier:_)rows($result);" Trotzdem funzt es nicht. Wenn ich ein bisschen rumtrickse und das Gefühl habe, dass alles stimmen müsste, wird dann in Zeile 16 ein Fehler angegeben.

Kann mir bitte jemand von euch weiterhelfen?

Vielen Dank und liebe Grüße
Job


<?
if(!isset($_POST))
$_POST = $HTTP_POST_VARS;
if(!isset($_GET))
$_GET = $HTTP_GET_VARS;
require("../common/include.php");
$db=mysql_connect("$address", "$dbuser", "$dbpasswd");
$action = $_POST['action'];
$session = $_GET['session'];
if(!isset($session))
$session = $_POST['session'];

if(!isset($action))
$action = $_GET['action'];
$helpx = mysql_db_query("$dbname", "select * from tblsession where strSessionid='$session'");
$userid= mysql_result($helpx, 0, "intUser");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<link rel="stylesheet" type="text/css" href="../common/style.css">
<title>Titel</title>
<script language="javascript">
</script>
</head>
<body style="border:none" topmargin="2" leftmargin="2" bottommargin="2" rightmargin="2" marginheight="0" marginwidth="0" bgcolor="whitesmoke" style="background-image:url(./pic/sw_h.gif); background-repeat:repeat-y;">
<?
if(!isset($action))
{?>
<table border="0" cellpadding="4" cellspacing="8" width="100%" class="ttable">
<tr>
<td style="color:white">
<strong>Betreff</strong>
</td>
<td style="color:white">
<strong>Von</strong>
</td>
<td style="color:white">
<strong>gesendet am</strong>
</td>
<td>&nbsp;

</td>
</tr>
<?
$SQL = "SELECT msg.*, tblgamer.strAlias as strFromName from tblmessage as msg".
" LEFT JOIN tblgamer on tblgamer.lngIndex=msg.lngUser_ID".
" WHERE lngUserToID=$userid ORDER BY dtmCreate DESC";
$result = mysql_db_query($dbname, $SQL);
echo mysql_error
$cnt = mysql_numrows($result);

for($i = 0; $i < $cnt; $i++)
{
?>

MatMel
08.05.2007, 19:05:29
Wäre ganz gut zu wissen wie der Fehler lautet ...
Oder hab ich den überlesen?

Der Underscore muss auf jeden Fall mal hin: mysql_num_rows() (http://de3.php.net/manual/de/function.mysql-num-rows.php)

job
08.05.2007, 19:11:50
Sorry, hab ich doch tatsächlich vergessen.

syntax error, unexpected T_VARIABLE, expecting ',' or ';' in Line 51

Lord Ganymed
08.05.2007, 19:40:05
Der Fehler liegt am Ende der Zeile 50, du hast das Semikolon vergessen. In Zeile 51 muss der Befehl "mysql_num_rows()" heißen, wie MatMel schon sagte.

job
08.05.2007, 19:55:28
Super, dafür schon einmal vielen Dank!!

Jetzt erhalte ich folgende Meldungen:

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 4 in .../message.php on line 16
mysql_error
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in .../message.php on line 51

Der Text im unteren Bereich lautet jetzt:

<?
$SQL = "SELECT msg.*, tblgamer.strAlias as strFromName from tblmessage as msg".
" LEFT JOIN tblgamer on tblgamer.lngIndex=msg.lngUser_ID".
" WHERE lngUserToID=$userid ORDER BY dtmCreate DESC";
$result = mysql_db_query($dbname, $SQL);
echo mysql_error;
$cnt = mysql_num_rows($result); (Das hier ist besagte Zeile 51)

for($i = 0; $i < $cnt; $i++)
{
?>

Lord Ganymed
08.05.2007, 20:17:00
in der Zeile
" WHERE lngUserToID=$userid ORDER BY dtmCreate DESC";
fehlt doch was oder? Gehört lngUserToID vieleicht zu msg.lngUserToID oder tblgamer.lngUserToID? dtmCreate scheint ja auch noch irgendwo dazu zu gehören (msg.dtmCreate oder tblgamer.dtmCreate).

job
08.05.2007, 20:22:09
Wie gesagt, von SQL habe ich keine Ahnung. Daher muss ich gestehen, dass ich gerade kein Wort verstanden habe. Kannst du das nochmal eben für einen Volldeppen erklären?

Hab das Script nicht selber erstellt und den Autoren gibt es nicht mehr. Daher hänge ich so in den Seilen...

Lord Ganymed
08.05.2007, 20:55:58
Versuch mal folgendes:
$SQL = "SELECT a.*, b.strAlias as strFromName from tblmessage a ";
$SQL.= "LEFT JOIN tblgamer b on b.lngIndex=a.lngUser_ID ";
Wenn das keine fehlermeldung mehr zurückgibt kannst du mal folgendes dazuhängen:
$SQL.= "WHERE b.lngUserToID=$userid ";
//oder $SQL.= "WHERE a.lngUserToID=$userid ";
und wenn das klappt dann:
$SQL.= "ORDER BY a.dtmCreate DESC";
//oder $SQL.= "ORDER BY b.dtmCreate DESC";

Nun die Erläuterungen: mit a. oder b. greifst du auf eine Tabelle zu die bei "from tblmessage a" mit a definiert wird und bei "LEFT JOIN tblgamer b" mit b definiert wird. Mit a.* fragst du also alle Felder der Tabelle a (also tblmessage) ab. zusätzlich fragst du mit b.strAlias die Zelle strAlias der tabelle b (also tblgamer) ab. In der Where Klausel und Order By Klasel musst du dann aber auch auf irgendeine Tabelle verweisen (a. oder b.). Ich habe die Aliasnamen auf a. und b. geändert, weil es so hoffentlich einfacher zu verstehen ist.

job
08.05.2007, 22:14:19
Es tut mir wahnsinnig leid, aber ich bekomm das einfach nicht hin. Ich hoffe, dass ich dir nicht zu sehr auf den Zwirn gehe, aber kannst du mir die "a"s und "b"s vielleicht mit dem eigentlichen Text ersetzen? Ich habs nämlich grad versucht zu interpretieren und offensichtlich völligen Nonsens eingegeben. Danach ging nämlich gar nichts mehr.
Sorry und schonmal vielen Dank im Voraus. Mensch, komm ich mir vielleicht hilflos vor!!!

Lord Ganymed
09.05.2007, 08:41:31
Also vorher wars so:
$SQL = "SELECT msg.*, tblgamer.strAlias as strFromName from tblmessage msg ";
$SQL.= "LEFT JOIN tblgamer tblgamer on tblgamer.lngIndex=msg.lngUser_ID "; //bis hier hin Versuch 1
$SQL.= "WHERE tblgamer.lngUserToID=$userid ";
//oder $SQL.= "WHERE msg.lngUserToID=$userid "; // Versuch 2
$SQL.= "ORDER BY msg.dtmCreate DESC";
//oder $SQL.= "ORDER BY tblgamer.dtmCreate DESC"; //Versuch 3

job
09.05.2007, 10:19:57
Hi,

es ändert sich nichts. Egal, welche Variante, in welcher Kombination. Hab wirklich alles ausprobiert. Der Fehler:

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 4 in .../message.php on line 16
mysql_error
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in .../message.php on line 51

bleibt hartnäckig bestehen. Hast du noch eine Iddee???

Lord Ganymed
09.05.2007, 11:38:53
Hast du mal in der Datenbank geguckt ob es diese tabellen und die Spalten mit den namen auch wirklich gibt? Vieleicht kannst du die Struktur hier mal abbilden

job
09.05.2007, 12:31:58
Also, die tblgamer sieht so aus:

171

Die tblmessage so:

172

Lord Ganymed
09.05.2007, 13:59:51
$SQL = "SELECT msg.*, tblgamer.strAlias as strFromName from tblmessage msg ";
$SQL.= "LEFT JOIN tblgamer on tblgamer.lngIndex=msg.lngUser_ID ";
echo mysql_error();
Bekommst du hier eine Fehlermeldung?

job
09.05.2007, 14:11:09
Ja, bleibt dabei. In der Zeile:

$cnt = mysql_num_rows($result);


Wird dann weiter ein Fehler angezeigt.

Lord Ganymed
09.05.2007, 16:51:47
Also wenn das hier nicht klappt funktioniert irgendwas rundrum nicht wirklich.
<?php
error_reporting(E_ALL);
$SQL = "SELECT a.IngIndex, b.IngIndex FROM tblmessage a ";
$SQL.= "LEFT JOIN tblgamer b ON b.lngIndex=a.lngUser_ID ";
echo mysql_error();
?>
Gib doch mal bitte mit "echo mysql_error();" den echten Fehlertext aus. Vieleicht wird man daraus schlauer.

Wenn die Tabellen vertauscht sind:
<?php
error_reporting(E_ALL);
$SQL = "SELECT a.IngIndex, b.IngIndex FROM tblmessage a ";
$SQL.= "LEFT JOIN tblgamer b ON a.lngIndex=b.lngUser_ID ";
echo mysql_error();
?>

scones
09.05.2007, 17:25:00
eventuell sind ja die tabellen einfach leer ;)

job
09.05.2007, 18:46:50
Wenn ich dan angebe kommt folgendes: Parse error: syntax error, unexpected '}' in .../message.php on line 77
Da sieht es so aus:

<?
}
else if($action == "delete")
{
$id = $_GET['id'];
$SQL = "DELETE FROM tblmessage WHERE lngIndex=$id";
mysql_db_query($dbname, $SQL);
?>

MatMel
09.05.2007, 18:54:14
Vielleicht fehlt ein Strichpunkt vor dem Abschnitt den du gepostet hast.

Dann schreibt man elseif zusammen und nicht auseinander.

Und ganz am Schluss fehlt noch eine geschweifte Klammer zu (falls die nicht noch kommt).