SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 04.02.2009, 15:50:47
tsunamitsunami tsunamitsunami ist offline
Junior Member
 
Registriert seit: Dec 2005
Alter: 51
Beiträge: 236
Brett vorm Kopf - Brauche einen 2. Blick

Hallo zusammen,

ich habe folgenden Codeschnipsel:

PHP-Code:
 $sql_startmonat "select max(datum) as maxdatum from tabellex";
  
//echo "sql".$sql_startmonat;
$ms_startmonat mysql_query($sql_startmonat);
$array_monat mysql_fetch_assoc($ms_startmonat);
$mysqldatum $array_monat['maxdatum']; 
//echo "<br>Was steht drin: ".$mysqldatum;

$MVParam_tourdaten_monat date("M",$mysqldatum);
//echo "<br>Monat: ".$MVParam_tourdaten_monat;

//echo "<br>Was steht drin2: ".$mysqldatum;

$MVParam_tourdaten substr($mysqldatum,0,4); 
Normaler weise würde ich das Jahr auch mit :
PHP-Code:
$MVParam_tourdaten_monat date("M",$mysqldatum); 
holen. Komischerweise bekomme ich da immer 1970 als Ausgabe...

Also einfach den string abgeschnitten.

Nun bekomme ich aber !!!sporadisch!!! einen sql Fehler. Die Abfrage in Zeile 35 sei nicht gültig.=>
Zeile 35 ist

PHP-Code:
select max(datum) as maxdatum from tabellex 
Mal gehts, mal nicht. Dieselbe Seite reloaded. Beim 3. oder 4. oder 2. Mal bekomme ich einen Error. Dann gehts wieder ein paar Mal, dann nicht. Es müssen nicht 3 od. 4 reloads sein. Es können auch 10 oder 20 sein.

Wie kann das sein? Im phpmyadmin die Abfrage reinkopiert. => Keine Probleme.

*verzweifel*

Gruß
tsunamitsunami
Mit Zitat antworten
  #2  
Alt 04.02.2009, 16:25:13
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: Brett vorm Kopf - Brauche einen 2. Blick

Zu deinem sporadischen SQL-Fehler:
Andere Funktionen erwarten vollständige Daten und geben NULL zurück, wenn unvollständige Daten übergeben werden. Hierzu gehören Funktionen, die Datumsberechnungen durchführen oder Teile von Datumsangaben Namen zuordnen

Ich vermute einmal, daß "date" ein vollständiges Datumsformat erwartet. Also YYYY-MM-DD mindestens. Sollte ein Datum nicht vollständig sein, weil zum Beispiel der Tag fehlt, wäre dies der Fehler.
Schau mal in die Tabelle ob es solche Datumsangaben dort gibt. Wie Mysql auf ein falsches Datum (2009-02-31) reagiert weiß ich nicht.

Bei deiner Anzeige 1970 liegt es am verwendeten Wert für Date.
Mit
PHP-Code:
$MVParam_tourdaten_monat date("M",$mysqldatum); 
holst du ja nur den Monat. Ich denke mal es war ein Schreibfehler hier im Forum und du meintest "Y" um das Jahr zu holen.
Da in Mysql das Datum YYYY-MM-DD ist vermute ich, daß du für date() den timestamp falsch übermittelst. In solchen Fällen bringt date() oft 1970 (Anfang der Unixzeitrechnung).
Ist mir auch schon mal passiert als ich ein Datum generell ausgeben lassen hatte ohne zuvor den Wert auf NULL zu prüfen.
date("d.m.Y",'') bringt das erste Datum der Unixzeitrechnung. GEnauen Tag und Monat hab ich nicht im Kopf und bin zu faul zu suchen. Würde man nur "Y" ausgeben lassen wäre es jedenfalls 1970. :)

Ich hoffe es hilft etwas bei der Fehleranalyse
Mit Zitat antworten
  #3  
Alt 04.02.2009, 16:29:50
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: Brett vorm Kopf - Brauche einen 2. Blick

Diese Aussage bitte nur bedingt trauen. Bin mir selbst nicht ganz sicher.
Zitat:
Mal gehts, mal nicht. Dieselbe Seite reloaded. Beim 3. oder 4. oder 2. Mal bekomme ich einen Error. Dann gehts wieder ein paar Mal, dann nicht. Es müssen nicht 3 od. 4 reloads sein. Es können auch 10 oder 20 sein.
Ich denke mal, daß mysql nicht im safemode läuft. Soweit ich es richtig wieder gebe, was ich gelesen habe, liegt es genau daran, daß es erst nach 3-4 Durchläufen zu einem Error kommt.
Die ersten Durchläufe sollten allerdings eine Warnung bringen.

Geändert von urvater (04.02.2009 um 16:30:38 Uhr) Grund: für war zu viel und Schreibfehler
Mit Zitat antworten
  #4  
Alt 04.02.2009, 17:16:31
tsunamitsunami tsunamitsunami ist offline
Junior Member
 
Registriert seit: Dec 2005
Alter: 51
Beiträge: 236
AW: Brett vorm Kopf - Brauche einen 2. Blick

Hi,

danke für die superschnelle Antwort. Mist, da habe ich mich verkehrt ausgedrückt. Es kommt natürlich eine warnung:

Zitat:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in... Zeile 35

Der Fehler kommt manchmal auch schon beim 1.Mal. Die Zeile
PHP-Code:
//echo "<br>Was steht drin: ".$mysqldatum; 
bringt genau das was es soll. Natürlich ohne //!

