PHP Abfrage MySQL DB mit While

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
557
[fixed] Abfrage MySQL DB mit For

hallo,

ich habe ein problem mit meiner funktion zur abfrage meiner einträge in der db.

was soll sie machen:
der wert monat wird übergeben, nach abfrage wieviele tage der monat hat, soll die schleife für jeden einzelnen tag die werte aus der db holen und den wert return.

was nicht funktioniert: $row['content_value'] ist NULL, obwohl in der DB einträge vorhanden sind.

PHP:
    public function get_values_from_db($month) {
	    $days = $this->get_days($month);
	    for($x=1; $x<=$days; $x++) {
		    if($x<10){
			    $x="0$x";
		    }
		    $enter_date = "2012-".$month."-".$x;

		    $db_result = $this->database->runSQLQuery("SELECT * FROM ".GLOBAL_VALUES_DB." WHERE `user_id` = '".$_SESSION['id']."' AND `enter_date` = '".$enter_date."' ");
		    if(!$db_result == "") {
		        $row = mysql_fetch_array($db_result, MYSQL_ASSOC);
			    var_dump($enter_date,$row['content_value']);
				if(!$row['content_value'] == "") {
					$db_result_account = $this->database->runSQLQuery("SELECT * FROM ".GLOBAL_ACCOUNT_DB." WHERE `user_id` = '".$_SESSION['id']."' ");
					$row_account = mysql_fetch_array($db_result_account, MYSQL_ASSOC);
					$db_result_category = $this->database->runSQLQuery("SELECT * FROM ".GLOBAL_CATEGORY_DB." WHERE `user_id` = '".$_SESSION['id']."' AND `id` = '".$row['category_id']."' ");
					$row_category = mysql_fetch_array($db_result_category, MYSQL_ASSOC);

					if($this->ungerade($row['content_value'])) {
						$row['content_value'] = "<font color='red'>".$row['content_value']."</font>";
					} else {
						$row['content_value'] = "<font color='green'>".$row['content_value']."</font>";
					}
					$content_value[] = array('id' => $row['id'], 'Wert' => str_replace(".",",",$row['content_value'])." &euro;<br />", 'account' => $row_account['account_table'],'category' => $row_category['category_name']);
					return $content_value;
				}
		    }
		}
    }

jemand eine idee warum?
 
Zuletzt bearbeitet:
Bist du dir sicher, dass bei $enter_date etwas mit dem String "2012-12-1$x" gefunden wird?
 
var_dump sieht eigentlich gut aus:
Code:
string(10) "2012-04-13" NULL

für 2012-04-13 gibt es aber einen eintrag:
Code:
126 	1 	1 	1 	666.03 	2012-04-13 06:11:57
Ergänzung ()

problem gerade gelöst mittels:
AND `enter_date` LIKE '".$enter_date."%'

und das return neu plaziert.

trotzdem danke!
 
ich bin nicht sicher, aber evtl macht die stringkonvertierung der zählvariable probleme.


Probier mal lieber

$enter_date = "2012-".$month."-".str_pad($x, 2, "0", STR_PAD_LEFT);

Das passt dann für alle Fälle und du kannst die If-Abfrage am Anfang rausnehmen. Auch wenns nicht bei deinem Problem helfen sollte, ist das Ganze doch einfacher so.
 
Wie von redeye86 bereits geschrieben, würde auch ich der übersichtlichkeit mit str_pad arbeiten beim Datum.

Du verwendest MySQL? Man könnte auch folgendes verwenden:
PHP:
 select * from x where date_format(date, '%Y-%c-%e') = '2012-4-13'

anderer Punkt, kennst du SQL Joins?
Folgendes müsste eingentlich dein Ergebnis in einem Query liefern? Habs nur schnell blind umgeschrieben, daher keine Garantie auf Richtigkeit.
PHP:
SELECT 
	v.content_value,
	v.id,
	a.account_table,
	c.category_name
FROM 
	GLOBAL_VALUES_DB v 
inner join
	GLOBAL_ACCOUNT_DB a
	on	a.user_id = v.user_id
inner join
	GLOBAL_CATEGORY_DB c
	on	c.user_id = v.user_id
		and c.id = v.category_id
WHERE 
	v.`user_id` = '".$_SESSION['id']."' 
	AND `v.enter_date` = '".$enter_date."'
	and v.content_value != ""

Und noch der Klassiker: SQL-Injection Session Variablen ungeprüft gegen die Datenbank zu schmeißen ist und bleibt Riskant.
 
hm, der wert von $_SESSION['id'] ist ein int, muss trotzdem mysql_real_escape_string($_SESSION['id']) genutzt werden?

das mit SQL joins schon mal gehört, aber noch nie verwendet. werde ich mich mal einlesen. danke!
 
Wenn du sicherstellst, dass in $_SESSION['id'] immer ein int drinsteht, dann nicht.
 
Zurück
Oben