Aktueller Monat und SelectBox Auswahl

grazioli

Grünschnabel
Hallo zusammen,

Ich habe zwei Fragen bezüglich Aktueller Monat und SelectBox Auswahl! Ich beginne mal mit dem erstenm Frage! Wenn ich die gelöst habe, wende ich mich der zweiten!

Ich möchte gerne nur den Aktuellen Monat im Hauptform anzeigen lassen! Die Funktion dazu sieht so aus:
Code:
	function GetMaster($config)
	{
		$rows=array();
		mysql_connect($config->host, $config->user, $config->password) or die('Database Server-Connection Failed');
		mysql_select_db($config->db) or die('Database Connection Failed');
		$Datum = date("Y").'-'.date("m").'-'.date("d"); 
		$sql = 'SELECT *, date_format(date,'%d.%m.%y') as Datum 
		from Spieledatum WHERE date >= '$Datum' 
		ORDER BY YEAR( `date` ) DESC , MONTH( `date` ) DESC , DAY( `date` ) DESC , time DESC';
		$result = mysql_query($sql) or die ("Unknown SQL Error.".mysql_error());
		if(mysql_num_rows($result))
			while($row = mysql_fetch_assoc($result))
				$rows[sizeof($rows)]=$row;
		return $rows;
	}
leider erhalte ich einen parse error bem SQL String: $sql = 'SELECT *, date_format(date,'%d.%m.%y') as date from


Dazu möchte ich auch den Aktuellen Monat als Text im Hauptform anzeigen lassen!
Code:
echo'<table width="100%">';
echo'<tr>';
echo'<th scope="col">'.$rows['Datum'].'</th>';
echo'</tr>';
echo'</table>';
Was habe ich hier Falsch?

Bedanke mich für jede Hilfe von Euch!

Gruss Grazioli
 
Hi,
ist bei dir in der Tabelle ein Feld "date" vorhanden?
Weil die Funktion "date_format( )" verlangt als erstes Argument ein Datum in diesem Format: "YYYY-MM-DD".

Außerdem wenn du nur den aktuellen Monat haben willst reicht es doch vollkommen wenn du guckst ob das Jahr gleich ist und der Monat gleich ist, der Tag ist dabei doch egal.

Und bei deiner Variable "$sql" bin ich mir nicht sicher ob php da "weiss" wo der String beginnt und wo er endet. Würde den String mit Gänsefüschen (" ") eingrenzen, dann kannste für die Funktionsargumente auf jedenfall die Hochkommata (' ') verwenden, ohne das php da durcheinander kommt.

Sag am Besten mal welche Felder in der Tabelle vorhanden sind, dann kann ich bei dem SQL-Befehl auch etwas besser helfen.

mfg.Fide
 
Hi,

PHP:
$sql = 'SELECT *, date_format(date,'%d.%m.%y') as Datum

hier ist auch das , hinter dem * zuviel.

nö. Wenn er zusätzlich zu allen Feldern noch weitere selbstformatierte oder -errechnete Spalten ausgeben will, muss er die auch jeweils durch ein Komma abtrennen. Das Problem ist hier erstmal nicht die MySQL-, sondern die PHP-Syntax.

@grazioli: Verwende einen Editor mit Syntaxhighlighting, dann siehst Du den Fehler (übrigens auch, wenn du den Code hier in die dafür eigens vorgesehenen Tags packst):

PHP:
$sql = 'SELECT *, date_format(date,'%d.%m.%y') as Datum 
		from Spieledatum WHERE date >= '$Datum' 
		ORDER BY YEAR( `date` ) DESC , MONTH( `date` ) DESC , DAY( `date` ) DESC , time DESC';

LG
 
Hallo,

Dies habe ich geändert, und so erhalte ich keinen Fehler, in:
PHP:
	function GetMaster($config)
	{
		$rows=array();
		mysql_connect($config->host, $config->user, $config->password) or die('Database Server-Connection Failed');
		mysql_select_db($config->db) or die('Database Connection Failed');
$sql = 'SELECT *, date_format(date,"%d.%m.%y") as date 
		from Spieledatum WHERE date >= '$Datum' 
		ORDER BY YEAR( `date` ) DESC , MONTH( `date` ) DESC , DAY( `date` ) DESC , time DESC';
$result = mysql_query($sql) or die ("Unknown SQL Error.".mysql_error());
		if(mysql_num_rows($result))
			while($row = mysql_fetch_assoc($result))
				$rows[sizeof($rows)]=$row;
		return $rows;
	}

Zum Prüfen, ob der Aktuellen Monat als Text im Hauptform angezeigt wird, habe ich dies so:
PHP:
	echo'<div id="frontend">';
//-----------------------------------------------------
 
	echo'<table width="100%">';
	echo'<tr>';
	echo'<th scope="col">Spielemonat '.MonthDate.'</th>';
	echo'</tr>';
	echo'</table>';
	
if(sizeof(GetMaster($config))==0)
	
	echo '<div class="box1">'.Txt_No.'</div>';
		
else
{
Dies ist aber vor der eingefügten Funktion "GetMaster". Wie kann ich dies trotzdem über die gleiche Funktion steuern? :confused:

Leider wird der aktuelle Monat darum nicht angezeigt, auch nicht die Spieledaten des aktuellen Monats!

Das Datum wird in der DB so gespeichert: 2008-01-20

Danke und Gruss
Grazioli
 
Hi,

wo die Funktion definiert ist, spielt keine Rolle. Das Problem sind Fehler in der Funktion.

Dies habe ich geändert, und so erhalte ich keinen Fehler, in:
PHP:
	function GetMaster($config)
	{
		$rows=array();
		mysql_connect($config->host, $config->user, $config->password) or die('Database Server-Connection Failed');
		mysql_select_db($config->db) or die('Database Connection Failed');
$sql = 'SELECT *, date_format(date,"%d.%m.%y") as date 
		from Spieledatum WHERE date >= '$Datum' 
		ORDER BY YEAR( `date` ) DESC , MONTH( `date` ) DESC , DAY( `date` ) DESC , time DESC';
$result = mysql_query($sql) or die ("Unknown SQL Error.".mysql_error());
		if(mysql_num_rows($result))
			while($row = mysql_fetch_assoc($result))
				$rows[sizeof($rows)]=$row;
		return $rows;
	}

das kann dann aber nicht der Code sein, der tatsächlich bei Dir läuft? Der String $sql ist nämlich immer noch genau vor $Datum zu Ende, wie man am Highlighting auch schön erkennen kann. Das dürfte einen unexpected T_VARIABLE Parse Error werfen.
Dann ist $Datum in dieser Funktion auch plötzlich gar nicht mehr definiert. Ist aber eh egal, da Variablen in einfachen Anführungszeichen sowieso nicht ersetzt werden.

Das müsste dann so aussehen:

PHP:
$str = 'blabla' . $variable . 'blubb';

Als erstes solltest Du aber mal eine Abfrage entwerfen (und z.B. in phpMyAdmin testen), die auch das gewünschte liefert. Du wandelst das Datum in der DB in einen String um und vergleichst das dann mit einem String. Du möchtest doch aber sicher das Datum in der DB mit einem (dem heutigen?) Datum vergleichen. Lass also das Datum in der Spalte "date", wie es ist und wandele $Datum mit Hilfe von STR_TO_DATE in ein MySQL-Datum um.

LG
 
Hi,

ich habe mal die ganzen zwei Dateien angehängt, damit Ihr mal dies begutachten könnt!

ich hatte Dir eine Antwort geschrieben, die Du begutachten könntest...
Erstens solltest Du mal die Variable $sql ausgeben lassen, dort steht nämlich nicht das drin, was Du erwartest. In einfachen Hochkommata werden keine Variablen ersetzt. Außerdem ist die Variable, die Du da einzusetzen versuchst, in der Funktion gar nicht definiert.
Und zu guter Letzt würde die Abfrage wohl sowieso nicht das liefern, was Du haben möchtest (s. meinen letzten Post).

LG
 
Hallo,

nach über 2 Stunden durch das Netzt lesen, fand ich eine lösung, die auch im phpMyAdmin funtioniert!

Der String habe ich jetzt so geändert:
PHP:
SELECT * , date_format( date, "%d.%m.%Y" ) AS date
FROM Spieledatum 
WHERE Month( `date` ) = Month( Now( ) )
ORDER BY YEAR( `date` ) DESC , MONTH( `date` ) DESC , DAY( `date` ) DESC , time DESC
Dann erhalte ich den DS mit diesem Datum: 2009-04-17! Dies ist der einzige in meiner DB mit dem aktuellen Monat!:p

Jetzt zur Anzeige: Es werden mir immer noch alle Spieledatums im Jahr angezeigt. Das könnte mit der Funktion "GetAllMonthFrom" , "GetByMonth", "GetByYear", und "GetByYear" zusammen hängen!

PHP:
    </th>
  </tr>
   <?php
    $years = GetAllYearsFrom($config);
    $year = $years[0]['year'];
    $missions = GetByYear($year,$config);
    if(isset($_GET['year']))
        $year = $_GET['year'];
    $missions = GetByYear($year,$config);
    
    $months = GetAllMonthFrom($config);
    $month = $months[0]['month'];
    $mission = GetByMonth($month,$config);
    if(isset($_GET['month']))
        $month = $_GET['month'];
    $mission = GetByMonth($month,$config);
    

    foreach ($missions as $mission)
    {
        
        $category = GetCategoryById($mission['category'],$config);
        
        echo '<tr>';
        echo '    <td>';
        if(isset($category['color'])&&($category['color']!="")) 
        
        // &nbsp;&nbsp; in der nächsten Zeile nach /span> eingefügt! 
            echo '<span style="background:#'.$category['color'].';">&nbsp;&nbsp;</span>&nbsp;&nbsp;';
        //----------------------------------------------------------
        else
            echo '<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>';
            echo $category['name'];
        echo '    </td>';
        echo '    <td>';
            echo $mission['gamename'];
        echo '    </td>';
        echo '    <td>';
        //Frontend Datum von $mission['date'] auf SetDateForLanguage($mission['date']) geändert!!
            echo  SetDateForLanguage($mission['date']) .' '.ToShortTime($mission['time']);
        //------------------------------------------------------------------------------------------------
        echo '    </td >';
        echo '    <td>';
            echo $mission['shortdescription'];
        echo '    </td>';

        echo '</tr>';
    }
    echo '</table>';
            
}
?>


Ich habe alle Select-Anweisungen geprüft, und erhalte bei jedem ein Resultat!
PHP:
	function GetByYear($year,$config)
	{
		$rows=array();
		mysql_connect($config->host, $config->user, $config->password) or die('Database Server-Connection Failed');
		mysql_select_db($config->db) or die('Database Connection Failed');
		$sql = 'SELECT *, date_format(date,"%d.%m.%Y") 
				as date
				from Spieledatum   
				WHERE YEAR(`date`)=YEAR(Now()) 
				ORDER BY YEAR( `date` ) DESC , MONTH( `date` ) DESC , DAY( `date` ) DESC , time DESC';
		$result = mysql_query($sql) or die ("Unknown SQL Error.".mysql_error());
		if(mysql_num_rows($result))
			while($row = mysql_fetch_assoc($result))
				$rows[sizeof($rows)]=$row;
		return $rows;
	}

	function GetAllYearsFrom($config)
	{
		$rows=array();
		mysql_connect($config->host, $config->user, $config->password) or die('Database Server-Connection Failed');
		mysql_select_db($config->db) or die('Database Connection Failed');
		$sql = 'SELECT YEAR(date) AS year 
				from Spieledatum   
				GROUP BY YEAR(date) 
				ORDER BY YEAR( `date` ) DESC , MONTH( `date` ) DESC , DAY( `date` ) DESC , time DESC';
		$result = mysql_query($sql) or die ("Unknown SQL Error.".mysql_error());
		if(mysql_num_rows($result))
			while($row = mysql_fetch_assoc($result))
				$rows[sizeof($rows)]=$row;
		return $rows;
					
	}

	function GetByMonth($month,$config)
	{
		$rows=array();
		mysql_connect($config->host, $config->user, $config->password) or die('Database Server-Connection Failed');
		mysql_select_db($config->db) or die('Database Connection Failed');
		$sql = 'SELECT *, date_format(date,"%d.%m.%Y") 
				as date  
				from Spieledatum    
				WHERE Month(`date`)=Month(Now())
				ORDER BY YEAR( `date` ) DESC , MONTH( `date` ) DESC , DAY( `date` ) DESC , time DESC';
		$result = mysql_query($sql) or die ("Unknown SQL Error.".mysql_error());
		if(mysql_num_rows($result))
			while($row = mysql_fetch_assoc($result))
				$rows[sizeof($rows)]=$row;
		return $rows;
	}
	
	function GetAllMonthFrom($config)
	{
		$rows=array();
		mysql_connect($config->host, $config->user, $config->password) or die('Database Server-Connection Failed');
		mysql_select_db($config->db) or die('Database Connection Failed');
		$sql = 'SELECT month(date) AS month 
				from Spieledatum   
				GROUP BY MONTH(date) 
				ORDER BY YEAR( `date` ) DESC , MONTH( `date` ) DESC , DAY( `date` ) DESC , time DESC';
		$result = mysql_query($sql) or die ("Unknown SQL Error.".mysql_error());
		if(mysql_num_rows($result))
			while($row = mysql_fetch_assoc($result))
				$rows[sizeof($rows)]=$row;
		return $rows;
					
	}

PS: Ich bedanke mich bei kuddeldaddeldu für seine Ausdauer, die er mit mir hat! ^^

Gruss Grazioli
 
Hi,

ehrlich gesagt, weiss ich bei Deinem Code gar nicht, wo ich anfangen soll.
1. Wozu machst Du diese vielen unnötigen DB-Abfragen? Du kannst doch die Daten zu einem bestimmten Monat und einem bestimmten Jahr in einer einzigen Abfrage abholen (man kann in SQL auch mehrere Bedingungen verknüpfen).
2. Dann liest Du auch noch innerhalb der Schleife über $missions für jeden Datensatz die zugehörige Kategorie einzeln aus. So etwas macht man mit einem JOIN.
3. In jeder dieser Funktionen baust Du eine neue Datenbankverbindung auf. Wozu? Stelle eine Verbindung am Anfang des Scriptes her und übergebe den Link an die Funktionen.
4. Teilweise benutzt Du die Funktionen, die alle gefundenen Datensätze in ein Array packen, obwohl Du nur den ersten gefundenen brauchst. Dafür gibt es die LIMIT-Klausel. Selbst, wenn Du alle brauchst, wozu erst in ein Array packen, das Du dann ja auch nochmal durchlaufen musst.

Das alles ist nicht nur unübersichtlich, das sind vor allem Performancekiller.

Versuch es mal eher in diese Richtung:

PHP:
$db_conn = mysql_connect(...);
// Monat und Jahr aus aktuellem Datum vorbelegen
$month = date("m");
$year = date("Y");
// Monat und/oder Jahr durch GET-Parameter überschreiben, falls gesetzt
if(isset($_GET['month'])) {
   $month = $_GET['month'];
}
if(isset($_GET['year'])) {
   $month = $_GET['year'];
}

$sql = 'SELECT * FROM spieletabelle
   INNER JOIN kategorientabelle
      ON spieletabelle.category = kategorientabelle.id
   WHERE MONTH(spieletabelle.datumsfeld) = ' . intval($month)
   . ' AND YEAR(spieletabelle.datumsfeld) = ' . intval($year)
   . ' ORDER BY was-auch-immer';
$result = mysql_query($sql, $db_link) or die(...);
while($mission = mysql_fetch_assoc($result)) {
   // Deine Ausgaben
}

LG
 
Zurück