Nämlich zum Beispiel:
Zitat:
Was steht drin: 2009-01-29
Das komische ist, dass in der sql-Query keinerlei Abhängigkeiten sind, Einfach das maximale Datum aus der Spalte Datum in Tabelle x holen, also den letzten Eintrag als Startwert. Daraus möchte ich halt den Monat und das Jahr haben für eine 2. Abfrage.

Der Fehler kommt aber nicht in der 2. Abfrage, sondern bei der ersten...

Gruß tsunamitsunami

Geändert von tsunamitsunami (04.02.2009 um 17:17:34 Uhr)
Mit Zitat antworten
  #5  
Alt 04.02.2009, 17:26:58
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Brett vorm Kopf - Brauche einen 2. Blick

Die PHP-Funktion date() lässt sich nur auf UNIX-Zeitstempel anwenden. Dein Datum liegt aber im MySQL-Date-Format vor. Du kannst aber das Datum mit strtotime() konvertieren oder bereits vorher in der Abfrage YEAR() auf den Rückgabewert von MAX() anwenden.
Mit Zitat antworten
  #6  
Alt 04.02.2009, 17:46:20
tsunamitsunami tsunamitsunami ist offline
Junior Member
 
Registriert seit: Dec 2005
Alter: 51
Beiträge: 236
AW: Brett vorm Kopf - Brauche einen 2. Blick

Hi,

das geht ja fix hier. ;) .

Klingt logisch. Das wirds gewesen sein... Probiers aus.

Nur zur Info. Wieso klappte das mit 1-20 Aufrufen und dann wieder nicht. *wunder*...

--------

Zitat:
Du kannst aber das Datum mit strtotime() konvertieren oder bereits vorher in der Abfrage YEAR() auf den Rückgabewert von MAX() anwenden.
So hatte ich es vorher gelöst (?). Allerdings kam mysql dann ins schleudern (oder ich) bei der extration von Monat und Jahr.

Ich benötige die Werte Monat und Jahr des letzten Eintrags als Startwerte. Wenn ich so einfach nach dem Max Monat frage, hatte ich das Problem, dass ich zB als max. Monat immer 12 bekommen habe (2008 existieren Werte bis Dezember). Der neueste Eintrag ist aber vom 12.01.2009. Somit bekomme ich beim MaxMonat =12 und max Jahr = 2009 natürlich eine leere Ausgabe.
Daher brauche ich als MaxMonat die 1 und als Maxjahr die 2009. Deshalb der versuch mit date. Komischerweise klappte es mit date("M",$mysqldatum) immer ohne Probleme.

Selbst dreamweaver spuckt mir als "Quellcode" zB
PHP-Code:
$Datum date("d.m.Y"); 
raus. Daher war ich von ausgegangen, dass es geht.


Ich teste es mit stritotime.

Gruß
tsunamitsunami
Mit Zitat antworten
  #7  
Alt 04.02.2009, 17:54:06
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: Brett vorm Kopf - Brauche einen 2. Blick

Bei der Suche nach max(Monat) in der DB muß ja 12 rauskommen, da dies der höchste Monat ist. Du müsstest hier dir den Monat holen "wehre date = max(date)". Beim Jahr ist es ja nicht tragisch, da ja auch der Januar ein höcheres Jahr hat als der Dezember von den vorhergehenden Jahren.
Mit Zitat antworten
  #8  
Alt 04.02.2009, 18:02:15
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: Brett vorm Kopf - Brauche einen 2. Blick

PHP-Code:
$sql "select date_format(date,'%m.%Y')) from tabelle where date = max(date)"
Sollte dir auch den Monat und das Jahr (hier Punkt getrennt) liefern.
Mit Zitat antworten
  #9  
Alt 04.02.2009, 18:15:06
tsunamitsunami tsunamitsunami ist offline
Junior Member
 
Registriert seit: Dec 2005
Alter: 51
Beiträge: 236
AW: Brett vorm Kopf - Brauche einen 2. Blick

Zitat:
$sql = "select date_format(date,'%m.%Y')) from tabelle where date = max(date)";
ist glaube ich der beste Ansatz. Im folgenden kann man via 2 select-Feldern filtern. Also Jan und 2008 oder Oct und 2007.
Anschliessend mit where date_format(date,'%m')=01 and date_format(date,'%Y')=2008...

Ich probiers morgen direkt aus. Danke für eure Hilfe. Nun sehe ich nur noch errors... ;o)

Komisch ist aber doch, dass es mal geht und mal nicht...

Gruß
tsunamitsunami

EDV = Ende der Vernunft

Geändert von tsunamitsunami (04.02.2009 um 18:15:42 Uhr)
Mit Zitat antworten
  #10  
Alt 04.02.2009, 19:38:09
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: Brett vorm Kopf - Brauche einen 2. Blick

Zitat:
Zitat von tsunamitsunami Beitrag anzeigen
Komisch ist aber doch, dass es mal geht und mal nicht...

Gruß
tsunamitsunami

EDV = Ende der Vernunft
Jup, wundert mich eigentlich auch. An deinem ursprünglichen Select kann ich keinen Fehler ansich erkennen. Somit ist mir deine Warnung unerklärlich, wenn nicht eine Bedingung vor dem Select dieses Verursacht.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage - Brett vorm Kopf? Minotaurus007 MySQLi/PDO/(MySQL) 1 15.08.2008 16:38:28
Mysql-Abfrage (Brett vorm Kopf?) brooklyn MySQLi/PDO/(MySQL) 8 09.10.2006 22:22:59
brett vorm Kopf bei mehrdimensionalen array - oder doch was andres? nites PHP Grundlagen 0 28.08.2006 15:28:06
Brett Vor'm Kopf ;-) Stoevi PHP Grundlagen 1 12.09.2002 19:01:55


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:37:18 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt