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 ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken 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 01.09.2003, 09:02:19
Trialrider Trialrider ist offline
Anfänger
 
Registriert seit: May 2003
Ort: Oschatz/Sa.
Beiträge: 124
Benötige Hilfe für dyn. Abfrage mittles PHP

Hallo Leute,

auch von mir mal wieder eine Frage um Hilfe.

Zur Zeit arbeite ich an einer dynamischen Abfrage von Datensätzen. Das ganze sieht in etwa so aus:

Auf der Seite gibt es 1 Dropdown-Feld (status["","offen","erledigt"]), 2 Inputboxen (woche, jahr) und 1 Submit-Button (Filter).

Wenn alle 3 Felder leer sind gibt es die volle Abfrage "select * from chinadb.shiplist). Entsprechend den benötigten Filtern soll diese Abfrage aber mit "where" usw, ergänzt werden.

Das Grundprinzip ist mir auch klar aber ich bekomme es nicht umgesetzt. Meine anderen dyn. Abfragen helfen mir leider auch nicht weiter...

Mein bisheriger Ansatz:
PHP-Code:
include("../../_func_/db_verbindung_daten.php");
//Schauen ob überhaupt Sätze vorhanden
$sql_test "select * from chinadb.shiplist";
$res_test mysql_query($sql_test$db_Verbindung);
$anz_test mysql_num_rows($res_test);
  
if (empty(
$anz_test))
 {
  
$Ergebnis "Keine Datensätze vorhanden.";
 }
 else
 {
  
//Hier kommen die Filterwerte rein
  
$sql_sel = array();
  if (isset(
$_POST["Filter"]))
   {
    if (!empty(
$_POST["status"])) array_push($sql_sel$_POST["status"]);
    if (!empty(
$_POST["woche"]))  array_push($sql_sel$_POST["woche"]);
    if (!empty(
$_POST["jahr"]))   array_push($sql_sel$_POST["jahr"]);
   }

  
//Die allg. Abfrage
  
$sql_liste  "select * from chinadb.shiplist";

  
//Damit werden die einzelnen Werte aus $sql_sel verknüpft
  
if (!empty($sql_sel)) {$sql_binder " or "$sql_liste .= " where ";} else $sql_binder "";
 } 
Schonmal vielen Dank für Eure Hilfe.

Trialrider
__________________
Yesterdays, Todays, Tomorrows - Kicking off your sorrows!
Mit Zitat antworten
  #2  
Alt 01.09.2003, 13:45:23
diver-network diver-network ist offline
Junior Member
 
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
Hi Trialrider,

ich denke mal, Dein Ansatz ist falsch.
Du willst eine dynamische Abfrage machen, schreibst aber den SQL- Befehl "hart" in Dein Skript und führst ihn aus, bevor Du die WHERE- Bedingungen drin hast.

Daher mein Vorschlag:

- Überprüfe, ob alle Felder leer sind, falls Ja: SELECT *...
falls Nein:
$strSQL = "SELECT * FROM chinadb.shiplist WHERE ";
Schleife, in der Du die Felder abfragst, darin:
$strSQL .= "$feld1 LIKE $wert1 OR ";

Nach Ende der Schleife mußt du nur noch das letzte OR entfernen und kannst dann die Abfrage an die DB senden.

HTH,

Andy
__________________
Delphine, Wale, Orcas und mee(h)r:
tauchen in Alor/Indonesien
http://www.alor-dive.com
Mit Zitat antworten
  #3  
Alt 01.09.2003, 14:14:02
Trialrider Trialrider ist offline
Anfänger
 
Registriert seit: May 2003
Ort: Oschatz/Sa.
Beiträge: 124
Hi diver,

schön, dass sich dazu jemand äußert.

Was hasrt du gegen eine asl Basis festgelegte SQL-Anweisung. Verwendet wird sie doch erst am Ende mit "mysql_query($sql_liste, $db_Verbindung)".

Das Einzige, an diese SQL-Anweisung sollen so wie vorhanden die Werte aus "status" und/oder "woche" und/oder "jahr" angehangen werden. Sind diese Werte nciht vorhanden, bleibt die Anweisung unverändert.

Das Problem selber ist doch nur die Schleife, um die Anweisung zu erweitern... Allerdings habe ich nochmal gekramt und werde es wohl so oder ähnlich machen:
PHP-Code:
      $Branche explode (" "$Branche);
      
$Branche $Branche[0];

      
$Kriterien_Kunde = array();
   
      if (!empty(
$Kunde)) array_push ($Kriterien_Kunde"Kunde LIKE '$Kunde'");
      if (!empty(
$Firma)) array_push ($Kriterien_Kunde"Firma LIKE '$Firma'");
      if (!empty(
$Branche)) array_push ($Kriterien_Kunde"Branche LIKE '$Branche'");

      if (!empty(
$DR_K)) array_push ($Kriterien_Kunde"DR = 'Y'");
      if (!empty(
$MA_K)) array_push ($Kriterien_Kunde"MA = 'Y'");
      if (!empty(
$KN_K)) array_push ($Kriterien_Kunde"KN = 'Y'");
      if (!empty(
$SG_K)) array_push ($Kriterien_Kunde"SG = 'Y'");
      if (!empty(
$RG_K)) array_push ($Kriterien_Kunde"RG = 'Y'");
      if (!empty(
$GG_K)) array_push ($Kriterien_Kunde"GG = 'Y'");

      if (
count($Kriterien_Kunde)!=0)
       {
         
$sql "select * from kunden where ";
         for (
$x=0$x<count($Kriterien_Kunde); $x++)
          {
          
$sql .= $Kriterien_Kunde[$x];
          if (
$x+1<count($Kriterien_Kunde)) $sql .= $Binder;
         }
       }
       else
       {
        
$sql "select * from kunden";
        } 
...ich glaub das Prinzip ist so in etwa nutzbar.

Bin trotzdem jederzeit für Tipps offen.

Viele Grüße, Trialrider

ach und: DANKE
__________________
Yesterdays, Todays, Tomorrows - Kicking off your sorrows!
Mit Zitat antworten
  #4  
Alt 01.09.2003, 15:07:04
Trialrider Trialrider ist offline
Anfänger
 
Registriert seit: May 2003
Ort: Oschatz/Sa.
Beiträge: 124
Hello again,

Bezüglich dynamischer Erweiterung der Anweisung habe ich noch eine Nuss, die ich nciht geknackt bekomme:

eta = "13.07.2003" Aber in Formular nur Eingabe von Jahr benötigt/gewünscht: $_POST['jahr'] = "2003".

Wie kann ich nun diesen Wert in Feld "eta" ermitteln, das gane soll dann z.Bsp. so aussehen:

=>Selektiere alle Sätze in deren Feld "eta" der String "2003" enthalten ist.
=>translate it into SQL-Syntax, please.

Könnt ihr mir da auch weiterhelfen?

Vielen Dank, Trialrider
__________________
Yesterdays, Todays, Tomorrows - Kicking off your sorrows!
Mit Zitat antworten
  #5  
Alt 01.09.2003, 15:55:58
diver-network diver-network ist offline
Junior Member
 
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
Hi Trialrider,

ich hab nichts gegen die als Basis feststehende SQL- Anweisung. Was ich nicht verstanden habe ist, warum Du diese schon ganz oben ausführst ($res_test = mysql_query($sql_test, $db_Verbindung)).

Das kam mir komisch und unnötig vor. Ansonsten hab' ich vermutlich Deine Frage etwas mißverstanden. Sorry.

Mit der SQL- Syntax kan nich Dir hoffentlich helfen:

SELECT YEAR(datums_spalte) FROM tabelle
bzw. SELECT.... WHERE YEAR(datums_spalte) = 2003 [weitere Bedingungen]

Die 2003 mußt Du, denk' ich mal, über string- funktionen raus"schneiden".


HTH,

Andy
__________________
Delphine, Wale, Orcas und mee(h)r:
tauchen in Alor/Indonesien
http://www.alor-dive.com
Mit Zitat antworten
  #6  
Alt 02.09.2003, 08:57:39
Trialrider Trialrider ist offline
Anfänger
 
Registriert seit: May 2003
Ort: Oschatz/Sa.
Beiträge: 124
Moin, diver-network,

tja, bloß gut, dass ich den Code kommentiert habe... :)

Nein, für was soll ich denn den ganzen Code durchlaufen lassen, wenn am Ende doch keine Sätze in der Tabelle stehen. Deswegen "$res_test=..." und danach erst die eigentliche Routine.

Mit "YEAR()" werde ich mal probieren, wie meinst du das mit dem "rausschneiden"? Kann momentan nicht 1 und 1 zusammenaddieren...

Viele Grüße und besten Dank, Trialrider
__________________
Yesterdays, Todays, Tomorrows - Kicking off your sorrows!
Mit Zitat antworten
  #7  
Alt 02.09.2003, 10:34:13
diver-network diver-network ist offline
Junior Member
 
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
Hi Trialrider,

daß Du vor durchlaufen des Codes überprüfst, ob wirklich Datensätze da sind ist ja ok. Da ich aber davon ausgehe, daß Du immer mindestens einen Datensatz in der Datenbank haben wirst ist dieser Request an die DB in meinen Augen überflüssig und verlängert die Skriptlaufzeit.

Aber egal, kann ich aus der Ferne auch nicht so beurteilen und muß man selber testen und danach entscheiden. Falsch ist es auf jeden Fall nicht ;-)

Da ich davon ausgehe, daß Du als Eingabe eta = "13.07.2003" bekommst, davon aber nur den Teil "2003" benötigst habe ich salopp "ausschneiden" gesagt. Als Funktion ist natürlich $eta2 = substr($eta,-4) gemeint.

Ich hoffe, ich habe jetzt alle Klarheiten beseitigt ;-) Falls nicht versteh ich irgendwas falsch und hoffe, daß Dir jemand anderes besser helfen kann.

Gruß,

Andy

P.S.: Eventuell interessante MySQL- (Such-) Funktionen für Dich könnten auch noch WEEK() (gibt die Woche aus) oder YEARWEEK() (Woche plus Jahr im Format jjjjww, ACHTUNG: es kann auch Woche 53 geben!)) sein.
P.S.S.: SUBSTRING() kannst Du auch als MySQL- Funktion anwenden. Wie da aber die Performance im Gegensatz zu PHP ist kann ich Dir leider nicht sagen.
__________________
Delphine, Wale, Orcas und mee(h)r:
tauchen in Alor/Indonesien
http://www.alor-dive.com
Mit Zitat antworten
  #8  
Alt 02.09.2003, 10:46:02
Trialrider Trialrider ist offline
Anfänger
 
Registriert seit: May 2003
Ort: Oschatz/Sa.
Beiträge: 124
Besten Gruß zurück,

dass mit dem "eta" ist so eine Sache für sich... Mit dem Ausschneiden geht nicht so umzusetzen, da der User ja auch nciht unbedingt weiß, zu welchen Terminen die Lieferungen (beim Anzeigen oder Aktualisieren) da sind. Also gibt er nur das "jahr" an. Beim Erfassen als *.csv oder manuell gibt er ein: "Tag.Monat.Jahr" (ich hoffe dass er es immer so macht :))

In der Tabelle verwende ich für "eta" varchar(). Also habe ich mir eine Fuction "date2mysql()" gebastelt, die unser Datumsformat ins MySQL'sche ("Year-Month-Day") ummodelt, bevor es in die Tabelle eingetragen wird. [Muss nun nur noch das Gegenstück basteln...]

Damit kann ich mit "YEAR(eta)='2003'" arbeiten. Danke nochmal für den Tipp, habe bis jetzt nicht weiter mit MySQL-Datumsfunktionen tun müssen.

Hoffentlich siehts du auch noch den roten Faden.

Besten Dank und viele Grüße, Trialrider
__________________
Yesterdays, Todays, Tomorrows - Kicking off your sorrows!
Mit Zitat antworten
  #9  
Alt 02.09.2003, 13:42:11
diver-network diver-network ist offline
Junior Member
 
Registriert seit: Apr 2003
Ort: TÜ
Beiträge: 337
Hi Trialrider,

wenn es für Dich eine Möglichkeit gibt, dem User das Eingabeformat vorzuschreiben (eventuell mit 3 separaten Eingabefeldern für tt,mm,yyyy) wäre das für Dich und das Skript natürlich sicherer.

Eine weitere möglicherweise interessante MySQL- Version zur Datumsformatierung ist DATE_FORMAT(datum,format).

Wenn Dein User nicht weiß, wann die Lieferung da ist würde ich ihm anbieten, wochenweise zu suchen (mit My-SQL über YEARWEEK oder WEEK). Das sollte auch im Hinblick auf die Performance einiges bringen, da ja nicht mehr alle Datensätze zurück geliefert werden und verbessert zudem die Übersicht für den User.

Aber sind natürlich nur Vorschläge, die man ja auch im Rahmen einer Erweiterung der Anwendung mal machen kann.


Gruß,

Andy
__________________
Delphine, Wale, Orcas und mee(h)r:
tauchen in Alor/Indonesien
http://www.alor-dive.com
Mit Zitat antworten
  #10  
Alt 02.09.2003, 14:18:25
Trialrider Trialrider ist offline
Anfänger
 
Registriert seit: May 2003
Ort: Oschatz/Sa.
Beiträge: 124
Hi diver,

so...dass mit der dynamischen Abfrage klappt. Fin'ste hier:Abfrage

Würde mich freuen, wenn du mir mal noch weiter helfen könntest.
Folgendes gehört hier noch hin:

Du wirst sicher über die Index gestolpert sein - Der User soll da mal auf einen Datensatz klicken und dann geht ein neues Fenster auf, in dem er den Satz mit dem entsprechenden Index updaten kann...

Ich hoffe, du kannst nachvollziehen, wo ich hinarbeite...

Gruß, Trialrider

P.S.: Hätte ncihts dagegen, wenn du o.a. Skript mal durchguckst und aus deiner Sicht mal optimieren würdest. Ich bin hier Firma-Einzelkämpfer und würde gern mal wissen/sehen, wie andere so was umsetzen würden.

MfG

Edit 1:
-------
Habe mal weiter gemacht hinsichtl. der Update-Geschichte. Mit der Ausgabe der Ergebniszeilen wird an jede Zeile ein "onclick" gehangen, das dann einen Zeilen-Index enthält bzw. weitergibt. Nun muss ich nur noch die Entsprechenden Daten der jeweiligen Zeile weiterschieben. Ich denke da an Arrays o.ä. Mal sehen, was mir einfällt.
__________________
Yesterdays, Todays, Tomorrows - Kicking off your sorrows!

Geändert von Trialrider (02.09.2003 um 14:57:52 Uhr)
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


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:49:40 Uhr.


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


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