Seite 1 von 2

PHP/Mysql-Problem beim auslesen

Verfasst: 10.05.2008 09:15
von h32Lg
Hi,

ich hab nun einiges ausprobiert. Zunächst hab ich eine test.php erstellt in welcher ich die db-Daten includier. Dann den Code hier eingefügt:

Code: Alles auswählen

function today () {
	$i = "0";
	$result = mysql_query("SELECT `datum` FROM `dbname`.`visits`");
	while($row = mysql_fetch_array($result)) {
		if ($row['datum'] == $date) { $i++; }
	}
	return $i;
}
dbname steht für meinen Datenbanknamen :D

Wenn ich nun die test.php starte und anstatt dem return $i ein echo setze, wird mir die anzahl der leute gezeigt die heute auf meiner HP wahren. Füg ich den Code aber nun in meine core-Datei ein und will drauf zugreifen wird mir bei return immer 0 ausgegeben.

$date ist im MySQL-Format Y-m-d gespeichert, also zB 2008-05-10

Nun weiß ich nicht ob mir beim Kopieren was verloren gegangen ist, wohl eher nicht, oder ob ich einfach nur einen Zusammenhng überseh.

greets h32Lg 8)

PS: ich habs auch schon mit der Methode probiert, wobei dann nichtmal richtig ausgelesen wird:

Code: Alles auswählen

$result = mysql_query("SELECT `datum` FROM `dbname`.`visits` WHERE `datum`='". $date ."'");

Verfasst: 10.05.2008 10:11
von PhilippK
Also wenn "tabelle" der Name deiner Tabelle ist, wird das nicht funktionieren. Tabelle müsste das Datenbank-Schema sein:
MySQL-Dokumentation hat geschrieben:You can refer to a table within the default database as tbl_name, or as db_name.tbl_name to specify a database explicitly.
Wobei es i. d. R. sinnvoll ist, denn Datenbanknamen weg zu lassen.

Gruß, Philipp

Verfasst: 10.05.2008 10:14
von h32Lg
ja ne, is klar :oops:

also, tabelle ist der datenbankname, den ich jetzt nur tabelle genannt hab, da ich solche daten nicht raus geb ;-)

Hab ich das ganze nun so in der Konstellation als Funktion, gehts nicht, alss ich die Funktion weg und mach das ganze in der test-php-Datei, dann gehts.

greets h32Lg 8)

EDIT: So, hab den ersten Post angepasst :-P

Verfasst: 10.05.2008 10:20
von PhilippK
Drei Hinweise noch, wobei zwei und drei dein Problem lösen könnten:
  • Code: Alles auswählen

    $i = 0;
    Du willst ja eine Zahl erhöhen und keinen Text
  • mysql_query kennt einen zweiten Parameter - die Verbindungskennung. Den würde ich immer mit übergeben - nicht, dass da versehentlich auf was falsches zurückgegriffen wird
  • Wieso versuchst du es nicht mit

    Code: Alles auswählen

    SELECT Count(*) FROM visits WHERE datum = '$date'
    ?
Gruß, Philipp

Verfasst: 10.05.2008 10:34
von h32Lg
Hi,

ich habs nun ohne die " bei $i = 0;

und den $result so:

Code: Alles auswählen

$result = mysql_query("SELECT `datum` FROM `dbname`.`visits` WHERE `datum` = '". $date. "'");
". ." mit eingefügt, da die Variable ja evaluiert werden muss. Aber selbst mit/ohne gehts nicht.

welchen zweiten Parameter meintest du?


greets h32Lg 8)

EDIT:

Verbindungskennung ?

ich habs so:

Code: Alles auswählen

include('hierdernamemeinekonfigurationsdateifürdendatenbankzugriff.php');
$db_link = mysql_connect (MYSQL_HOST, MYSQL_BENUTZER, MYSQL_KENNWORT);
EDIT2:

Nun hab ichs nochmal als echo in einer testdatei probiert und da gehts wenn ichs so mach:

Code: Alles auswählen

	$i = 0;
	$result = mysql_query("SELECT `datum` FROM `dbname`.`visits` WHERE `datum` = '". $date. "'");
	$i = mysql_num_rows($result);
	return $i;
:-?

EDIT3:

Jetzt hab ichs so:

Code: Alles auswählen

	$result = mysql_query("SELECT `datum` FROM `dbname`.`visits` WHERE `datum` = '". $date ."'");
	return mysql_num_rows($result);
innerhalb der Funktion, mach ichs ohne Funktion und schreib den Code an die Stelle die ich brauch und ersetz return mit echo, dann gehts.
Das kanns aber doch nicht sein oder? Warum gehts jetzt genau hier nicht :/

Verfasst: 10.05.2008 19:35
von gn#36
Da ich deinen aktuellen Quelltext nicht ganz kenne kann ich nur raten, aber: Hast du denn $date in der Funktion überhaupt bekannt gemacht? Sprich: Wird das als Parameter übergeben oder mit global bekannt gemacht?

Verfasst: 10.05.2008 21:29
von h32Lg
Ja, es ist ne Globale-Core Datei in der ich die kompletten Funktionen verwalte, so dass ich mehr Übersicht für mich hab :wink:

Aber wie bereits erwähnt, das Problem ist nicht das auslesen, das Problem ist return.

Warum auch immer, aber wenn ich return mit echo austausche und das ganze in einer extrigen (Test)-Datei mache, wird mir die richtige Zahl ausgegeben, ansonsten 0.

derweil hab ichs so:

Code: Alles auswählen

function heute () {
	$result = mysql_query("SELECT `datum` FROM `dbname`.`visits` WHERE `datum` = '". $date ."'");
	$i = mysql_num_rows($result);
	return $i;
}
Wobei ich $i nichtmal bräuchte da ich ja bereits mit WHERE die richtige Anzahl ermittel.

Aber ich verstehs grad einfach nicht was da noch der Fehler sein könnte :/

greets h32Lg 8)

Verfasst: 10.05.2008 22:40
von PhilippK
Wie lautet denn dein Funktionsaufruf?

Gruß, Philipp

Verfasst: 10.05.2008 23:04
von gn#36
Das habe ich doch schon geschrieben: Die Variable $date ist in der Funktion unbekannt. Selbst wenn es eine globale Variable ist musst du sie der Funktion erst explizit bekanntgeben, in diesem Fall also

Code: Alles auswählen

global $date;
Ohne Funktion funktioniert das ganze, weil ohne Funktion ja $date als globale Variable bekannt ist, für Funktionen oder auch Methoden gilt das aber nicht. Die 0 wird ausgegeben, weil die Variable $date nichts als ein leerer String ist. Entweder du gibst das Datum per Parameter an die Funktion (also function heute($date) ), du erzeugst den gewünschten Inhalt in der Funktion neu (also z.B. per $date = date('Y-m-d'); ) oder du machst die Variable global verfügbar (s.o.).

Verfasst: 11.05.2008 08:57
von h32Lg
mh, aber ich hab doch alle Funktionen und Variablen in einer Datei.

Die Cookies, Sessionstart etc blablubb alles ganz oben. Und NUR bei der heutigen Ausgabe klappt es nicht.

Wenn ich es nun probier als Global zu setzen, obwohl es ja in der selben Datei ist :/ da ich ja alles Includier, reicht es dann, wenn ich die Variable setz und gleich darunter global $date schreib ?

greets h32Lg 8)

EDIT:

btw:

Code: Alles auswählen

<?php echo besucher(); ?>
<?php echo registrierte(); ?>
<?php echo heute(); ?>
<?php echo visits(); ?>
<?php echo online(); ?>
und nur heute geht nicht :/ obwohl ich auch bei anderen Aufrufen $date benötige.

EDIT:2

Also es liegt definitv am global setzen der Variable $date ;-) Obwohl ich in anderen Funktionen einwandfrei darauf zugreifen kann :/