jarimori: PHP/MYSQL: Syntax-Fehler

Hallo!

Kann mir bitte jemand sagen, warum diese Syntax einen SQL-Fehler liefert?

Es geht um Daten einen Export nach Excel ... im Speziellen um die letzte Bedingung "AND SCHULE=".$schul_id."

Die Formatierung für date funktioniert! Warum nicht, wenn ich eine Variable verwende??

$sql_query = "select KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail from $table WHERE AKTIV='1' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE=".$schul_id."";

Danke
jarimori

  1. Es geht um Daten einen Export nach Excel ... im Speziellen um die letzte Bedingung "AND SCHULE=".$schul_id."

    $schul_id ist _sicher_ mit einem Wert gefüllt _und_ eine Zahl?

    Gruß, Samoht

    --
    fl:| br:> va:) ls:< n4:( ss:) de:] js:| mo:}
    1. $schul_id ist _sicher_ mit einem Wert gefüllt _und_ eine Zahl?

      $schul_id ist nur eine Zahl und wenn ich in der Abfarge "... AND SCHULE='305200'" verwende, funktioniert's!!!

  2. Hallo

    Es geht um Daten einen Export nach Excel ... im Speziellen um die letzte Bedingung "AND SCHULE=".$schul_id."

    sehr wahrscheinlich nicht.

    Die Formatierung für date funktioniert! Warum nicht, wenn ich eine Variable verwende??

    Datumsangaben müssen in MySQL in Anführungszeichen eingeschlossen werden. Wo sind diese?

    $sql_query = "select KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail from $table WHERE AKTIV='1' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE=".$schul_id."";

    Wie sieht die resultierende Zeichenkette aus. PHP-Code ist für SQL-Fehlermeldungen (welche überhaupt) im Normalfall völlig uninteressant.

    Freundliche Grüße

    Vinzenz

    1. Datumsangaben müssen in MySQL in Anführungszeichen eingeschlossen werden. Wo sind diese?

      Datum funktioniert ja!

      $sql_query = "select KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail from $table WHERE AKTIV='1' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE=".$schul_id."";

      Wie sieht die resultierende Zeichenkette aus. PHP-Code ist für SQL-Fehlermeldungen (welche überhaupt) im Normalfall völlig uninteressant.

      Fehlermeldung im Excel:

      Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource in ...
      Warning:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...

      Wenn ich statt $schul_id den Wert einer Schulnummer einsetze, funktioniert's ja einwandfrei! Aber sobald ich eine Variable einbaue, funktioniert's nicht!!

      Komisch ist, dass bei allen anderen Abfragen diese Formatierung funktioniert --> nur beim Excel-Export nicht!

      1. Hallo,

        Datumsangaben müssen in MySQL in Anführungszeichen eingeschlossen werden. Wo sind diese?
        Datum funktioniert ja!

        das, hmm, bezweifle ich.

        $sql_query = "select KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail from $table WHERE AKTIV='1' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE=".$schul_id."";

        Wie sieht die resultierende Zeichenkette aus. PHP-Code ist für SQL-Fehlermeldungen (welche überhaupt) im Normalfall völlig uninteressant.
        Fehlermeldung im Excel:

        Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource in ...
        Warning:  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...

        Seit wann kann Excel PHP? Das sind PHP-Fehlermeldungen. Mich interessiert die SQL-Fehlermeldung. mysql_error() sollte Dir weiterhelfen. Der Rest sind Folgefehler.

        Wie, bitte, lautet das generierte SQL-Statement?
        Wie, bitte, lautet die SQL-Fehlermeldung, die MySQL freundlicherweise an PHP übermittelt?

        Freundliche Grüße

        Vinzenz

        1. Hallo

          Datumsangaben müssen in MySQL in Anführungszeichen eingeschlossen werden. Wo sind diese?
          Datum funktioniert ja!

          das, hmm, bezweifle ich.

          $sql_query = "select KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail from $table WHERE AKTIV='1' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE=".$schul_id."";

          Noch ein paar Hinweise:
          Es ist üblich, SQL-Anweisungen in Großbuchstaben zu schreiben und in Spaltennamen Großbuchstaben zu vermeiden.

            
          $sql_query =  
          "[code lang=sql]SELECT  
              KZ,  
              NAME,  
              VORNAME,  
              GESCHL,  
              JG,  
              SPRINT,  
              MITTEL,  
              k_vname,  
              k_name,  
              k_tel  
              k_mail  
          FROM  
              $table  
          WHERE  
              AKTIV = '1'  
          AND  
              LETZTE_MELDUNG = '" . date(Y) . "'  
              -- Dein _Datum_ ist also nur ein Jahr, netterweise eine Zahl ...  
              -- irritiere doch bitte nicht potentielle Helfer!  
          AND  
              SCHULE = '" . $schul_id . "'
          ~~~";[/code]  
            
          Dennoch ist es bei allen Datenbankmanagementsystemen, die das Einschließen von Zahlen in einfache Anführungszeichen erlauben, eine gute Idee diese zu verwenden.  
            
          
          > > > Wie sieht die resultierende Zeichenkette aus. PHP-Code ist für SQL-Fehlermeldungen (welche überhaupt) im Normalfall völlig uninteressant.  
          > > Fehlermeldung im Excel:  
            
          Und nochmal:  
            
          Wie, bitte, lautet das generierte SQL-Statement?  
          Wie, bitte, lautet die SQL-Fehlermeldung, die MySQL freundlicherweise an PHP übermittelt?  
            
          Vermutlich steht in $schul\_id nicht das drin, was Du erwartest.  
            
            
          Freundliche Grüße  
            
          Vinzenz
          
          1. es geht darum, dass ein PHP-Script aus einer MYSQL-Datenbank das Abfrageergebnis in ein Excel-File zu schreiben! Das funktioniert ja auch, jedoch nicht mit der besagten Formatierung mit $schul_id!

            Wie, bitte, lautet das generierte SQL-Statement?

            Wie, bitte, lautet die SQL-Fehlermeldung, die MySQL freundlicherweise an PHP übermittelt?

            Es gibt keine Fehlermeldung, sondern nur das erwähnt Warning, das mir gleich ins Excel geschrieben wird!

            Vermutlich steht in $schul_id nicht das drin, was Du erwartest.

            doch, hab's ausgeben lassen!

            Es muss an den Doppelkommas, Einfachhochkommas und Punkten bei der Erstellung des Abfragestrings liegen! Nur weiß ich nicht, wo der Fehler sein kann!

            1. Hallo,

              Wie, bitte, lautet das generierte SQL-Statement?

              Wie lautet das generierte SQL-Statement?

              Könntest Du bitte *endlich* diese äußerst wichtige Frage beantworten?
              Derzeit habe ich keine wichtigere Frage.

              PHP interessiert mich nicht im Geringsten, außer was mysql_error() zu berichten hat.

              Freundliche Grüße

              Vinzenz

              1. Wie lautet das generierte SQL-Statement?

                Kann ich leider nicht, weil ich nicht weiß, was du da genau haben willst! Ich kann dir nur die beiden Warnings zeigen, die ich schon einem Posting von vorher erwähnt habe!

                1. Hallo

                  Wie lautet das generierte SQL-Statement?
                  Kann ich leider nicht, weil ich nicht weiß, was du da genau haben willst!

                  Du hast doch:

                  $sql_query = "select KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail from $table WHERE AKTIV='1' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE=".$schul_id."";

                  Wo ist das Problem, anschließend ein

                  echo $sql_query;

                  als Debugausgabe einzufügen. Weiterhin wären Deine nächsten zwei, drei Codezeilen von Interesse.

                  Freundliche Grüße

                  Vinzenz

                  1. Du hast doch:

                    echo $sql_query;

                    Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource in excel_test.php on line 30

                    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in excel_test.php on line 47

                    die Fehler-Zeilen sind:

                    29:    $result = mysql_query($sql_query);
                    30:    $fields_cnt = mysql_num_fields($result);

                    47:    while ($row = mysql_fetch_array($result)){ ... }

                    genügt dir das?

                    Danke übrigens für deine Mühe!!!

                    1. Mahlzeit,

                      sag mal, schaffst Du es nicht, die von Vinzenz vorgekaute Zeile

                      echo $sql_query;

                      einfach mal in Deinen Code einzubauen? NUR SO kann man ENDLICH mal sehen, was überhaupt bei Deiner Datenbank ankommt ... bisher verschweigst Du das ja hartnäckig - weshalb Dir auch niemand helfen.

                      genügt dir das?

                      Mir zumindest nicht. Und ich denke, Vinzenz auch nicht.

                      MfG,
                      EKKi

                      --
                      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                      1. jetzt weiß ich was ihr meint!

                        OK, das ist die ausgabe von echo $sql_query:

                        select KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail from WHERE AKTIV='1' AND LETZTE_MELDUNG=2008 AND SCHULE='305026'

                        1. Hello,

                          select KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail from WHERE AKTIV='1' AND LETZTE_MELDUNG=2008 AND SCHULE='305026'

                          ^^^^^^
                          hmh, also irgendwie, da fehlt a bisserl was... Das Statement kann so nicht laufen.

                          MfG
                          Rouven

                          --
                          -------------------
                          sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                          There's no such thing as a free lunch  --  Milton Friedman
                          1. select KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail from WHERE AKTIV='1' AND LETZTE_MELDUNG=2008 AND SCHULE='305026'
                                                                                                                     ^^^^^^
                            hmh, also irgendwie, da fehlt a bisserl was... Das Statement kann so nicht laufen.

                            und was fehlt? Das Statement läuft aber ohne "SCHULE='3005026'" ohne Probleme!

                            1. "FROM WHERE" is nicht!

                              Du hast ein Problem mit $table... manchmal scheint die Variable einfach leer zu sein!

                              "FROM (hier muss der Tabellenname stehen) WHERE"

                              Gruß, Samoht

                              --
                              fl:| br:> va:) ls:< n4:( ss:) de:] js:| mo:}
                              "Computer games don't affect kids; I mean if Pac-Man affected us as kids, we'd all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."
                              (Kristian Wilson, Nintendo, 1989)
                              1. "FROM (hier muss der Tabellenname stehen) WHERE"

                                es klappt aber auch nicht, wenn ich ... FROM MELDUNG WHERE ... schreibe!

                                schon, aber auch nur, wenn alle Bedingungen ohne $variablen abgefragt werden

                                1. Hello,

                                  schon, aber auch nur, wenn alle Bedingungen ohne $variablen abgefragt werden

                                  dann gib bitte jetzt _nochmal_ dein aktuelles Statement hier an, vielleicht finden wir den nächsten Fehler. Hast du zufällig ein PHPMyAdmin oder eine entsprechende MySQL-Konsole? Lass das Statement dort selbst laufen, du wirst eine detailliertere Fehlermeldung bekommen.

                                  MfG
                                  Rouven

                                  --
                                  -------------------
                                  sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
                                  I will never understand why Germans feel the need to kill trees  --  Arbeitskollege aus UK zum Thema ob eine Dokumentation elektronisch oder auf Papier ausgeliefert wird
                                  1. dann gib bitte jetzt _nochmal_ dein aktuelles Statement hier an, vielleicht finden wir den nächsten Fehler. Hast du zufällig ein PHPMyAdmin oder eine entsprechende MySQL-Konsole? Lass das Statement dort selbst laufen, du wirst eine detailliertere Fehlermeldung bekommen.

                                    $sql_query = "SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND KZ = '".$meeting_id."' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE='" . $schul_id . "'";

                                    echo $sql_query:

                                    SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND KZ = '1' AND LETZTE_MELDUNG=2008 AND SCHULE='305026'

                                    1. Mahlzeit,

                                      $sql_query = "SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND KZ = '".$meeting_id."' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE='" . $schul_id . "'";

                                      echo $sql_query:

                                      SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND KZ = '1' AND LETZTE_MELDUNG=2008 AND SCHULE='305026'

                                      Hm, müsste eigentlich klappen.

                                      Wenn Du jetzt noch die von mysql_error() gelieferte konkrete MySQL-Fehlermeldung sowie eine Feldbeschreibung Deiner Tabelle (insbesonders würde mich der Typ der Spalte ´LETZTE_MELDUNG´ interessieren) lieferst, wird die Sache vielleicht etwas klarer ...

                                      MfG,
                                      EKKi

                                      --
                                      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                                      1. insbesonders würde mich der Typ der Spalte ´LETZTE_MELDUNG´ interessieren

                                        year(4)

                                        in phpMyAdmin kann ich die Abfrage nicht durchführen, da in meinem Script ja Variablen verwendet werden und die Abfrage mit Werten laufen zu lassen bringt ja nich viel, da dies ja auch im Script funktioniert

                                        1. Zitat EKKI: » Wenn Du jetzt noch die von mysql_error() gelieferte konkrete MySQL-Fehlermeldung [...] lieferst, wird die Sache vielleicht etwas klarer ...

                                          @jarimori:

                                          ... sagmal... _willst_ du dir eigentlich nicht helfen lassen?

                                          Gruß, Samoht

                                          --
                                          fl:| br:> va:) ls:< n4:( ss:) de:] js:| mo:}
                                          "Computer games don't affect kids; I mean if Pac-Man affected us as kids, we'd all be running around in darkened rooms, munching magic pills and listening to repetitive electronic music."
                                          (Kristian Wilson, Nintendo, 1989)
                                          1. ... sagmal... _willst_ du dir eigentlich nicht helfen lassen?

                                            Doch - natürlich!

                                            mysql_error() bringt keine Fehler!

                                            Die Ausgabe im Browser funktioniert auch mit Variable im SQL-Statement, nur die Darstellung im Excel nicht - aber dafür bin ich hier wahrscheinlich jetzt im falschen Forum, oder?

                                            Wie darf man in diesem Forum Quellcode darstellen? Einfach copy-paste?

                                            1. Hallo

                                              ... sagmal... _willst_ du dir eigentlich nicht helfen lassen?
                                              Doch - natürlich!
                                              mysql_error() bringt keine Fehler!

                                              wie sieht Dein relevanter Quellcode aus?

                                              Die Ausgabe im Browser funktioniert auch mit Variable im SQL-Statement, nur die Darstellung im Excel nicht - aber dafür bin ich hier wahrscheinlich jetzt im falschen Forum, oder?

                                              Wie darf man in diesem Forum Quellcode darstellen? Einfach copy-paste?

                                              Am besten eingepackt in (bei PHP-Code)

                                              [ code lang=php ] Anmerkung: Leerzeichen vor code und nach php weglassen :-)

                                              hier Dein Code, bitte mit Leerzeichen formatieren

                                              [ /code ]         Anmerkung: Leerzeichen wieder weglassen.

                                              Bitte poste nur relevanten Code, siehe auch Forumshilfe, Quelltext farbig darstellen. Und ja, es gibt hier einige, die sowohl von MySQL als auch PHP und sogar noch Excel Ahnung haben.

                                              Freundliche Grüße

                                              Vinzenz

                                              1. [ code lang=php ] Anmerkung: Leerzeichen vor code und nach php weglassen :-)

                                                hier Dein Code, bitte mit Leerzeichen formatieren

                                                [ /code ]         Anmerkung: Leerzeichen wieder weglassen.

                                                  
                                                  
                                                $csv_terminated = "\n";  
                                                $csv_separator = ",";  
                                                $csv_enclosed = '"';  
                                                $csv_escaped = "\\";  
                                                  
                                                $sql_query = "SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND KZ = '".$meeting_id."' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE='" . $schul_id . "' ORDER BY NAME";  
                                                  
                                                $result = mysql_query($sql_query);  
                                                $fields_cnt = mysql_num_fields($result);  
                                                  
                                                $schema_insert = '';  
                                                  
                                                for ($i = 0; $i < $fields_cnt; $i++) {  
                                                      $l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,  
                                                      stripslashes(mysql_field_name($result, $i))) . $csv_enclosed;  
                                                      $schema_insert .= $l;  
                                                      $schema_insert .= $csv_separator;  
                                                    } // end for  
                                                  
                                                      $out = trim(substr($schema_insert, 0, -1));  
                                                      $out .= $csv_terminated;  
                                                  
                                                    // Datenformatierung  
                                                  
                                                while ($row = mysql_fetch_array($result)) {  
                                                     $schema_insert = '';  
                                                  
                                                     for ($j = 0; $j < $fields_cnt; $j++) {  
                                                         if ($row[$j] == '0' || $row[$j] != '') {  
                                                             if ($csv_enclosed == '') {  
                                                                $schema_insert .= $row[$j];  
                                                             }  
                                                             else {  
                                                                 $schema_insert .= $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $row[$j]) . $csv_enclosed;  
                                                             }  
                                                         }  
                                                         else {  
                                                             $schema_insert .= '';  
                                                         }  
                                                  
                                                         if ($j < $fields_cnt - 1) {  
                                                             $schema_insert .= $csv_separator;  
                                                         }  
                                                    } // end for  
                                                  
                                                        $out .= $schema_insert;  
                                                        $out .= $csv_terminated;  
                                                } // end while  
                                                  
                                                echo $out;  
                                                exit;  
                                                  
                                                
                                                
                                                1. Hallo,

                                                  in diesem Beitrag erwähnst Du, dass es zu folgenden Fehlermeldungen kommt:

                                                  Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource in excel_test.php on line 30
                                                  Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in excel_test.php on line 47

                                                  $sql_query = "SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND KZ = '".$meeting_id."' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE='" . $schul_id . "' ORDER BY NAME";

                                                  $result = mysql_query($sql_query);

                                                  // In der folgenden Zeile gehst Du davon aus, dass mysql_query erfolgreich war. Die Fehlerbehandlung fehlt.

                                                  if (!$result) {
                                                        // Huch, ein Fehler ist aufgetreten. Diesen müssen wir behandeln
                                                        // ein einfaches die(mysql_error), wie im [link:http://www.php.net/manual/de/function.mysql-query.php@title=Handbuchbeispiel]
                                                        // ist keine wirkliche Fehlerbehandlung
                                                        // Fürs erste reicht hier allerdings ein
                                                        $out = mysql_error();
                                                        // das Du zum Schluss hübsch ausgeben kannst.
                                                    }
                                                    else {
                                                        // Gültige Ressourcekennung da, Ergebnis kann verarbeitet werden.

                                                  $fields_cnt = mysql_num_fields($result);
                                                      $schema_insert = '';
                                                      for ($i = 0; $i < $fields_cnt; $i++) {
                                                          $l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,

                                                  // Was soll hier stripslashes bewirken?

                                                  stripslashes(mysql_field_name($result, $i))) . $csv_enclosed;

                                                  // [...]

                                                    
                                                  Fürs weitere Vorgehen empfehle ich Dir folgenden Ansatz, das altbewährte EVA-Prinzip:  
                                                    
                                                  Eingabe:  
                                                  Stelle Query zusammen  
                                                  Setze Query an Datenbank ab, behandle auftretende Fehler angemessen.  
                                                  Wenn Query erfolgreich abgesetzt, lese Daten in Array ein. Gebe danach die MySQL-Ressource frei.  
                                                    
                                                  Verarbeitung:  
                                                  Bereite Daten für CSV-Ausgabe auf.  
                                                    
                                                  Ausgabe:  
                                                  Gebe Daten aus :-)  
                                                    
                                                  Sicher benötigt dieser Ansatz mehr Speicher, ich gehe im Moment aber davon aus, dass dies kein Problem darstellt.  
                                                  Du vermischst Eingabe und Verarbeitung. Trenne diese. Verwende Funktionen. Kommentiere Deinen Code.  
                                                    
                                                    
                                                  Freundliche Grüße  
                                                    
                                                  Vinzenz
                                                  
                                                  1. Ich versteh nicht, warum die SQL-Query mit der expliziten Eingabe funktioniert und mit der Variable nicht, obwohl diese Variable genau mit dieser Zahl (also der expliziten Eingabe) übereinstimmt! Da muss es doch eine andere Formatierung geben, dass auch das die Query mit der Variable funktioniert - zum VERZWEIFELN!!

                                                    Hallo,

                                                    in diesem Beitrag erwähnst Du, dass es zu folgenden Fehlermeldungen kommt:

                                                    Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource in excel_test.php on line 30
                                                    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in excel_test.php on line 47

                                                    $sql_query = "SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND KZ = '".$meeting_id."' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE='" . $schul_id . "' ORDER BY NAME";

                                                    $result = mysql_query($sql_query);

                                                    // In der folgenden Zeile gehst Du davon aus, dass mysql_query erfolgreich war. Die Fehlerbehandlung fehlt.

                                                    if (!$result) {
                                                          // Huch, ein Fehler ist aufgetreten. Diesen müssen wir behandeln
                                                          // ein einfaches die(mysql_error), wie im [link:http://www.php.net/manual/de/function.mysql-query.php@title=Handbuchbeispiel]
                                                          // ist keine wirkliche Fehlerbehandlung
                                                          // Fürs erste reicht hier allerdings ein
                                                          $out = mysql_error();
                                                          // das Du zum Schluss hübsch ausgeben kannst.
                                                      }
                                                      else {
                                                          // Gültige Ressourcekennung da, Ergebnis kann verarbeitet werden.

                                                    $fields_cnt = mysql_num_fields($result);
                                                        $schema_insert = '';
                                                        for ($i = 0; $i < $fields_cnt; $i++) {
                                                            $l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed,

                                                    // Was soll hier stripslashes bewirken?

                                                    stripslashes(mysql_field_name($result, $i))) . $csv_enclosed;
                                                          // [...]

                                                    
                                                    >   
                                                    > Fürs weitere Vorgehen empfehle ich Dir folgenden Ansatz, das altbewährte EVA-Prinzip:  
                                                    >   
                                                    > Eingabe:  
                                                    > Stelle Query zusammen  
                                                    > Setze Query an Datenbank ab, behandle auftretende Fehler angemessen.  
                                                    > Wenn Query erfolgreich abgesetzt, lese Daten in Array ein. Gebe danach die MySQL-Ressource frei.  
                                                    >   
                                                    > Verarbeitung:  
                                                    > Bereite Daten für CSV-Ausgabe auf.  
                                                    >   
                                                    > Ausgabe:  
                                                    > Gebe Daten aus :-)  
                                                    >   
                                                    > Sicher benötigt dieser Ansatz mehr Speicher, ich gehe im Moment aber davon aus, dass dies kein Problem darstellt.  
                                                    > Du vermischst Eingabe und Verarbeitung. Trenne diese. Verwende Funktionen. Kommentiere Deinen Code.  
                                                    >   
                                                    >   
                                                    > Freundliche Grüße  
                                                    >   
                                                    > Vinzenz
                                                    
                                                    1. Ich versteh nicht, warum die SQL-Query mit der expliziten Eingabe funktioniert und mit der Variable nicht, obwohl diese Variable genau mit dieser Zahl (also der expliziten Eingabe) übereinstimmt! Da muss es doch eine andere Formatierung geben, dass auch das die Query mit der Variable funktioniert - zum VERZWEIFELN!!

                                                      ... oder besser gesagt, die Abfrage funktioniert ja, denn im Browser ergibt die Abfrage mit der Variablen das richtige Ergebnis, aber die Daten werden dann nicht im Excel angezeigt! Es dürfte also irgendwo in dem Teil, in dem die Daten für's Excel aufbereitet werden, der Hund begraben sein! aber WOOOOOO?

                                                      1. Hallo

                                                        ... oder besser gesagt, die Abfrage funktioniert ja, denn im Browser ergibt die Abfrage mit der Variablen das richtige Ergebnis, aber die Daten werden dann nicht im Excel angezeigt! Es dürfte also irgendwo in dem Teil, in dem die Daten für's Excel aufbereitet werden, der Hund begraben sein! aber WOOOOOO?

                                                        kommt es noch zu folgenden Fehlermeldungen?

                                                        Warning: mysql_num_fields(): supplied argument is not a valid MySQL result resource in excel_test.php on line 30
                                                        Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in excel_test.php on line 47

                                                        Wenn ja, dann wird die Abfrage nicht korrekt ausgeführt.

                                                        Ergänze bitte Deinen Code mit einer Debug-Ausgabe:

                                                          
                                                        $csv_terminated = "\n";  
                                                        $csv_separator = ",";  
                                                        $csv_enclosed = '"';  
                                                        $csv_escaped = "\\";  
                                                          
                                                        $sql_query = "SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND KZ = '".$meeting_id."' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE='" . $schul_id . "' ORDER BY NAME";  
                                                          
                                                        $result = mysql_query($sql_query);  
                                                        // hier musst Du auf jeden Fall den Erfolg der Operation abfragen  
                                                        if (!$result) {  
                                                            // Es gab ein Problem mit der Abfrage  
                                                            // Gebe den Fehler aus, den MySQL an PHP übergeben hat:  
                                                            echo mysql_error(), "\nSQL-Statement:\n", $sql_query;  
                                                        }  
                                                          
                                                        // Im Fehlerfall ist es nicht sinnvoll, den folgenden Code auszuführen,  
                                                        // daher solltest Du den folgenden Code in den else-Block packen.  
                                                          
                                                        $fields_cnt = mysql_num_fields($result);  
                                                        $schema_insert = '';  
                                                        [...]  
                                                        
                                                        

                                                        Hast Du das verstanden?
                                                        Was wird ausgegeben?

                                                        Freundliche Grüße

                                                        Vinzenz

                                                        1. // Im Fehlerfall ist es nicht sinnvoll, den folgenden Code auszuführen,
                                                          // daher solltest Du den folgenden Code in den else-Block packen.

                                                          Hast Du das verstanden?
                                                          Was wird ausgegeben?

                                                          ja, hab ich verstanden und läuft ohne Fehlermeldung durch! Im Excel werden mir dann leider nur mehr die Feldbezeichnungen korrekt aufgelistet ... leider ohne Daten

                                                          1. Hallo

                                                            // Im Fehlerfall ist es nicht sinnvoll, den folgenden Code auszuführen,
                                                            // daher solltest Du den folgenden Code in den else-Block packen.

                                                            Hast Du das verstanden?
                                                            Was wird ausgegeben?

                                                            ja, hab ich verstanden und läuft ohne Fehlermeldung durch! Im Excel werden mir dann leider nur mehr die Feldbezeichnungen korrekt aufgelistet ... leider ohne Daten

                                                            Schreibe bitte den Inhalt von $out in eine Textdatei (file_put_contents() sollte Dir helfen) und poste bitte den Textteil, der die Feldbezeichnungen und die ersten zwei Datenzeilen ergibt. Falls Du nur Echtdaten hast, bitte die Daten nur so anonymisieren, dass der prinzipielle Aufbau erhalten bleibt.

                                                            Freundliche Grüße

                                                            Vinzenz

                                                            1. Schreibe bitte den Inhalt von $out in eine Textdatei (file_put_contents() sollte Dir helfen) und poste bitte den Textteil, der die Feldbezeichnungen und die ersten zwei Datenzeilen ergibt. Falls Du nur Echtdaten hast, bitte die Daten nur so anonymisieren, dass der prinzipielle Aufbau erhalten bleibt.

                                                              "KZ","NAME","VORNAME","GESCHL","JG","SPRINT","MITTEL","k_vname","k_name","k_tel","k_mail"

                                                              das ist die ganze Ausgabe ... leider ohne Daten (ich hab nichts gelöscht)

                                                              1. Hallo

                                                                "KZ","NAME","VORNAME","GESCHL","JG","SPRINT","MITTEL","k_vname","k_name","k_tel","k_mail"

                                                                das ist die ganze Ausgabe ... leider ohne Daten (ich hab nichts gelöscht)

                                                                Lass Dir mal die Anzahl der Datensätze ausgeben:

                                                                  
                                                                $csv_terminated = "\n";  
                                                                $csv_separator = ",";  
                                                                $csv_enclosed = '"';  
                                                                $csv_escaped = "\\";  
                                                                  
                                                                $sql_query = "SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND KZ = '".$meeting_id."' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE='" . $schul_id . "' ORDER BY NAME";  
                                                                  
                                                                $result = mysql_query($sql_query);  
                                                                // hier musst Du auf jeden Fall den Erfolg der Operation abfragen  
                                                                if (!$result) {  
                                                                    // Es gab ein Problem mit der Abfrage  
                                                                    // Gebe den Fehler aus, den MySQL an PHP übergeben hat:  
                                                                    echo mysql_error(), "\nSQL-Statement:\n", $sql_query;  
                                                                }  
                                                                  
                                                                // Im Fehlerfall ist es nicht sinnvoll, den folgenden Code auszuführen,  
                                                                // daher solltest Du den folgenden Code in den else-Block packen.  
                                                                  
                                                                // Debug-Ausgabe:  
                                                                // Gebe die Anzahl der Datensätze aus  
                                                                echo [link:http://www.php.net/manual/de/function.mysql-num-rows.php@title=mysql_num_rows]($result);  
                                                                  
                                                                $fields_cnt    = mysql_num_fields($result);  
                                                                $schema_insert = '';  
                                                                [...]  
                                                                
                                                                

                                                                Anmerkung:
                                                                Grundsätzlich wäre es besser, die Debug-Ausgaben in eine Protokolldatei zu schreiben.

                                                                Freundliche Grüße

                                                                Vinzenz

                                                                1. Lass Dir mal die Anzahl der Datensätze ausgeben:

                                                                  Anzahl ist 0

                                                                  1. Hallo,

                                                                    Lass Dir mal die Anzahl der Datensätze ausgeben:
                                                                    Anzahl ist 0

                                                                    wenn Deine Abfrage Dir 0 Datensätze zurückliefert, dann kann Excel auch anzeigen, ist doch logisch.

                                                                    Wenn es Deiner Ansicht nach Datensätze geben müsste, dann läuft etwas mit Deiner generierten SQL-Anweisung schief. Lass Dir diese Anweisung anzeigen und teste sie z.B. in phpMyAdmin.

                                                                    Freundliche Grüße

                                                                    Vinzenz

                                                                    1. Wenn es Deiner Ansicht nach Datensätze geben müsste, dann läuft etwas mit Deiner generierten SQL-Anweisung schief. Lass Dir diese Anweisung anzeigen und teste sie z.B. in phpMyAdmin.

                                                                      Diese Anweisung funktioniert und die Datensätze werden im Excel auch richtig zerlegt und angezeigt:

                                                                      $sql_query = "SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE='305026' ORDER BY NAME";

                                                                      diese funktioniert nicht und Excel zeigt nichts an:

                                                                      $sql_query = "SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE='".$schul_id."' ORDER BY NAME";

                                                                      $schul_id ist aber genau 305026

                                                                      in phpMyAdmin kann ich's nicht testen, da dort diese Variable nicht existiert! mit 305026 funktionierts!

                                                                      1. Hi,

                                                                        Diese Anweisung funktioniert und die Datensätze werden im Excel auch richtig zerlegt und angezeigt:

                                                                        $sql_query = "SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE='305026' ORDER BY NAME";

                                                                        Wenn du das error_reporting von PHP mal auf E_ALL stellen wuerdest, dann wuerde es dich hier bspw. darauf hinweisen, dass die Konstante Y undefiniert ist -

                                                                        diese funktioniert nicht und Excel zeigt nichts an:

                                                                        $sql_query = "SELECT KZ, NAME, VORNAME, GESCHL, JG, SPRINT, MITTEL, k_vname, k_name, k_tel, k_mail FROM MELDUNG WHERE AKTIV='1' AND LETZTE_MELDUNG=".date(Y)." AND SCHULE='".$schul_id."' ORDER BY NAME";

                                                                        • und es wuerde mich auch nicht wundern, wenn du bis zum erreichen dieser Code-Stelle weitere Meldungen bekommen wuerdest, bspw. eine der Art, dass $schul_id (noch) gar nicht definiert ist oder sowas.

                                                                        (Dass du aber gleichzeitig feststellst, dass PHP dich mit Meldungen ob eines arg schlampigen Programmierstils geradezu zuschmeisst, wuerde mich auch nicht sonderlich verwundern.)

                                                                        $schul_id ist aber genau 305026

                                                                        Und *wo* *genau* hast du diese *Kontrollausgabe* gemacht?

                                                                        MfG ChrisB

                                                                    2. für alle, die es interessiert, die Lösung ist:

                                                                      im SQL-Statement: "SELECT .... WHERE ... SCHULE = '".$_REQUEST['SCHUL_ID']."' ... "

                                                                      DANKE (VOR ALLEM) an Vinzenz Mai für die Unterstützung!!!

                                                                      1. Mahlzeit,

                                                                        für alle, die es interessiert, die Lösung ist:

                                                                        im SQL-Statement: "SELECT .... WHERE ... SCHULE = '".$_REQUEST['SCHUL_ID']."' ... "

                                                                        Jein. Das ist nicht die Lösung. Zumindest nicht für das von Dir beschriebene Problem - denn schließlich hast Du noch in Deinem letzten Posting behauptet "$schul_id ist aber genau 305026".

                                                                        Das Problem war also offenbar, dass die von Dir benutzte Variable eben NICHT den von Dir angenommenen Inhalt hatte - was Du schon ganz zu Anfang des Threads nach der ersten Dir gegebenen Antwort mit geeigneten Kontrollausgaben hättest überprüfen können.

                                                                        DANKE (VOR ALLEM) an Vinzenz Mai für die Unterstützung!!!

                                                                        Gern geschehen. Es bleibt zu hoffen, dass Du das nächste Mal die guten Ratschläge und Tipps, die Du als Antwort bekommst, auch berücksichtigst und beherzigst - so kommt man als Fragender in diesem Forum in der Regel schneller zum Ziel.

                                                                        q.e.d.

                                                                        MfG,
                                                                        EKKi

                                                                        --
                                                                        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                                                                      2. Привіт!

                                                                        im SQL-Statement: "SELECT .... WHERE ... SCHULE = '".$_REQUEST['SCHUL_ID']."' ... "

                                                                        Halt, das ist gefährlich! Du darfst niemals Daten unsicherer Herkunft ungeprüft in ein SQL-Statement übernehmen! Stichwort: SQL-Injektion
                                                                        Für die Kombination PHP/MySQL ist die Funktion mysql_real_escape_string() die richtige Abhilfe.

                                                                        Viele Grüße vom Længlich

                                                                        --
                                                                        Mein aktueller Gruß ist:
                                                                        Ukrainisch (Umschrift: Pryvit)
      2. Mahlzeit,

        Fehlermeldung im Excel:

        Wieso jetzt auf einmal Excel? Ich dachte, es geht um PHP und MySQL?

        Wie sieht die konkrete SQL-Abfrage (ohne PHP-Code!) aus, die zu dem genannten Fehler führt?

        Wenn ich statt $schul_id den Wert einer Schulnummer einsetze, funktioniert's ja einwandfrei! Aber sobald ich eine Variable einbaue, funktioniert's nicht!!

        Also kann man diese Frage schonmal mit "Nein" beantworten. Was ist denn in der Variable $schul_id drin?

        Komisch ist, dass bei allen anderen Abfragen diese Formatierung funktioniert --> nur beim Excel-Export nicht!

        Was ist denn der "Excel-Export"?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|