Datenbankabfrage

Alles, was PHP betrifft, kann hier besprochen werden.

Datenbankabfrage

Postby MPC » 30. August 2008 14:17

Hallo @all,
ich habe xampp lokal installiert. OS ist WinXP SP3 .
Es funktioniert soweit auch alles.

Habe mein Webprojekt in den htdocs Ordner kopiert sowie
meine Datenbanken importiert. Soweit alles O.k. Webseite
läßt sich ohne Probleme starten. Beim Start der Webseite
funktionieren auch die ersten Datenbank abfragen. Nun komm
ich zu meinem Problem: Ich ruf einen Link auf der eine Auflistung
aus der Datenbank holt, dieser wird auch noch korrekt angezeigt.
Klick ich nun von dieser Liste eine Link an um Detailinformation
zuerhalten bekomme ich nur eine leere Seite angezeigt ohne
Fehlermeldung. Ich rufe z.B.: typ.php?id=1 auf. Mir kommt es
so vor als würden die Parameter ?id=1 nicht richtig übergeben.
Bastel nun schon seit zwei Tagen herrum und bin nun mit meinem
Latein am Ende. Hier einmal der Quelltext der typ.php:

Code: Select all
<?PHP
require("inc/settings.inc.php");

/* Erstellt Connect zu Datenbank her */
$db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort) or die ("Konnte keine Verbindung zur Datenbank herstellen");
$db_check = @MYSQL_SELECT_DB($db_name);
if($db)
echo "";
$result_typ = mysql_db_query("$db_name",$SQL_Statement = "SELECT * FROM typ_db WHERE id = '$id'");
if ($row_typ = mysql_fetch_row($result_typ)){

echo "<div align=\"center\">";
echo "<table width=\"100%\" border=\"0\" cellpadding=\"1\" cellspacing=\"1\">";
echo "<tr>";
echo "<td width=\"80%\" colspan=\"4\" bgcolor=\"#333399\">";
echo "<font face=\"Arial, Helvetica, sans-serif\" size=\"3\" color=\"#FFFFFF\">";
echo "<b>$row_typ[1]</b></td></tr></font>";
echo "<td width=\"10%\" bgcolor=\"#E2F0FC\"><font face=\"Arial, Helvetica, sans-serif\" size=\"2\" color=\"#333399\">";
echo "<div align=\"center\"><b>Typ-Nr.:</b></td></font>";
echo "<td width=\"20%\" bgcolor=\"#E2F0FC\"><font face=\"Arial, Helvetica, sans-serif\" size=\"2\" color=\"#333399\">";
echo "<div align=\"center\"><b>$row_typ[1]</b></td></font>";
echo "<td width=\"20%\" bgcolor=\"#E2F0FC\"><font face=\"Arial, Helvetica, sans-serif\" size=\"2\" color=\"#333399\">";
echo "<div align=\"center\"><b>$row_typ[3]</b></td></font>";
echo "<td width=\"20%\" bgcolor=\"#E2F0FC\"><font face=\"Arial, Helvetica, sans-serif\" size=\"2\" color=\"#333399\">";
echo "<div align=\"center\"><b>$row_typ[4]</b></td></font>";

}
$result_detail = mysql_db_query("$db_name",$SQL_Statement = "SELECT * FROM detail_db WHERE id = '$id'");
while($row_detail = mysql_fetch_row($result_detail)){
$count++;
?>
   <tr> 
   <td width="10%" bgcolor="#E2F0FC"><font face="Arial, Helvetica, sans-serif" size="2" color="#336699">
   <div align="center"><b><? echo "$count"; ?></td></font></b>
   <td width="20%" bgcolor="#E2F0FC"><font face="Arial, Helvetica, sans-serif" size="2" color="#336699">
   <div align="center"><b><br>
   <a href="detail.php?Artikel=<? echo "$row_detail[1]"; ?>&id=<? echo "$row_detail[0]"; ?>">
   <img src="../dardathumb/<? echo "$row_detail[1]"; ?>.jpg" border="0" Alt="Details und Gro&szlig;ansicht"></a><br>
   <a href="detail.php?Artikel=<? echo "$row_detail[1]"; ?>&id=<? echo "$row_detail[0]"; ?>">
   <? echo "$row_detail[1]"; ?></a></b>
   </td></font></b>

   <td width="20%" bgcolor="#E2F0FC"><font face="Arial, Helvetica, sans-serif" size="2" color="#336699">
   <div align="center"><b><? echo "$row_detail[2]"; ?></b></td></font>
   <td width="20%" bgcolor="#E2F0FC"><font face="Arial, Helvetica, sans-serif" size="2" color="#336699">
   <div align="center"><b><? echo "$row_detail[3]"; ?></b></td></font>
   </tr>
<?
}

