Patrick: nur die datensätze zählen die wirklich angezeigt werden

Hallo

wie kann man nur die datensätze zählen lassen aus einer mysql datenbank die auch wirklich angezeigt werden. also wenn man datensätze ausgibt in denen die daten auch vollständig sind oder ähnliches.

wie kann man halt diese datensätze zählen lassen die wirklich angezeigt werden??

Mit freundlichen Grüssen,
Patrick

  1. Hallo Patrick

    $result = mysql_query(...);

    mysql_num_rows($result) liefert dann die Anzahl der Datensaetze, die die Abfrage ausgibt

    Harry

    1. Hallo

      das habe ich ja so gemacht funktioniert aber irgendwie nicht.

      code:
      ...
      $limit = 2;
      $ergebnis = mysql_query( "SELECT * FROM ".$table );
      $anz_reihen = mysql_num_rows( $ergebnis );
      $anzahl = $anz_reihen / $limit + 0.99;
      $seite = $start / $limit + 1;
      settype($anzahl, integer);

      if ($start > 0) {
       $newStart = ($start - $limit < 0) ? 0 : ($start-$limit);
         $zurueck = "<a href=".$PHP_SELF."?start=".$newStart."&gesch=".$gesch.">zurück</a> | ";
      } else {
       $zurueck = "zurück | ";
        }

      if ($start + $limit < $total) {
       $newStart = $start + $limit;
         $weiter = " | <a href=".$PHP_SELF."?start=".$newStart."&gesch=".$gesch.">weiter</a>";
      } else {
       $weiter = " | weiter";
        }
      ...

      es werden manche seiten leer angezeigt weil auf diesen seiten eigendlich datensätze zu sehen sein sollen die aber bei der ausführung rausgefiltert wurden weil die daten nicht vollständig waren.

      Mit freundlichen Grüssen,
      Patrick

      1. Hallo Patrick,

        $ergebnis = mysql_query( "SELECT * FROM ".$table );

        http://www.dclp-faq.de/q/q-sql-select.html

        $anz_reihen = mysql_num_rows( $ergebnis );
        $anzahl = $anz_reihen / $limit + 0.99;
        $seite = $start / $limit + 1;

        für was ist das alles? was steht in $start?

        $zurueck = "<a href=".$PHP_SELF."?start=".$newStart."&gesch=".$gesch.">

        $PHP_SELF -> $_SERVER['PHP_SELF']
        ...$newStart."&gesch="... -> ...$newStart."&gesch="...

        } else {
         $zurueck = "zurück | ";

        mhh... warum gibst du dann zurück einfach ohne Link aus und lässt es nicht ganz weg?

        $weiter = " | <a href=".$PHP_SELF."?start=".$newStart."&gesch=".$gesch.">

        s.o.

        es werden manche seiten leer angezeigt weil auf diesen seiten eigendlich datensätze zu sehen sein sollen die aber bei der ausführung rausgefiltert wurden weil die daten nicht vollständig waren.

        wo gibst du den überhaupt Daten aus? - in dem Codeabschnitt den du gepostet hast, wird kein einziges mal ein Datensatz ausgegeben. Aufgrund welcher Bedingung sollen Datensätze eigentlich nicht angezeigt werden? Und warum fragst du nicht einfach nur die Datensätze ab, die du auch brauchst?

        Grüße aus Nürnberg
        Tobias

        --
        Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
        1. Hallo

          $anz_reihen = mysql_num_rows( $ergebnis );
          $anzahl = $anz_reihen / $limit + 0.99;
          $seite = $start / $limit + 1;
          für was ist das alles? was steht in $start?

          für die ausgabe von seitenanzahl und aktuelle anzahl von seiten.

          } else {
           $zurueck = "zurück | ";
          mhh... warum gibst du dann zurück einfach ohne Link aus und lässt es nicht ganz weg?

          ja ich find es sieht besser aus.

          hier der ganze code:
          <?php
          if ($gesch == "m") {
          $model = "w";

          } elseif ($gesch == "w") {
          $model = "m";
          }
          include("../db.inc.php");
          $host     = "localhost";
          $user     = "$benutzer";
          $password = "$passwort";
          $database = "$db";
          $table    = "sd_models";
          $id       = "model_id";

          // Datendefinition für die Clientausgabe
          $start = (isset($start)) ? abs((int)$start) : 0;
          $limit = 3;                     // Datensätze pro Ausgabeseite

          // Verbindung zu MySQL-Datenbank herstellen oder sterben.
          @mysql_connect($host,$user,$password)
             or die("Abbruch: Verbindung zu '$host'"
                   ." konnte nicht hergestellt werden.");

          // Benötigte Datenbank auswählen oder sterben.
          @mysql_select_db($database)
             or die("Abbruch: Datenbank konnte nicht"
                   ." selektiert werden.<br><br>MySQL sagt: ".mysql_error());

          // Feststellen der Anzahl der verfügbaren Datensätze.
          $resultID = @mysql_query("SELECT COUNT(model_id) FROM ");
          $total    = @mysql_result($resultID,0);

          $start    = ($start >= $total) ? $total - $limit : $start;

          // Datenbankabfrage ausführen.
          $query    = "SELECT * FROM ".$table." ORDER BY model_id DESC"." LIMIT ".$start.",".$limit;
          $resultID = @mysql_query($query);

          // Seitenanzahl anzeigen.
          $ergebnis = mysql_query( "SELECT * FROM ".$table );
          $anz_reihen = mysql_num_rows( $ergebnis );
          $anzahl = $anz_reihen / $limit + 0.99;
          $seite = $start / $limit + 1;
          settype($anzahl, integer);

          if ($start > 0) {
           $newStart = ($start - $limit < 0) ? 0 : ($start-$limit);
             $zurueck = "<a href=".$PHP_SELF."?start=".$newStart."&gesch=".$gesch.">zurück</a> | ";
          } else {
           $zurueck = "zurück | ";
            }

          if ($start + $limit < $total) {
           $newStart = $start + $limit;
             $weiter = " | <a href=".$PHP_SELF."?start=".$newStart."&gesch=".$gesch.">weiter</a>";
          } else {
           $weiter = " | weiter";
            }
          ?>
          <html>
           <head>
            <title>Models <?php print $gesch; ?>.</title>
            <link rel="stylesheet" type="text/css" href="../styles/style.css">
           </head>
           <body>
          <div align="center">
            <table border="0" cellpadding="0" cellspacing="10">
              <tr valign="top">
            <td height="80">
                   <div align="center">
              <h2>Models <?php print $gesch; ?>.</h2>
             </div>
            </td>
            <td width="69" height="80"></td>
           </tr>
           <tr>
            <td>Klicke auf das Bild um die SedCard zu betrachten!</td>
            <td width="69"></td>
           </tr>
           <tr>
            <td>
             <div align="center">
              <?php print $zurueck."Seite ".$seite." von ".$anzahl.$weiter; ?>
             </div>
            </td>
            <td width="69"></td>
           </tr>
          </table>
          <table width="616" border="0" cellpadding="0" cellspacing="10">
              <tr>
           <?php
           $n=0;
           while ( $data = mysql_fetch_array($resultID) ) {
            if ( empty($data['user'])        || empty($data['name'])        || empty($data['gebdatum'])  || empty($data['postleitzahl']) ||
                empty($data['land'])        || empty($data['wohnort'])     || empty($data['email'])     || empty($data['groesse']) ||
                empty($data['masse'])       || empty($data['konfektions']) || empty($data['bh_kragen']) || empty($data['haarfarbe']) ||
                empty($data['haarlaenge'])  || empty($data['augenfarbe'])  || empty($data['hauttyp'])   || empty($data['schuhg']) ||
                empty($data['einsatz_tab']) ||
                       $data['geschlecht'] == "$model" ) {
             //Daten unvollständig
            } elseif (file_exists("../images/models/".$data['geschlecht'].$data['model_id']."/bild1.jpg") AND
                file_exists("../images/models/".$data['geschlecht'].$data['model_id']."/bild2.jpg")) { ?>
            <td>
            <div align="center">
            <table border="0" cellpadding="0" cellspacing="2">
                      <tr height="100">
               <td height="100" width="150"><a href="http://www.models-planet.de/php/sedcard.php?user=<?php print $data['user']; ?>"><img src="http://www.models-planet.de/images/models/<?php print $data['geschlecht']; ?><?php print $data['model_id']; ?>/bild1.jpg" border="1" width="72" boardercolor="#000000"></a></td>
              </tr>
              <tr>
               <td width="150"><?php print $data['name']; ?></td>
              </tr>
              <tr>
               <td width="150"><font size="1"><?php print $data['land']; ?>-<?php print $data['postleitzahl']; ?> <?php print $data['wohnort']; ?></font></td>
              </tr>
             </table>
            </div>
            </td>
           <?php
           if($n%2 == 1) {
            print "</tr>";
                print "<tr>";
           }
           $n++;
               }
           }
           ?>
           </tr>
          </table>
          <table border="0" cellpadding="0" cellspacing="10">
           <tr>
            <td width="273">
             <div align="center">
              <?php print $zurueck."Seite ".$seite." von ".$anzahl.$weiter; ?>
             </div>
            </td>
            <td width="69"></td>
           </tr>
          </table>
          </div>
           </body>
          </html>
          <?php
          mysql_close();
          ?>

          Mit freundlichen Grüssen,
          Patrick

          1. Hallo Patrick,

            if ($gesch == "m") {
            $model = "w";

            } elseif ($gesch == "w") {
            $model = "m";
            }

            warum nicht einfach
            $model = ($gesch=="m")? "w":"m";

            $user     = "$benutzer";
            $password = "$passwort";

            die Anführungszeichen um die Variablen kannst du weglassen.

            $resultID = @mysql_query("SELECT COUNT(model_id) FROM ");

            FROM was? Warum unterdrückst du eine evtl. Fehlermeldung?

            // Seitenanzahl anzeigen.
            $ergebnis = mysql_query( "SELECT * FROM ".$table );

            nur für die Seitenzahl die _komplette_ Tabelle abfragen? nicht sehr effektiv...

            <div align="center">
              <table border="0" cellpadding="0" cellspacing="10">
                <tr valign="top">
              <td height="80">

            *pfui* - das geht alles mit css

            $n=0;
             while ( $data = mysql_fetch_array($resultID) ) {
              if ( empty($data['user']) || empty($data['name']) || empty($data['gebdatum'])  ||

            prüf nicht jetzt erst, ob die Daten vollständig sind, sondern beim Abfragen aus der Datenbank oder - besser - bevor du den Datensatz in die DB schreibst.

            [...] groesse [...] masse [...] konfektions [...] bh_kragen [...] haarfarbe [...] haarlaenge [...] augenfarbe [...] hauttyp [...] schuhg [...]

            das sind Sachen die die Welt bewegen... :-)

            //Daten unvollständig
              } elseif (...) { ?>

            wo ist das dazugehörige else?

            mysql_close();

            die musst du nict zumachen - die wird automatisch geschlossen.

            Grüße aus Nürnberg
            Tobias

            --
            Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
            1. Hallo

              if ($gesch == "m") {
              $model = "w";

              } elseif ($gesch == "w") {
              $model = "m";
              }
              warum nicht einfach
              $model = ($gesch=="m")? "w":"m";

              bin ja noch am lernen

              $user     = "$benutzer";
              $password = "$passwort";
              die Anführungszeichen um die Variablen kannst du weglassen.

              wie gesagt bin noch am lernen

              $resultID = @mysql_query("SELECT COUNT(model_id) FROM ");
              FROM was? Warum unterdrückst du eine evtl. Fehlermeldung?

              FROM $table. habs vergessen. Warum ich sie unterdrücke? kA

              // Seitenanzahl anzeigen.
              $ergebnis = mysql_query( "SELECT * FROM ".$table );
              nur für die Seitenzahl die _komplette_ Tabelle abfragen? nicht sehr effektiv...

              stimmt es reicht auch ein feld abzufragen.

              <div align="center">
                <table border="0" cellpadding="0" cellspacing="10">
                  <tr valign="top">
                <td height="80">
              *pfui* - das geht alles mit css

              ja aber hab mich mit css noch nicht richtig beschäfftigt.

              $n=0;
               while ( $data = mysql_fetch_array($resultID) ) {
                if ( empty($data['user']) || empty($data['name']) || empty($data['gebdatum'])  ||
              prüf nicht jetzt erst, ob die Daten vollständig sind, sondern beim Abfragen aus der Datenbank oder - besser - bevor du den Datensatz in die DB schreibst.

              wie kann ich sie denn beim abfragen überprüfen?
              kann man das mit dem empty() auch einfacher machen oder alles in einem empty() prüfen?

              //Daten unvollständig
                } elseif (...) { ?>
              wo ist das dazugehörige else?

              schlimm wenns nicht da ist??

              mysql_close();
              die musst du nict zumachen - die wird automatisch geschlossen.

              ok dann kann ich mir das ja sparen

              schonmal danke für die hilfe!!

              Mit freundlichen Grüssen,
              Patrick

              1. Hallo Patrick,

                $model = ($gesch=="m")? "w":"m";
                bin ja noch am lernen

                deswegen sag ich dirs ja :-) (im Übrigen tut es für das elseif auch ein else)

                $resultID = @mysql_query("SELECT COUNT(model_id) FROM ");
                [...] Warum unterdrückst du eine evtl. Fehlermeldung?
                [...] Warum ich sie unterdrücke? kA

                dann lass das @ weg.

                nur für die Seitenzahl die _komplette_ Tabelle abfragen? nicht sehr effektiv...
                stimmt es reicht auch ein feld abzufragen.

                ich würde die Seitenzahl in der url mit übergeben

                *pfui* - das geht alles mit css
                ja aber hab mich mit css noch nicht richtig beschäfftigt.

                dann mal los :-)

                prüf nicht jetzt erst, ob die Daten vollständig sind, sondern beim Abfragen aus der Datenbank oder - besser - bevor du den Datensatz in die DB schreibst.
                wie kann ich sie denn beim abfragen überprüfen?

                das kommt darauf an, wie die Felder aussehen, wenn sie leer sind - entweder mit ...WHERE user!=""... oder - wenn du NULL in leeren Feldern stehen hast - mit ...WHERE user NOT NULL... (man möge mich korrigieren, wenn ich Müll rede :-))

                kann man das mit dem empty() auch einfacher machen oder alles in einem empty() prüfen?

                nein, aber sinnvoller wäre es sowieso _vor_ dem Einfügen zu prüfen, ob alles da ist.

                wo ist das dazugehörige else?
                schlimm wenns nicht da ist??

                keine Ahnung, aber auf http://de3.php.net/control-structures.elseif steht nirgends was davon, dass man es weglassen kann.

                Grüße aus Nürnberg
                Tobias

                --
                Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
                1. Hallo

                  nur für die Seitenzahl die _komplette_ Tabelle abfragen? nicht sehr effektiv...
                  stimmt es reicht auch ein feld abzufragen.
                  ich würde die Seitenzahl in der url mit übergeben

                  wie meinst du das? gib mir bitte ein beispiel wie du es umsetzen würdest

                  das kommt darauf an, wie die Felder aussehen, wenn sie leer sind - entweder mit ...WHERE user!=""... oder - wenn du NULL in leeren Feldern stehen hast - mit ...WHERE user NOT NULL... (man möge mich korrigieren, wenn ich Müll rede :-))

                  also alle felder sind NULL = nein nur bei 2 feldern habe ich einen standart wert und das feld model_id ist ein auto_increment feld.

                  kann man das mit dem empty() auch einfacher machen oder alles in einem empty() prüfen?
                  nein, aber sinnvoller wäre es sowieso _vor_ dem Einfügen zu prüfen, ob alles da ist.

                  ja aber ich würde es doof finden wenn man sich bei der anmeldung direkt mit allen daten anmelden muss. sie melden sich nur mit den wichtigsten daten an und können dann nachher im adminbereich seiner sedcard alle anderen daten angeben. ab da an werden sie auch überprüft aber wenn ein user sich nur aus spaß anmeldet und sonst keine daten angibt soll er nicht angezeigt werden. ich werde solche user auch nach 1 woche unvollständiger daten löschen lassen.

                  Mit freundlichen Grüssen,
                  Patrick

                  1. Hallo Patrick,

                    wie meinst du das? gib mir bitte ein beispiel wie du es umsetzen würdest

                    so ähnlich wie hier: http://www.dclp-faq.de/q/q-mysql-seitenweise.html (wo du dein Script anscheinend auch her hast :-)) nur eben die Seitenzahl übergeben und aus der dann auf die "Begrenzungen" für LIMIT schließen (du kannst natürlich auch einfach die Seitenzahl aus $_GET['start'] - das du ja übergibst - berechnen) - wobei $start (statt $seitenzahl) natürlich auch seine Vorteile hat...

                    das kommt darauf an, wie die Felder aussehen, wenn sie leer sind - entweder mit ...WHERE user!=""... oder - wenn du NULL in leeren Feldern stehen hast - mit ...WHERE user NOT NULL... (man möge mich korrigieren, wenn ich Müll rede :-))
                    also alle felder sind NULL = nein nur bei 2 feldern habe ich einen standart wert

                    ehh... sind sie jetzt NULL, oder nicht?

                    nein, aber sinnvoller wäre es sowieso _vor_ dem Einfügen zu prüfen, ob alles da ist.
                    aber wenn ein user sich nur aus spaß anmeldet und sonst keine daten angibt soll er nicht angezeigt werden.

                    warum soll sich ein User aus Spass anmelden?

                    Grüße aus Nürnberg
                    Tobias

                    --
                    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
                    1. Hallo

                      so ähnlich wie hier: http://www.dclp-faq.de/q/q-mysql-seitenweise.html (wo du dein Script anscheinend auch her hast :-)) nur eben die Seitenzahl übergeben und aus der dann auf die "Begrenzungen" für LIMIT schließen (du kannst natürlich auch einfach die Seitenzahl aus $_GET['start'] - das du ja übergibst - berechnen) - wobei $start (statt $seitenzahl) natürlich auch seine Vorteile hat...

                      ja sieht fast genau so aus habs aber von einer anderen seite.

                      ehh... sind sie jetzt NULL, oder nicht?

                      es steht überall bei Null nein aber bei zwei feldern habe ich einen standart wert angegeben aber da steht auch nein bei null. also kein feld ist NULL

                      warum soll sich ein User aus Spass anmelden?

                      es gibt immer irgendwelche vögel die sowas machen.

                      ja aber mein problem ist immer das die datensätze die herausgefiltert wurden mitgezählt werden.

                      das script in aktion:
                      http://www.models-planet.de/php/models.php?gesch=w

                      Mit freundlichen Grüssen,
                      Patrick

                  2. hi,

                    ja aber ich würde es doof finden wenn man sich bei der anmeldung direkt mit allen daten anmelden muss.

                    sicher. aber wenn ich mich einmal angemeldet habe, und spätert fordert man noch weitere daten von mir, finde ich das erst recht "doof" - wahrscheinlich würde ich sogar sehr misstrauisch reagieren (weil mir die dahinter stehenden absichten unklar sind), und mich ganz abmelden.

                    ich werde solche user auch nach 1 woche unvollständiger daten löschen lassen.

                    d.h. ich muss beim anmelden nicht alle felder ausfüllen - und wenn ich dann nach anderthalb wochen wiederkomme, ist mein account weg, eben weil ich nicht alles ausgefüllt habe?

                    ich denke mal, du wirst es dir mit vielen potentiellen usern verscherzen, wenn du das konzept hier nicht etwas mehr den üblichen gepflogenheiten anpasst ...

                    gruss,
                    wahsaga

              2. hi,

                $resultID = @mysql_query("SELECT COUNT(model_id) FROM ");
                FROM was? Warum unterdrückst du eine evtl. Fehlermeldung?
                FROM $table. habs vergessen. Warum ich sie unterdrücke? kA

                bitte hundert mal schreiben, und danach ein für alle mal merken:
                ich will nie wieder während des entwickelns eines scriptes fehlermeldungen unterdrücken!
                ich will nie wieder während des entwickelns eines scriptes fehlermeldungen unterdrücken!
                ich will nie wieder während des entwickelns eines scriptes fehlermeldungen unterdrücken!
                ...
                ich will nie wieder während des entwickelns eines scriptes fehlermeldungen unterdrücken!

                ernsthaft: das ist beim entwickeln absoluter irrsinn, manche fehler wirst du so ewig suchen!

                idealerweise schreibst du das ganze so:
                mysql_query(...) od die(mysql_error());
                damit kriegst du im fehlerfall auch noch eine etwas aussagekräftigere fehlermeldung präsentiert.

                gruss,
                wahsaga

                1. Hallo

                  bitte hundert mal schreiben, und danach ein für alle mal merken:
                  ich will nie wieder während des entwickelns eines scriptes fehlermeldungen unterdrücken!
                  ich will nie wieder während des entwickelns eines scriptes fehlermeldungen unterdrücken!
                  ich will nie wieder während des entwickelns eines scriptes fehlermeldungen unterdrücken!
                  ...
                  ich will nie wieder während des entwickelns eines scriptes fehlermeldungen unterdrücken!

                  ja ok werds NIE wieder tun!!!

                  ernsthaft: das ist beim entwickeln absoluter irrsinn, manche fehler wirst du so ewig suchen!

                  ja da hast du recht!

                  idealerweise schreibst du das ganze so:
                  mysql_query(...) od die(mysql_error());
                  damit kriegst du im fehlerfall auch noch eine etwas aussagekräftigere fehlermeldung präsentiert.

                  ja werde es dann jetzt so machen. hast mich überzeugt!

                  Mit freundlichen Grüssen,
                  Patrick

                2. Hallo wahsaga,

                  bitte hundert mal schreiben, und danach ein für alle mal merken:

                  och, das ist doch ganz einfach - einfach kopieren und per strg+c 100mal einfügen (ok, das Zählen wird u.U. etwas mühsam) *scnr*

                  mysql_query(...) od die(mysql_error());

                  ggf. noch den Query mit ausgeben, also z.B. ... or die(mysql_error()." (Query: ".$query.")");

                  damit kriegst du im fehlerfall auch noch eine etwas aussagekräftigere fehlermeldung präsentiert.

                  und mit query siehst du auch gleich noch, ob der Query falsch war :-)

                  Grüße aus Nürnberg
                  Tobias

                  --
                  Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|