-
Hallo!
Ich habe eine DB erstellt wo ich mittels einen php/html Formular Daten einfügen kann.Dies funktioniert auch super.
So nun möchte ich zum einfachen auslesen der Daten wieder ein php/html Formular erstellen und nun steh ich gerade mit meinem wissen so ziemlich an.
Meine DB sieht wie folgt aus:
Spalte1->tester1, tester2, tester3
Spalte2->Firma1, Firma2, Firma3
Spalte3->Standort1, Standort2, Standort3
Spalte4->Datum1, Datum2, Datum3
Spalte5->Uhrzeit1, Uhrzeit2, Uhrzeit3
Spalte6->taetigkeit1, taetigkeit2, taetigkeit3
Mit meinem Formular zum auslesen dieser Daten hab ich mir vorgestellt das ich die Auswahl mit Auswahllisten mache.
Ich möchte das ich z.B. auswählen kann
Bitte wählen Sie einen Benutzer aus: (tester1)
Bitte wählen Sie eine Firma aus: ()
Bitte wählen Sie einen Standort aus: ()
...
nun sollen alle einträge ausgegeben werden wo tester1 vorkommt z.B.:
tester1->Firma1->Standort2->Datum1->Uhrzeit1->taetigkeit2
weiters sollte es möglich sein mehrere Auswahlkriterien zu treffen z.B.:
Firma3-Standort3-Datum2
nun sollen alle einträge ausgegeben werden wo die 3 Kriterien vorgekommen sind z.B.:
tester1->Firma3->Standort3->Datum2->......
tester3->Firma3->Standort3->Datum2->.....
So nun hab ich mir gedacht dies mit if/case anweisung zu lösen was ich aber nicht sehr für vorteilhaft halte.
Hab mir auch schon das Affenformular angeschaut aber ich weis nicht genau ob dies das richtige ist.
könnte mir vielleicht jemand Bitte tipps geben wie ich das am besten lösen könnte.
Vielen Dank schonmal im Voraus
Gruß
-
Im SQL das du an die DB schickst um die Daten abzurufen einen WHERE-Teil einabauen
Code sql:1 2 3 4 5
SELECT * FROM myTable WHERE spalte1 = 'wert1' AND spalte2 = 'wert2'
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Hallo!
Danke für deine Antwort!
Vielleicht hab ich meine Frage noch etwas blöd gestellt.
Bei den Auswahllisten sollte im prinzip nur nach dem gesucht werden was ich auch ausgewählt habe.
Bitte wählen Sie einen Benutzer aus: (tester1)
Bitte wählen Sie eine Firma aus: (Firma2)
Bitte wählen Sie einen Standort aus: ()
jetzt soll nur das angezeigt werden was meinen Auswahlkriterien entspricht.:
tester1->Firma2->standort1->...
tester1->Firma2->Standort3->...
...
ich hab mal ein script geschreiben das so ähnlich funktioniert nur kann ich eben nur eine Auswahl treffen:
PHP-Code:<?php
require("logintemplate.php");
require("index.php");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Listing 18.9</title>
</style>
</head>
<body>
<div>
<h1>Kundenliste mit verbessertem Formular</h1>
<?php
if(!isset($_REQUEST['set'])) {?>
<form action="<?php $PHP_SELF ?>" method="post">
<input type="hidden" name="set" value="TRUE" >
<p><b>Suche nach:</b>
<select size="1" name="spalte">
<option value="Name">Name</option>
<option value="Firma">Firma</option>
<option value="Standort">Standort</option>
<option value="Datumv">Datum</option>
</select>
<b>Suchbegriff:</b>
<input type="text" name="suche" size="40" /></p>
<p><input type="submit" value="Suche starten..." /></p>
<?php
}
else {
if($_REQUEST['suche'] == "")
$sql = " SELECT * FROM projekte;";
else
$sql = "SELECT * FROM projekte WHERE " . $_REQUEST['spalte'] .
" LIKE '" . $_REQUEST['suche'] . "%';";
$erg = @mysql_query($sql);
if($erg) {
if(mysql_num_rows($erg) <= 0) { //Abfrage ob das Ergebniss der Datenbankabfrageungleich 0 ist dann echo
echo "<p>Leider konnte kein Datensatz in der Kategorie<br /><b>"
. strtoupper($_REQUEST['spalte']) . "</b> mit dem Suchbegriff <b>"
. strtoupper($_REQUEST['suche']) . "</b> gefunden werden!</p>";
unset($_REQUEST['set']);
echo "<p><a href=\"" . $_SERVER['PHP_SELF'] . "\">Zurück zum Formular</a></p>";
}
else {
echo "<table border=3 bgcolor='#FFCC33'>";
echo "<tr>";
for($i=0; $i<mysql_num_fields($erg); $i++) { //mysql_num_fields() liefert die Anzahl der Felder in der Ergebnismenge, die mit dem Parameter Ergebnis-Kennung angegeben wurde.
$feld = mysql_field_name($erg, $i);
echo "<th>". ucfirst($feld) . "</th>"; //string ucfirst ( string $str ) Wandelt das erste Zeichen von str in einen Großbuchstaben um, wenn es ein Zeichen des Alphabets ist, und gibt den veränderten String zurück.
}
echo "</tr>";
while($row = mysql_fetch_row($erg)) {
echo "<tr>";
for($i=0; $i<mysql_num_fields($erg); $i++)
echo "<td>" . $row[$i] . "</td>";
echo "</tr>";
}
echo "</table><p>";
unset($_REQUEST['set']);
?><a href="test.php<?php session::showLink(true); ?>">Zurück zum Formular</a></p><?php
}
}
else
echo "<h5>Es konnten keine Datensätze gefunden werden.</h5>";
}
?>
</div>
</body>
</html>Geändert von Larnhof (15.02.10 um 14:43 Uhr)
-
Meisnt du sowas?
Ups, jetz verseth ich.. änderung meiens Beitrags folgtPHP-Code:$spalte = $_POST['spalte'];
$suche = $_POST['suche'];
$sql = "SELECT *
FROM projekte
WHERE {$spalte} LIKE '%{$suche}%'";
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Das was yaslaw geschrieben hat ist genau das, was du meinst.
Du suchst nach den Werten, die durch das Formular ausgegeben werden und gibst diese dann aus.
Zur Erklärung:
Code sql:1 2 3 4 5
SELECT * FROM myTable WHERE spalte1 = 'wert1' AND spalte2 = 'wert2'
SELECT * FROM myTable *Da sagst du, was er alles aus der angegebenen Tabelle myTable auslesen soll.
WHERE
spalte1 = 'wert1' *Erste Angabe was die Voraussetzung zur Ausgabe ist.
AND spalte2 = 'wert2' *Zweite Angabe was die Voraussetzung zur Ausgabe ist.
Und das kannst du beliebig oft fortführen, bis du alle Filterpunkte (Bedingungen) gesetzt hast.Mit freundlichen Grüßen
Sascha Grohnert
-----
Falls dein Problem gelöst ist, einmal bewerten und dein Beitrag auf Erledigt setzen..
Ich beantworte grundsätzlich keine Anfragen per PN, dafür gibt es das Forum.
"Ist der Ruf erst ruiniert, lebt's sich gänzlich ungeniert."
Zitat von Wilhelm Busch
-
Er sucht eine elgante Lösung um die WHEREs zu setzen, je nachdem ob sie abgefüllt wurden oder nicht.
Ich hab hier mal ein kleines Beispiel erstellt.
Code PHP:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
<?php // Diese Zeile simuliert die Post-Übergabe eines Formulars $_POST = array( 'name'=>'user', 'firma'=>'GMBH', 'standort'=>'', 'datumv' =>'15.2.2010', 'unbekanntesFeld' => 'irgend was unerwünschtes'); /** * Funktion um aus den Werten je nach Datentyp einen richtigen SQL-WHERE - Teil zu bilden. */ function createWherePart(&$wert, $spalte){ switch($GLOBALS['allowedPost'][$spalte]){ case 'date': //TODO: Format noch anpassen. Ist nicht umbedingt MySQL-Konform $wert = vsprintf('%02d-%02d-%04d', explode('.', $wert)); break; case 'number': //Bei Number braucht es keine Formatierung "$spalte = 123" break; default: $wert = "'{$wert}%'"; } $wert = "{$spalte} = {$wert}"; } //Erwartete Felder und ihr Datentyp $allowedPost = array( 'name' => 'string', 'firma' => 'string', 'standort' => 'string', 'datumv' => 'date'); //Array erstellen mit allen übergebenen Variablen die in $allowedPost definiert sind //Mehr dazu: [url]http://wiki.yaslaw.info/wikka/PhpPost2Var[/url] //array_intersect_key entfernt nicht definierte Post-Values. In meinem Beipsiel 'unbekanntesFeld' //array_filter ohne Filterfunktion filter alle leeren Einträge aus. in diesem Fall 'standort' $wheres = array_filter(array_intersect_key($_POST, $allowedPost)); //Alle Wheres formatieren array_walk($wheres, 'createWherePart'); //Alle Wheres mit 'AND' zusammenfügen ... $where = implode(' AND ', $wheres); //... und ggf den Befehl WHERE voranstellen if($where) $where = "WHERE {$where}"; //SQL erstellen $sql = "SELECT * FROM projekte {$where}"; echo $sql; ?>
Geändert von Yaslaw (15.02.10 um 15:43 Uhr)
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Danke djbergo für deine Antwort!
naja es wird denk ich mal ein sehr sehr lange Code da ich ja sehr viele Bedingung und Abhängigkeiten habe.
viel. ist meine Beschreibung des Problems noch nicht genau aber ich versuch es am besten rüber zu bringen.
viel. hilft das:
es soll so ähnlich werden wie z.B. Flugdestinationen zu finden.
welches Land: Kroatien
so jetzt bekomme ich alles ausgegebn was mit der Spalte Kroatien zu tun hat
Kroatien->Krk->am 15.02.2010->von Berlin->192€->....
Kroatien->Dubrovnik->am 09.07.2010->von München->250€->....
wenn ich jetzt mehr Kriterien habez.B.:
welches Land: Italien
welche Region: Sizilien
welches Datum: 15.02.2010
so jetzt sollen alle Datensätze mit diesen Kriterien angezeigt werden
italien->Sizilien->am 15.02.2010->von Berlin->192€->....
italien->Sizilien->am 15.02.2010->von München->210€->....
oder
welcher Preis: >250€
Abflughafen: Köln
so jetzt sollen alle Datensätze mit diesen Kriterien angezeigt werden
251€->Köln->Bulgarien->Varna->24.12.2010
269€->Köln->Österreich->Innsbruck->31.07.2010
-
@yaslaw
Ja genau so etwas hab ich gemeint!
werd ich mal ausprobieren und anpassen!!
DANKE!!
-
Guten Morgen!!

@yaslaw
Dein Script läuft so weit ganz gut!ist echt Total super *RESPEKT*!
Nur eins bekomm ich nicht ganz hin und zwar ist es die Ausgabe.
Viel. steh ich auch total auf der Seife aber wenn ich dein Script so ausführe bekomme ich folgende ausgabe:
SELECT *FROM projekte 'WHERE name = 'user%' AND firma = 'GMBH%' AND datumv = 15-02-2010'
dies würde ja auch richtig sein aber ich bekomm keine Daten
hab es jetzt auch schon so probiert:
Ich versteh nicht ganz warum keine Abfrage passiert bzw. ich keine Ausgabe der Daten bekomme.PHP-Code:<?php
$spalte = $_POST['Name']; //erzeugen der Variablen.
$spalte = $_POST['Firma'];
$spalte = $_POST['Standort'];
$spalte = $_POST['Datum'];
function createWherePart(&$wert, $spalte)
{
switch($GLOBALS['allowedPost'][$spalte]) //Mit der Funktion switch lassen sich abhängig vom Inhalt einer Variablen verschiedene Code-Abschnitte ausführen
{
case 'date':
$wert = vsprintf('%02d-%02d-%04d', explode('.', $wert));
break;
case 'number':
//Bei Number braucht es keine Formatierung "$spalte = 123"
break;
default:
$wert = "'{$wert}%'";
}
$wert = "{$spalte} = {$wert}";
}
//Erwartete Felder und ihr Datentyp
$allowedPost = array(
'Name' => 'string',
'Firma' => 'string',
'Standort' => 'string',
'Datumv' => 'date');
//Array erstellen mit allen übergebenen Variablen die in $allowedPost definiert sind
//array_intersect_key entfernt nicht definierte Post-Values. In meinem Beipsiel 'unbekanntesFeld'
//array_filter ohne Filterfunktion filter alle leeren Einträge aus.
$where = array_filter(array_intersect_key($_POST, $allowedPost));
//Alle Wheres formatieren
array_walk($where, 'createWherePart');
//Alle Wheres mit 'AND' zusammenfügen ...
$where = implode(' AND ', $where);
//... und ggf den Befehl WHERE voranstellen
if($where) $where = "WHERE {$where}";
//SQL erstellen
$sql = "SELECT * FROM projekte {$where}";
$erg = @mysql_query($sql);
echo "<table border=3 bgcolor='#FFCC33'>";
echo "<tr>";
for($i=0; $i<mysql_num_fields($erg); $i++) //mysql_num_fields() liefert die Anzahl der Felder in der Ergebnismenge, die mit dem Parameter Ergebnis-Kennung angegeben wurde.
{
$feld = mysql_field_name($erg, $i);
echo "<th>". $feld . "</th>";
}
echo "</tr>";
while($row = mysql_fetch_row($erg))
{
echo "<tr>";
for($i=0; $i<mysql_num_fields($erg); $i++)
echo "<td>" . $row[$i] . "</td>";
echo "</tr>";
}
echo "</table><p>";
?>
Viel. denke ich auch schon wieder zu kompliziert.
Vielen Dank
Gruss LarnhofGeändert von Larnhof (17.02.10 um 08:12 Uhr)
-
17.02.10 08:19 #10
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Ich steig jetzt mal mitten drin ein ohne mir alles vorherige durchzulesen.
Code :1
SELECT *FROM projekte 'WHERE name = 'user%' AND firma = 'GMBH%' AND datumv = 15-02-2010'
Also ich weiß nicht welche Datenbank du verwendest aber wenn es mySQL ist, ist die Abfrage meiner Meinung nach so nicht richtig.
Code :1
SELECT * FROM projekte WHERE name LIKE 'user%' AND firma LIKE 'GMBH%' AND datumv = '15-02-2010'
So müsste es klappen.Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Hallo tombe!
Danke für deine Antwort!
1. nur für mich als Erklärung: warum kann es so nicht funktionieren
2. Ich habe es versucht so zu machen!bekomme jetzt zwar eine Ausgabe aber von den gesamten Einträgen.und eine Fehlermeldung: Warning: Wrong parameter count for implode() in
Ich hab bereits nach der Fehlermeldung gesucht aber noch nichts genaues gefunden!
DANKE
Gruß
Larnhof!Geändert von Larnhof (17.02.10 um 08:52 Uhr)
-
zu 1)
= vergleicht genau gleich. Like vergleicht mit Platzhalter
Wenn du mit LIKE arebiten willst, solltest du die Funktion etwa so anpassen
Code PHP:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
function createWherePart(&$wert, $spalte){ switch($GLOBALS['allowedPost'][$spalte]){ case 'string': $wert = "{$spalte} LIKE '{$wert}'"; break; case 'date': //TODO: Format noch anpassen. Ist nicht umbedingt MySQL-Konform $wert = "{$spalte} =". vsprintf('%02d-%02d-%04d', explode('.', $wert)); break; case 'number': //Bei Number braucht es keine Formatierung "$spalte = 123" default: $wert = "'{$wert}'"; } $wert = "{$spalte} = {$wert}"; }
Zu 2)
Die Fehlermeldung ist wahrscheinlich in der Zeile
Ergo wird da $where nicht sauber gefüllt sein.PHP-Code:$where = implode(' AND ', $where);
Das kann passieren wenn dein Code nicht stimmt oder wenn du keine Variablen übergibts (mittels $_POST)Geändert von Yaslaw (17.02.10 um 09:32 Uhr) Grund: break nach 'number' entfernt
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
17.02.10 09:00 #13
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Wenn du mit Jokern "%" arbeitest, kannst du nicht mit "=" vergleichen sondern musst dafür LIKE nehmen.
Wenn du bein Namen jetzt "Schmid" angibst, werden alles gefunden die "Schmid", "Schmidt", "Schmidchen", ... heißen. Wenn du genau nach dem eingegebenen Namen suchen willst, dann musst du mit schon mit dem "=" arbeiten. Dafür aber das "%" weglassen.
Dann würde es so aussehen:
Code :1
SELECT * FROM projekte WHERE name = 'user' AND firma = 'GMBH' AND datumv = '15-02-2010'
Der Fehler hat nichts mit der Abfrage zu tun. Da musst du mal überall da prüfen wo du die IMPLODE Funktion im einsatz hast. Da müsste dann der Fehler stecken.Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
-
Hallo yaslaw!!
Echt GROSSES DANKE
Also es funktioniert soweit.
Nur wenn ich jetzt eine Auswahl treffe zum Bsp.:
Auswahl Name: User
bekomme ich in der Ausgabe alle Namen ausser User sollte aber gerad umgekehrt sein.
müsste hier ein != ungleich einbauen
Die Auswahl per Datum funktioniert auch noch nicht kann es sein das es noch an der Formatierung hängt oder an den Platzhalter?
@tombe
Auch dir en GROSSES DANKE!!
Hab etwas zu komplizeirt gedacht und Zusammenhang nicht gleich verstanden was aber eigentlich einfach ist
DANKE
Gruß
Larnhof
-
17.02.10 09:29 #15
- Registriert seit
- Sep 2004
- Ort
- Möglingen (BaWü)
- Beiträge
- 3.109
Gibt doch mal den Wert von $sql am Bildschirm aus. Dann siehst du wie die Abfrage genau aussieht und du kannst am schnellsten nachvollziehen wo der Fehler liegt (geht mir zumindest immer so).
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
Ähnliche Themen
-
Formular abfrage
Von eXecutriX im Forum PHPAntworten: 3Letzter Beitrag: 27.05.05, 19:08 -
Formular Abfrage mit 2 Feldern
Von fimpelchen im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 04.01.05, 00:52 -
Abfrage der IP in Formular
Von ayshe im Forum HTML & XHTMLAntworten: 1Letzter Beitrag: 23.06.04, 00:20 -
PHP Formular:: (if Abfrage)
Von Gangsterneo im Forum PHPAntworten: 2Letzter Beitrag: 18.05.04, 09:33 -
DB Abfrage mit PHP Formular
Von haloki im Forum PHPAntworten: 1Letzter Beitrag: 15.05.04, 11:04



2Danke

Zitieren



Login






[PHP][Snippet] Array zu XML konvertieren