### Schliessen der Datenbank-Verbindung
$db_close = @MYSQL_CLOSE($db);

if($db_close)
echo "";
else
echo "Konnte Verbindung zur Datenbank nicht schliessen";
?>


Wo kann der Fehler liegen oder was müßte eventuell an xampp
geändert werden? Weiß wirklich nicht mehr weiter und wäre für
Hilfe sehr dankbar.
MPC
 
Posts: 8
Joined: 30. August 2008 13:24

Postby Wiedmann » 30. August 2008 14:40

Code: Select all
<?PHP

Ändere das mal in:
Code: Select all
<?php
error_reporting(E_ALL);


Wenn dir dann Fehler angezeigt werden, korrigiere diese.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby MPC » 30. August 2008 15:57

Erstmal Danke.
Hab ich mal gemacht, nun kommt folgende Fehlermeldung:

Notice: Undefined variable: id in D:\Server\Apache2\htdocs\db\typ.php on line 37
Notice: Undefined variable: id in D:\Server\Apache2\htdocs\db\typ.php on line 56

Hatte ich mit meiner Vermutung wohl Recht das die Parameter nicht
richtig übergeben werden. Sind beides die Einträge '$id' die eigentlich
mit der 1 gefüllt werden sollten. Woran kann das liegen? Auf meinem
Webspace funktioniert alles einwandfrei. Bin leider nicht so fit in PHP.
Hast Du vielleicht ein Tip für mich?
MPC
 
Posts: 8
Joined: 30. August 2008 13:24

Postby Wiedmann » 30. August 2008 16:08

Hatte ich mit meiner Vermutung wohl Recht das die Parameter nicht
richtig übergeben werden.

http://de.php.net/manual/en/language.va ... ternal.php
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby MPC » 30. August 2008 16:30

Super, wenn man weiß nach was man Suchen muß ;-)

Habe jetzt in der php.ini den register_globals = Off auf
register_globals = On geändert. Jetzt bekomm ich wenigstens
keine leere Seite mehr Angezeigt. Trotzdem noch eine Fehlermeldung
bezüglich der Variable $count++; diese ist auch eine "Undefined variable".
Die Variable soll doch nur die Ausgegeben Zeilen zählen und Anzeigen.
Macht sie auch zählt schön hoch und zeigt sie an, aber trotzdem die
Fehlermeldung! Muß ich das verstehen?
MPC
 
Posts: 8
Joined: 30. August 2008 13:24

Postby Wiedmann » 30. August 2008 16:37

Habe jetzt in der php.ini den register_globals = Off auf register_globals = On geändert.

Das war die schlechte Lösung:
http://de.php.net/manual/en/security.globals.php

trotzdem noch eine Fehlermeldung bezüglich der Variable $count++;

Das:
Code: Select all
$count++;


könnte man auch so schreiben:
Code: Select all
$count = $count + 1;

=> Der Variablen $count wird der Inhalt der Variablen $count + 1 zugewiesen. Beim 1. Schleifendurchlauf gibt es diese Variable aber noch gar nicht. Also muss er zu irgendwas Unbekannten 1 dazuaddieren und das in $count abspeichern.

Ergo: Vor der Schleife diese Variable initialisieren mit z.B. "$count = 0;".
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby MPC » 30. August 2008 16:54

Mmmh,
habe eben mal die phpinfo bei meinem Provider aufgerufen,
dort sind die register_globals auch auf On!!!
Muß zur meine Schande gestehen das meine Quelltexte schon
5 Jahre alt sind und ich eigentlich nur ein neues Design für die Seite
machen will. Bin etwas eingerostet :cry: Daher war das erstmal ne
schnelle Lösung. Werde aber wohl das Problem haben wenn der
Provider die register_globals auf Off stellt. Leider werde ich aus dem
Link nicht schlauer, mir ist nur das mit den register_globals aufgefallen.
Habe jetzt erstmal keine Idee wie ich den Fehler beseitigen kann.

Das mit dem count war einleuchtend und gut erklärt. Habe es auch gleich
geändert. Muß schon sagen, das ist hier wenigstens mal ein Forum wo
dir geholfen wird und nicht mit schlauen Sprüchen rumgeworfen wird.
Bist gut auf Zack. Danke
MPC
 
Posts: 8
Joined: 30. August 2008 13:24

Postby Knight1 » 30. August 2008 17:49

MPC wrote:... Habe jetzt erstmal keine Idee wie ich den Fehler beseitigen kann. ...



Es gibt die beiden Arrays $_GET und $_POST, je nach dem wie die Daten übertragen werden.
In Deinem Fall wäre es als das Array $_GET
Dort (und auch in der POST-Variante) sind die externen Variablen als Indexe vorhanden.
Hier also $_GET['id']
Ich an Deiner Stelle würde mir angewöhnen nur noch mit diesen Arrays zu arbeiten, in PHP5 ist register_globals in der Standard-Konfiguration off und in PHP6 soll dieses gänzlich wegfallen.
Es gibt Provider die setzen register_globals on weil die sich die Support-Anfragen wegen nicht lauffähiger Scripte sparen wollen.



Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby MPC » 30. August 2008 18:35

Könnte mir vielleicht jemand anhand meines Quelltextes einmal
zeigen was da geändert werden muß? Ich steh gerade voll auf dem
Schlauch bzw. bin ich wohl langsam mit meinen 42 Jahren zu alt um
das richtig zu verstehen :cry:
MPC
 
Posts: 8
Joined: 30. August 2008 13:24

Postby Knight1 » 30. August 2008 18:54

MPC wrote:Könnte mir vielleicht jemand anhand meines Quelltextes einmal
zeigen was da geändert werden muß? Ich steh gerade voll auf dem
Schlauch bzw. bin ich wohl langsam mit meinen 42 Jahren zu alt um
das richtig zu verstehen :cry:


Anstelle:
Code: Select all
$result_typ = mysql_db_query("$db_name",$SQL_Statement = "SELECT * FROM typ_db WHERE id = '$id'");
.
.
.
$result_detail = mysql_db_query("$db_name",$SQL_Statement = "SELECT * FROM detail_db WHERE id = '$id'");


Folgendes:
Code: Select all
$result_typ = mysql_db_query("$db_name",$SQL_Statement = "SELECT * FROM typ_db WHERE id = '$_GET['id']'");
.
.
.
$result_detail = mysql_db_query("$db_name",$SQL_Statement = "SELECT * FROM detail_db WHERE id = '$_GET['id']'");



Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby MPC » 30. August 2008 19:18

Never ending story :(

Nach der Änderung bekomme ich folgende Fehlermeldung:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE,
expecting T_STRING or T_VARIABLE or T_NUM_STRING on Line 37

Genau dort wo ich das '$id' in '$_GET['id']' geändert habe.
Versteh die Welt nicht mehr......
MPC
 
Posts: 8
Joined: 30. August 2008 13:24

Postby Knight1 » 30. August 2008 19:23

Dann ändere mal das
Code: Select all
$result_typ = mysql_db_query("$db_name",$SQL_Statement = "SELECT * FROM typ_db WHERE id = '$_GET['id']'");
.
.
.
$result_detail = mysql_db_query("$db_name",$SQL_Statement = "SELECT * FROM detail_db WHERE id = '$_GET['id']'");


gegen das
Code: Select all
$result_typ = mysql_db_query("$db_name",$SQL_Statement = "SELECT * FROM typ_db WHERE id = '{$_GET['id']}'");
.
.
.
$result_detail = mysql_db_query("$db_name",$SQL_Statement = "SELECT * FROM detail_db WHERE id = '{$_GET['id']}'");



Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby MPC » 30. August 2008 19:52

Wahnsinn :lol: Das war´s gewesen.
Jetzt hab ich nur noch zwei kleine Problemchen :(

Undefined variable $vonbis == ""

if ($vonbis == "" || $vonbis == "0,25")

{
$Page=1 ;
$vonbis = "0, 25";
}

if ( $vonbis == '25,25' )
{
$Page=2 ;
}

if ( $vonbis == '50,25' )
{
$Page=3 ;
}

if ( $vonbis == '75,25' )
{
$Page=4 ;
}

if ( $vonbis == '100,25' )
{
$Page=5 ;
}


Wenn ich die Variable mit einem Wert fülle, öffnet sich immer wieder
die erste Seite.

Dann habe ich nochmal ein Problemchen mit count, auch wieder
Undefined variable

{
$result_typ = "SELECT * FROM typ_db where id=$row->id";
$ergebnis2 = mysql_query($result_typ);
$row_typ = mysql_fetch_object($ergebnis2);
$count++;

?>
<div align="center">
<table width="50%" border="0" cellpadding="1" cellspacing="1">
<td width="45%" bgcolor="#E2F0FC"><font face="Arial, Helvetica, sans-serif" size="2" color="#336699">
<a href="../../db/typ.php?&id=<? echo "$row->id"; ?>"><b><? echo "$row_typ->Typ"; ?>:</b></a>
<a href="../../db/detail.php?Artikel=<? echo "$row->Artikelnr"; ?>&id=<? echo "$row->id"; ?>">
<? echo "$row->Artikelnr"; ?></b></a></td></font>
</tr>
</table>
<?
}


Hier hatte ich schon mit $count = 0 vor der Schleife ausprobiert,
klappt aber leider nicht.

Ansonsten bin ich jetzt erstmal damit beschäftigt meine ganzen Seiten
umzuändern.

Auf jedenfall ein RIESIGES DANKE SCHÖN, fühl Dich umarmt :lol:
MPC
 
Posts: 8
Joined: 30. August 2008 13:24

Postby Knight1 » 30. August 2008 20:10

MPC wrote:Wahnsinn :lol: Das war´s gewesen.
Jetzt hab ich nur noch zwei kleine Problemchen :(

Undefined variable $vonbis == ""

if ($vonbis == "" || $vonbis == "0,25")

{
$Page=1 ;
$vonbis = "0, 25";
}

if ( $vonbis == '25,25' )
{
$Page=2 ;
}

if ( $vonbis == '50,25' )
{
$Page=3 ;
}

if ( $vonbis == '75,25' )
{
$Page=4 ;
}

if ( $vonbis == '100,25' )
{
$Page=5 ;
}


Wenn ich die Variable mit einem Wert fülle, öffnet sich immer wieder
die erste Seite.

Dann habe ich nochmal ein Problemchen mit count, auch wieder
Undefined variable

{
$result_typ = "SELECT * FROM typ_db where id=$row->id";
$ergebnis2 = mysql_query($result_typ);
$row_typ = mysql_fetch_object($ergebnis2);
$count++;

?>
<div align="center">
<table width="50%" border="0" cellpadding="1" cellspacing="1">
<td width="45%" bgcolor="#E2F0FC"><font face="Arial, Helvetica, sans-serif" size="2" color="#336699">
<a href="../../db/typ.php?&id=<? echo "$row->id"; ?>"><b><? echo "$row_typ->Typ"; ?>:</b></a>
<a href="../../db/detail.php?Artikel=<? echo "$row->Artikelnr"; ?>&id=<? echo "$row->id"; ?>">
<? echo "$row->Artikelnr"; ?></b></a></td></font>
</tr>
</table>
<?
}


Hier hatte ich schon mit $count = 0 vor der Schleife ausprobiert,
klappt aber leider nicht.

Ansonsten bin ich jetzt erstmal damit beschäftigt meine ganzen Seiten
umzuändern.

Auf jedenfall ein RIESIGES DANKE SCHÖN, fühl Dich umarmt :lol:


Woher kommt die Variable $vonbis ?
Wenn über den Browser dann geht das genauso wie mit der id-Variable. Einfach den Namen der Variable als Index des entsprechenden Arrays $_GET oder $_POST.


count-Problem:
Wiedmann wrote:Zitat:
trotzdem noch eine Fehlermeldung bezüglich der Variable $count++;

Das:
Code:
$count++;


könnte man auch so schreiben:
Code:
$count = $count + 1;

=> Der Variablen $count wird der Inhalt der Variablen $count + 1 zugewiesen. Beim 1. Schleifendurchlauf gibt es diese Variable aber noch gar nicht. Also muss er zu irgendwas Unbekannten 1 dazuaddieren und das in $count abspeichern.

Ergo: Vor der Schleife diese Variable initialisieren mit z.B. "$count = 0;".


Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby MPC » 30. August 2008 20:36

Will Dich ja nicht zu sehr beanspruchen. Hier geht es darum alle Einträge
aus der Datenbank auf eine Anzahl Seiten zu verteilen.
Die Variable ist erstmal leer und zeigt die ersten 25 Einträge an.
Es wird weiter unten eine Linkliste erstellt mit der Seitenanzahl.
Je nachdem was man für eine Zahl anklickt, werden immer die
nächsten 25 Einträge angezeigt. Da aber die erste Variable leer ist,
wird egal was man für eine Seitenzahl anklickt, immer die erste an-
gezeigt. Hiermal der komplette Quelltext:

<HTML>
<HEAD>
<meta http-equiv="Page-Enter" content="blendTrans(Duration=1)">
<style>
A:link {text-decoration: none; color: #000099;}
A:visited {text-decoration: none; color: #000099}
A:active {color: #000099}
A:hover {color:#000000; text-decoration: underline : overline}
</style>

</HEAD>

<BODY BGCOLOR="#FFFFFF" BGPROPERTIES="FIXED" Text="#336699"
STYLE="scrollbar-face-color:#333399;
scrollbar-arrow-color:#E2F0FC;
scrollbar-base-color:#333399;
scrollbar-darkshadow-color:;
scrollbar-face-color:#333399;
scrollbar-highlight-color:#E2F0FC;
scrollbar-shadow-color:;
scrollbar-track-color:" leftmargin="8" topmargin="4" marginwidth="0" marginheight="0">
<div align="center">
<h2><font face="Verdana" color="#336699"></font></h2><br><br>

<?PHP
require("inc/settings.inc.php");
if ($vonbis == "" || $vonbis == "0,25")

{
$Page=1 ;
$vonbis = "0, 25";
}

if ( $vonbis == '25,25' )
{
$Page=2 ;
}

if ( $vonbis == '50,25' )
{
$Page=3 ;
}

if ( $vonbis == '75,25' )
{
$Page=4 ;
}

if ( $vonbis == '100,25' )
{
$Page=5 ;
}

/* Erstellt Connect zu Datenbank her */
$db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort) or die ("Konnte keine Verbindung zur Datenbank herstellen");
$db_check = @MYSQL_SELECT_DB($db_name);
if($db)
echo "";

echo'
<div align="center">
<table width="80%" border="0" cellpadding="0" cellspacing="2">
<tr>
<td width="80%" bgcolor="#333399">
<div align="center">
<b><font face="Arial, Helvetica, sans-serif" size="3" color="#FFFFFF">Fahrzeug Typ</font></b></div>
</td>
<td width="20%" bgcolor="#333399">
<div align="center">
<b><font face="Arial, Helvetica, sans-serif" size="3" color="#FFFFFF">Anzahl</font></b></div>
</td>
</tr>
';

$result_typ = mysql_db_query("$db_name","SELECT * FROM typ_db LIMIT $vonbis");
while($row_typ = mysql_fetch_row($result_typ)){
$result_detail = mysql_db_query("$db_name","SELECT COUNT(id) FROM detail_db where id=$row_typ[0]");
$count = mysql_fetch_row($result_detail);
?>
<tr>

<td bgcolor="#E2F0FC">
<div align="center">
<b><a href="typ.php?id=<? echo "$row_typ[0]"; ?>"><? echo "$row_typ[1]"; ?></b></a></div></font>
</td>

</td>
<td bgcolor="#E2F0FC">
<div align="center"><b><? echo "$count[0]"; ?></b></font></div>
</td>
</tr>
<?

}
echo "</tr></td></table> ";

?>
<table>
<tr>
<td bgcolor="#FFFFFF">&nbsp;</td>
<td bgcolor="#FFFFFF">&nbsp;</td>
<td bgcolor="#FFFFFF">&nbsp;</td>
<td bgcolor="#FFFFFF">&nbsp;</td>
</tr>
</table>

<div align="center">
<table width="80%" border="0" cellpadding="0" cellspacing="2">

<tr>
<td width="20%" bgcolor="#E2F0FC"><div align="left">&nbsp;</td>

<td width="60%" bgcolor="#E2F0FC"><div align="center">
<font face="Verdanna" color="#000099" size="3"><b>Seite&nbsp;</font>

<?;
if ( $Page != 1 )
echo '<a href="liste.php?vonbis=0,25">1</a>&nbsp;';
else
echo '<font face ="Verdanna" color="#000099" size="3"><B><U>1</B></U></font>&nbsp;';

if ( $Page != 2 )
echo '<a href="liste.php?vonbis=25,25">2</a>&nbsp;';
else
echo '<font face ="Verdanna" color="#000099" size="3"><B><U>2</B></U></font>&nbsp;';

if ( $Page != 3 )
echo '<a href="liste.php?vonbis=50,25">3</a>&nbsp;';
else
echo '<font face ="Verdanna" color="#000099" size="3"><B><U>3</B></U></font>&nbsp;';

if ( $Page != 4 )
echo '<a href="liste.php?vonbis=75,25">4</a>&nbsp;';
else
echo '<font face ="Verdanna" color="#000099" size="3"><B><U>4</B></U></font>&nbsp;';

if ( $Page != 5 )
echo '<a href="liste.php?vonbis=100,25">5</a>&nbsp;';
else
echo '<font face ="Verdanna" color="#000099" size="3"><B><U>5</B></U></font>&nbsp;';

?>

</b></td></div>

<td width="20%" bgcolor="#E2F0FC"><div align="right">&nbsp;</td>
</tr>
</table>

<br><br>
<div align="center"><a href="javascript:history.back()">zur&uuml;ck</a>
<br><br>
<img src="../grafik/unten.gif" border="0">
<?
### Schliessen der Datenbank-Verbindung
$db_close = @MYSQL_CLOSE($db);

if($db_close)
echo "";
else
echo "";
?>
</div>
</body>
</html>


Mit dem zweiten Problemchen habe ich schon alles ausprobiert
was mir vorgeschlagen wurde. Es klappt einfach nicht
MPC
 
Posts: 8
Joined: 30. August 2008 13:24

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests