Neue DB-Struktur, altes Problem!

Alles, was nicht in die anderen Foren passt, kannst du hier loswerden.
Gerhard0964
Beiträge: 129
Registriert: 15. Dez 2007, 17:53

Beitrag von Gerhard0964 »

Hallo Matze,

bin erst heute dazu gekommen mich der Sache wieder zu widmen.

Ich habe die Abfrage jetzt so abgeändert / ergänzt:
AND usr_valid = 1
ORDER BY row1id1.usd_value ASC";

$result = $g_db->query($sql);
$num_rows = mysql_num_rows($result);

$jahr = date("Y");

.
.
.

//Jetzt wird z.B. das Eintrittsdatum abgefragt
$intra_day = $user->getValue("Mitglied seit");//Hier deinen Feldnamen eintragen

if ($num_rows = 0)
{
echo "<b>Keine Mitglieder vorhanden.</b>";
}


if(more_than_years(15, $intra_day))
{
echo "<b>".$user->getValue("Nachname")."</b>, <b>".$user->getValue("Vorname")."</b> seit " .date('d.m.Y', strtotime($intra_day)) ;
echo "<br>";
}
}
Leider klappt das aber auch nicht. Kann es sein, dass ich aus der letzten if-Abfrage eine or machen muß?

Gruß
Gerhard
Jochen
Team
Beiträge: 1506
Registriert: 22. Feb 2006, 18:11

Beitrag von Jochen »

Hallo,

einen Fehler im Code seh ich spontan. Mit $num_rows = 0 setzt du die Variable auf 0. Zum vergleichen müsste es heißen $num_rows == 0.

Weiß nicht obs daran hakt, aber damit ist der schon mal raus. ;-)

Gruß Jochen
Gerhard0964
Beiträge: 129
Registriert: 15. Dez 2007, 17:53

Beitrag von Gerhard0964 »

Hallo Jochen,

nö, das war es leider auch nicht. :cry:

Gruß
Gerhard
matzman2000
Former team member
Beiträge: 1087
Registriert: 2. Sep 2007, 17:12
Wohnort: Itzstedt
Kontaktdaten:

Beitrag von matzman2000 »

Hallo Gerhard,

lass' doch mal die Variable $num_rows mit ausgeben (echo "Anzahl: ". $num_rows;). Dann sieht man sicherlich, ob an der Stelle evtl. was hakt.

Gruss,
Matze
Gerhard0964
Beiträge: 129
Registriert: 15. Dez 2007, 17:53

Beitrag von Gerhard0964 »

Hallo Matze,

Test durchgeführt, Antwort:
Im Jahr 2009 seit mind. 60 Jahren im Verein

Anzahl: 0
Also er scheint die Abfrage zumindest durchzuführen.

Gruß
Gerhard
matzman2000
Former team member
Beiträge: 1087
Registriert: 2. Sep 2007, 17:12
Wohnort: Itzstedt
Kontaktdaten:

Beitrag von matzman2000 »

Hallo Gerhard,

und wenn Du die Abfrage auf eine Altersgruppe machst, die Mitglieder enthält, erhälst Du dann mit dieser Ausgabe die Anzahl der Mitglieder oder auch 0?

Ansonsten müsstest Du bitte nochmal den Ausschnitt Deines Quelltextes an dieser Stelle posten.

Gruss,
Matze
Gerhard0964
Beiträge: 129
Registriert: 15. Dez 2007, 17:53

Beitrag von Gerhard0964 »

Hallo Matze,

wenn ich Mitglieder habe, wirft er korrekt die Zahl aus. Er ignoriert nur die Weisung wenn 0 dann "Keine Mitglieder vorhanden". :(

Gruß
Gerhard
Gerhard0964
Beiträge: 129
Registriert: 15. Dez 2007, 17:53

Beitrag von Gerhard0964 »

Im Jahr 2009 seit mind. 55 Jahren im Verein

Anzahl: 3
H.., Fr seit 06.06.1951
K..., Ju seit 03.09.1950
W..., Ku seit 01.03.1953
matzman2000
Former team member
Beiträge: 1087
Registriert: 2. Sep 2007, 17:12
Wohnort: Itzstedt
Kontaktdaten:

Beitrag von matzman2000 »

Dann poste doch bitte nochmal den Codeausschnitt, das sollte sich ja relativ einfach lösen lassen...
Gerhard0964
Beiträge: 129
Registriert: 15. Dez 2007, 17:53

Beitrag von Gerhard0964 »

Hier nochmal der komplette Code für die 60er:
<?php
include_once($_SERVER['DOCUMENT_ROOT']. "/admidio_neu/adm_program/system/common.php");

//dieses Jahr
$this_year = date("Y");

function more_than_years($years, $intra_day)
{
$intra_year = substr($intra_day,0,4);
if($this_year - $intra_year < $years)
{
return true;
}
else
{
return false;
}
}

$sql ="SELECT usr_id, row1id1.usd_value, row4id2.usd_value, row7id10.usd_value, row10id11.usd_value, rol_id
FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. "
LEFT JOIN adm_user_data row1id1 ON row1id1.usd_usr_id = usr_id
AND row1id1.usd_usf_id = 1
LEFT JOIN adm_user_data row4id2 ON row4id2.usd_usr_id = usr_id
AND row4id2.usd_usf_id = 2
LEFT JOIN adm_user_data row7id10 ON row7id10.usd_usr_id = usr_id
AND row7id10.usd_usf_id = 10
LEFT JOIN adm_user_data row10id11 ON row10id11.usd_usr_id = usr_id
AND row10id11.usd_usf_id = 11
JOIN adm_user_data row10id20 ON row10id20.usd_usr_id = usr_id
AND row10id20.usd_usf_id = 20
AND str_to_date(row10id20.usd_value, '%Y-%m-%d') < date_add(sysdate(), interval -60 year)
AND str_to_date(row10id20.usd_value, '%Y-%m-%d') > date_add(sysdate(), interval -64 year)
WHERE rol_id = 2
AND rol_valid = 1
AND rol_cat_id = cat_id
AND cat_org_id = 1
AND mem_rol_id = rol_id
AND mem_valid = 1
AND mem_usr_id = usr_id
AND usr_valid = 1
ORDER BY row1id1.usd_value ASC";

$result = $g_db->query($sql);
$num_rows = mysql_num_rows($result);

$jahr = date("Y");
echo "<u><font size=\"+1\" color = \"red\">Im Jahr $jahr seit mind. 60 Jahren im Verein</font></u><br><br>";
echo "Anzahl: ". $num_rows;

while($row = $g_db->fetch_array($result))
{
//Kleine erkl峵ng
//Hier wird ein Userobjekt erzeugt welches alle Informationen &#56394;&#56690; den User hat
$user = new User($g_db, $row['usr_id']);

//Jetzt wird z.B. das Eintrittsdatum abgefragt
$intra_day = $user->getValue("Mitglied seit");//Hier deinen Feldnamen eintragen

if($num_rows == 0)
{
echo "<b>Keine Mitglieder vorhanden.</b>";
}

if(more_than_years(15, $intra_day))
{
echo "<b>".$user->getValue("Nachname")."</b>, <b>".$user->getValue("Vorname")."</b> seit " .date('d.m.Y', strtotime($intra_day)) ;
echo "<br>";
}
}

?>
matzman2000
Former team member
Beiträge: 1087
Registriert: 2. Sep 2007, 17:12
Wohnort: Itzstedt
Kontaktdaten:

Beitrag von matzman2000 »

Hallo Gerhard,

Du hast die Abfrage auf die Anzahl in die while-Schleife mit reingenommen, die aber nicht durchlaufen wird, wenn die Anzahl 0 ist.
Ändere den Quelltext für die While-Schleife daher so ab:

Code: Alles auswählen

if($num_rows == 0)
{
echo "<b>Keine Mitglieder vorhanden.</b>";
}
else
{
while($row = $g_db->fetch_array($result))
{
//Kleine erklärung
//Hier wird ein Userobjekt erzeugt welches alle Informationen über den User hat
$user = new User($g_db, $row['usr_id']);

//Jetzt wird z.B. das Eintrittsdatum abgefragt
$intra_day = $user->getValue("Mitglied seit");//Hier deinen Feldnamen eintragen

if(more_than_years(15, $intra_day))
{
echo "<b>".$user->getValue("Nachname")."</b>, <b>".$user->getValue("Vorname")."</b> seit " .date('d.m.Y', strtotime($intra_day)) ;
echo "<br>";
}
}
}
Damit wird zunächst auf die Ergebnisanzahl abgefragt. Ich hatte das allerdings auch so schonmal innerhalb dieses Threads geschrieben. Das ist wohl irgendwo in Deinem Quelltext verloren gegangen... :wink:

Gruss,
Matze
Gerhard0964
Beiträge: 129
Registriert: 15. Dez 2007, 17:53

Beitrag von Gerhard0964 »

Hallo Matze,

bitte schau jetzt mal über das komplette Table.
<table width="400" cellspacing="0" cellpadding="5" border="0" bordercolor = "red" borderstyle="solid" align="center">
<tbody>
<tr>
<td style="text-align: left;" colspan ="1">
<?php
include_once($_SERVER['DOCUMENT_ROOT']. "/admidio_neu/adm_program/system/common.php");

//dieses Jahr
$this_year = date("Y");

function more_than_years($years, $intra_day)
{
$intra_year = substr($intra_day,0,4);
if($this_year - $intra_year < $years)
{
return true;
}
else
{
return false;
}
}

$sql ="SELECT usr_id, row1id1.usd_value, row4id2.usd_value, row7id10.usd_value, row10id11.usd_value, rol_id
FROM ". TBL_ROLES. ", ". TBL_CATEGORIES. ", ". TBL_MEMBERS. ", ". TBL_USERS. "
LEFT JOIN adm_user_data row1id1 ON row1id1.usd_usr_id = usr_id
AND row1id1.usd_usf_id = 1
LEFT JOIN adm_user_data row4id2 ON row4id2.usd_usr_id = usr_id
AND row4id2.usd_usf_id = 2
LEFT JOIN adm_user_data row7id10 ON row7id10.usd_usr_id = usr_id
AND row7id10.usd_usf_id = 10
LEFT JOIN adm_user_data row10id11 ON row10id11.usd_usr_id = usr_id
AND row10id11.usd_usf_id = 11
JOIN adm_user_data row10id20 ON row10id20.usd_usr_id = usr_id
AND row10id20.usd_usf_id = 20
AND str_to_date(row10id20.usd_value, '%Y-%m-%d') < date_add(sysdate(), interval -60 year)
AND str_to_date(row10id20.usd_value, '%Y-%m-%d') > date_add(sysdate(), interval -64 year)
WHERE rol_id = 2
AND rol_valid = 1
AND rol_cat_id = cat_id
AND cat_org_id = 1
AND mem_rol_id = rol_id
AND mem_valid = 1
AND mem_usr_id = usr_id
AND usr_valid = 1
ORDER BY row1id1.usd_value ASC";

$result = $g_db->query($sql);
$num_rows = mysql_num_rows($result);

$jahr = date("Y");
echo "<u><font size=\"+1\" color = \"red\">Im Jahr $jahr seit mind. 60 Jahren im Verein</font></u><br><br>";
echo "Anzahl: ". $num_rows;
if($num_rows == 0)
{
echo "<b>Keine Mitglieder vorhanden.</b>";
}
else
{
while($row = $g_db->fetch_array($result))
{
//Kleine erkl峵ng
//Hier wird ein Userobjekt erzeugt welches alle Informationen &#56394;&#56690; den User hat
$user = new User($g_db, $row['usr_id']);

//Jetzt wird z.B. das Eintrittsdatum abgefragt
$intra_day = $user->getValue("Mitglied seit");//Hier deinen Feldnamen eintragen


if(more_than_years(15, $intra_day))
{
echo "<b>".$user->getValue("Nachname")."</b>, <b>".$user->getValue("Vorname")."</b> seit " .date('d.m.Y', strtotime($intra_day)) ;
echo "<br>";
}
}

?>

</td>
</tr>
</tbody>
</table>
Ich erhalte jetzt nämlich folgende Fehlermeldung:
Parse error: syntax error, unexpected $end in /homepages/6/d137089371/htdocs/php/60_jahre_neu.php on line 82
Das wäre laut Notpad++ "</table>" Und das kann es doch nicht wirklich sein, oder?

Danke
Gerhard
matzman2000
Former team member
Beiträge: 1087
Registriert: 2. Sep 2007, 17:12
Wohnort: Itzstedt
Kontaktdaten:

Beitrag von matzman2000 »

Du hast meinen Code nicht komplett kopiert. Da fehlt ein "}" hinter der While-Schleife (geht mit der "else" Anweisung auf und wurde nicht geschlossen):

Code: Alles auswählen

}
}
}

?>

</td>
</tr>
</tbody>
</table>
Dann sollte es passen...
Gerhard0964
Beiträge: 129
Registriert: 15. Dez 2007, 17:53

Beitrag von Gerhard0964 »

Hallo Matze,

OK, Dummheit gehört bestraft! Danke! Jetzt klappt es wie es soll. Keine Mitglieder vorhanden wird angezeigt. :D :D :D

Nochmals vielen Dank, auch für die Geduld mit mir.

Gruß
Gerhard
Gerhard0964
Beiträge: 129
Registriert: 15. Dez 2007, 17:53

Beitrag von Gerhard0964 »

Guten Morgen,

ich war ja so zufrieden mit meinen Statistiken - bis ich heute morgen das Update auf 2.1.5 installiert habe. Das war es dann gewesen mit meinen schönen Statistiken. Ich erhalte jetzt nur noch folgende Meldung:
Im Jahr 2009 zu Ehren

S Q L - E R R O R

CODE: 1054
Unknown column 'mem_valid' in 'where clause'

B A C K T R A C E

FILE: adm_program/system/db/mysql.php
LINE: 193
CALL: db::db_error()

FILE: adm_program/system/db/mysql.php
LINE: 77
CALL: mysqldb->db_error()

FILE: homepages/6/d137089371/htdocs/php/ehrungen_neu.php
LINE: 56
CALL: mysqldb->query()
bzw:
Mitgliederstatistik
Mitglieder
Insgesamt: 300
M�nner: 157
Frauen: 76
M�nner aus Ludwigshafen: 136
Frauen aus Ludwigshafen: 60
Fu�ball:

S Q L - E R R O R

CODE: 1054
Unknown column 'mem_valid' in 'where clause'

B A C K T R A C E

FILE: adm_program/system/db/mysql.php
LINE: 193
CALL: db::db_error()

FILE: adm_program/system/db/mysql.php
LINE: 77
CALL: mysqldb->db_error()

FILE: homepages/6/d137089371/htdocs/static/statistik_vsk_neu.php
LINE: 177
CALL: mysqldb->query()

FILE: homepages/6/d137089371/htdocs/components/com_staticxt/staticxt.php
LINE: 160
CALL: include('homepages/6/d137089371/htdocs/static/statistik_vsk_neu.php')

FILE: homepages/6/d137089371/htdocs/index.php
LINE: 236
CALL: require_once()
Die Online-Mitgliederverwaltung für Vereine, Gruppen und Organisationen © 2004 - 2008 Admidio Team
Was ist da in der DB geändert? Oder anders: Was muss ich da jetzt wieder ändern?

Übrigens funktioniert auch das Birthdaymodul 1.5.0 nicht. Ich erhalte nur die Meldung, dass X Personen Geburtstag haben, egal was ich in der Config einstelle!

Jetzt schon mal vielen Dank für die Hilfe und den Streß den ich jetzt wahrscheinlich mal wieder auslöse.

Gruß
Gerhard
Antworten