• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Anzahl der Datensätze zählen aus einer MySQL Datenbank

Arco2726

Neues Mitglied
Guten abend.

Ich komme einfach nicht weiter.
Ich möchte zählen, wieviele Dantensätze es in meiner Datenbank gibt.
Dazu nutze ich folgenden Code :

Code:
[COLOR=#606060]<?php $abfrage = "SELECT COUNT(id) FROM liste"; 
$ergebnis = mysql_query($abfrage); 
$menge = mysql_fetch_row($ergebnis); 
$menge = $menge[0];  
?[FONT=Verdana]>
[/FONT][/COLOR]


Das funktioniert ja auch.
Jetzt fange ich an zu Filtern.
Erst reichte es aus, das ich nur die Datensätze von den Mitglieder zähle, die in Köln wohnen.

Dafür benutze ich folgenden Code :

Code:
[COLOR=#606060]<?php $abfrage = "SELECT COUNT(id) FROM liste WHERE wohnort ='Köln' "; 
$ergebnis = mysql_query($abfrage); 
$menge = mysql_fetch_row($ergebnis); 
$menge = $menge[0];  
?[FONT=Verdana]>[/FONT]
[/COLOR]

Nun geht´s einen Schritt weiter.

Jetzt muss ich zwei Werte zählen. Einmal den wohnort Köln und nur die Häuser.
hier der Code :

Code:
[COLOR=#606060]
<?php $abfrage = "SELECT COUNT(id) FROM liste WHERE wohnort ='Köln' and art='Haus' "; 
$ergebnis = mysql_query($abfrage); 
$menge = mysql_fetch_row($ergebnis); 
$menge = $menge[0];  
?[FONT=Verdana]>[/FONT][/COLOR]

Jetzt soll das ganze Dynamisch werden.
Sprich aus einem Formular soll der Wohnort und die Art der Immobilie.

dazu verwende ich folgenden CODE :

Code:
[COLOR=#606060]
<?php
[/COLOR]$wohnort = $_POST["wohnort"];
$art        = $_POST["art"];
$count    = "WHERE wohnort ='".$wohnort."' and art='".$art."'";

[COLOR=#606060]
$abfrage = "SELECT COUNT(id) FROM liste $count "; 
$ergebnis = mysql_query($abfrage); 
$menge = mysql_fetch_row($ergebnis); 
$menge = $menge[0];  
?[FONT=Verdana]>[/FONT]
[/COLOR]

Und schon funktioniert das mit dem zählen nicht mehr.
Was mich nur wundert, wenn ich anstelle der zählfunktion die selbe Variable für die ausgabe benutzte, funktionierts.

Kann mir da jemand helfen ?

Gruß

Roland
 
Lass dir $abfrage mal ausgeben, dann solltest Du sehen, ob das zusammengesetzte Statement überhaupt korrekt ist. Führe es im Zweifelsfall direkt in der Datenbank aus (z.B. per phpmyadmin). Die Nutzung von mysql_error() sollte dir auch helfen Probleme einzuschränken.
 
Habe es schon in der Datenbank ausprobiert. Per PHPMYAdmin. Funktioniert alles. Nur wenn ich beim zählen die Parameter in Variabeln stecke, haut es nicht hin. Was mich halt nur wundert ist, das ich die selben Variabeln für die ausgabe nutzen kann.
 
Problem gelöst.

Hier mal der Code :

PHP:
$formular= " where wohnort ='".$_POST["formular"]."' and art= 'Haus'";

ini_set('date.timezone', 'Europe/Berlin');
$timestep = "d.m.Y";
$timesteptime = "G:i";
$datum = date("$timestep");
$uhrzeit = date("$timesteptime");

require('fpdf/fpdf.php');
include 'verbinden.php';

class PDF extends FPDF   // Hier muss ich die Variablen neu bestimmen !!! 
{
// Page header
function Header()
{
$this->SetFont('Times','B',10);
if($this->PageNo()==1)
{
  
$count     = " where wohnort='".$_POST["formular"]."' and art= 'Haus";

$abfrage = "SELECT COUNT(id) FROM liste $count";
$ergebnis = mysql_query($abfrage);
$menge = mysql_fetch_row($ergebnis);
$menge = $menge[0];

$timestep = "d.m.Y";
$timesteptime = "G:i";
$datum = date("$timestep");
$uhrzeit = date("$timesteptime");

       // Hier wird das PDF gefüllt 

Anzahl  : $menge",'0','l');
$this->AddPage();
}
else
   {
   // PDF Füllen
   }
}

// Page footer
function Footer()
{
    
    $this->SetY(-15);
    
    $this->SetFont('Arial','I',16);
    
   $this->Cell(0,10,'Seite '.$this->PageNo().'/{nb}',0,0,'C');
}
}

$pdf=new PDF('l');
$pdf->AliasNbPages();
$pdf->SetMargins(30,15);
$pdf->AddPage();

$abfrage = "SELECT * FROM liste $formular";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))

{
   
     // abfrage aus der Datenbank ....
   
     // PDF füllen .....
  
 }

$pdf->SetDisplayMode (60);   
$pdf->Output();

    }

?>

Ich habe es versucht, wie es threadi meinte.
Habe mir $abfrage in beiden bereichen anzeigen lassen.
Dabei ist mir aufgefallen, das beim zählen die Variable mit $_POST["formular"] nicht übernommen wird.
Bei der Ausgabe schon.

Hätte ich vielleicht dazuschreiben sollen, das ich die Daten in einem PDF ausgebe ?
Dafür benutze ich FPDF.

Alle Variablen die im Bereich "class PDF extends FPDF" liegen, muss ich nochmal zuweisen.
Nur warum ?

Dann zu SQL-Injection.
Habe ich mal Google und Wikipedia gefragt. Wuste also garnicht was das ist.
Nun mache ich mir so langsam gedanken.

Sollte ich dann anstelle von :

PHP:
$count = " where wohnort='".$_POST["formular"]."' and art= 'Haus";
besser folgendes verwenden :
PHP:
$count     = " where wohnort='".mysql_real_escape_string($_POST['formular'])."' and art= 'Haus";

Habe mir aus von Wikipedia abgeschaut.

Mir raucht nun der Kopf.
Ich hoffe, ich nerve euch nicht.

Gruß

Roland
 
Ja, das solltest Du so machen. Besser wäre noch:

PHP:
$formular = $_POST['formular'];
$count     = " where wohnort='".mysql_real_escape_string($formular)."' and art= 'Haus";
 
Erstmal danke an euch beiden. Das mit der SQL-Injection war mir wirklich neu. Ich befasse mich ja auch erst seit kurzem mit php und sql.
Aber ich verstehe immer noch nicht, warum ich in meinem script zweimal die Variablen mit $_POST["formular"] zuweisen muss ?
Wir der Bereich "class PDF extends FPDF" als eine art eigenständiger bereich behandelt ?
 
ich rufe doch zweimal mit $_POST["formular"] die information aus der ersten seite ab.
Einmal ganz zu anfang von meinem Code. Da stecke ich die Information in die Variable $formular.
Dann nach "class pdf ..." rufe ich die Informationen nochmal von der ersten Seite ab und stecke die Informaionen dann in die Variable $count.
Beide Variablen habe den selben Inhalt. Würde ich nun hergehen und für das zählen der Datensätze $formular benutzen, funktioniert das ganze nicht.
Nur würde ich gerne wissen warum.
 
Ach, jetzt verstehe ich. Dein Quellcode auf der vorherigen Seite ist ab einer Zeile fehlerhaft, daher verliert man dort etwas die Übersicht.

Merke: Eine Variable muss auch innerhalb einer Klasse erst definiert werden. Und eine Variable innerhalb einer Klasse kann nicht außerhalb genutzt werden, außer sie ist als public definiert wurden und wird entsprechend abgerufen.

Beispiel

PHP:
$variable = "hier ein inhalt";
class Beispielklasse
{
 public function examplefunction() {
  $variable = "hier ein anderer Inhalt";
  return $variable;
 }

$exampleclass = new Beispielklasse;
echo "1: ".$variable."\n";
echo "2: ".$exampleclass->examplefunction();

Ansonsten solltest Du dir mal Klassen-Anleitungen anschauen, dann dürfte dir das klar werden.

Wenn Du also den Wert nur 1 Mal auslesen willst, dann solltest Du den Wert außerhalb der Klasse auslesen und dann an die Funktion innerhalb der Klasse übergeben. Mit dem was Du vorhast geht das jedoch nicht so einfach, da die Header()-Funktion der FPDF-Klasse offenbar nicht von dir sondern von irgendeiner anderen Funktion aufgerufen wird.
 
Achso ....
Man da habe ich ja heute einiges gelernt :mrgreen:. Das mit den Klassen werde ich nicht so schnell vergessen. Das Problem hat mich einige Stunden gekostet.

Gruß

Roland
 
Zurück
Oben