• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

PHP Ausgabe/Abfrage über mehrere Spalten in Abhängigkeit zueinander

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.332
Ort
Topkekistan
Ja, doofer Titel, ich weiß. Mir ist aber nichts besseres eingefallen :D

Habe eine Datenbank, voll mit Werten wie es sich gehört. Viele Spalten enthalten nur ein "X" für True, andere eine Zahl (Leer = nicht vorhanden, Zahl > 0 = Anzahl von z.B. Aufzügen oder was weiß ich). Dies frage ich per Array ab:

[src=php]while ($zeile = mysql_fetch_array($erg, MYSQL_ASSOC)) {
$filter = array('wert1' => 'X', 'wert2' => 'X','wert3' => 'X', 'wert4' => $zeile['wert4'], 'strom' => $zeile['strom']);
foreach (($fields ) as $name => $value) {
if (($value == 1) or ($value == 'X')) {
echo '<img src="http://www.domain.de/symbole/'.$name.'.png">';
}
if (($value > 1) and ($value != 'X')) {
echo $value.' <img src="http://www.domain.de/symbole/'.$name.'.png">';
}
}
}[/src]
Hintergrund ist der das ich aus einer Datenbank die vornehmlich für Print gedacht ist, Fließtext bzw. die Vorlage für ein eBook generiere. Dazu gibt es hier nämlich keine Software, die jetzige Software ist zu alt um eBook-Fähiges Material zu generieren.

Im oberen Fall handelt es sich um eine Auflistung von Werten. Ein mal Welche wo nur das Symbol auftaucht, andere wo ein Symbol + ein Zahlenwert auftaucht. Klappt so weit alles. Die Symbole heißen so wie in dem Array als ersten Wert angegeben.

Leider habe ich nun einen Sonderfall bei Zwei Werten. Diese sind nämlich nicht nur von zwei Werten abhängig sondern beziehen sich auch noch zwei zusätzliche Spalten. Es handelt sich hier um Strom und Stromstärke. Ich habe also folgendes Szenario:

Ist der Value also = 1 oder = X so wird nur das Symbol ausgegeben. Ist der Value größer 1 oder ungleich X wird das Symbol mit dem Wert ausgespuckt. Was ist nun aber wenn ich zusätzlich noch einen Wert habe? Nämlich die Stromstärke in dem Fall. Ich habe also z.B. einen Value von 200 UND dazu noch eine Stromstärke von 5 Ampere. Wie bekomme ich das ausgegeben? Siehe oben bei $zeile['strom']. Value "strom" ist der Symbolname, $zeile['strom'] ist der Wert, quasi die Anzahl. Nun kommt noch z.B. $zeile['stromstaerke'] dazu. Das sollte dann z.B. in dieser Form erfolgen:

[src=php]echo $value.' <img src="http://www.domain.de/symbole/'.$name.'.png"> ('.$stromstaerke.' Ampere)';[/src]

Sprich

[src=php]while ($zeile = mysql_fetch_array($erg, MYSQL_ASSOC)) {
$filter = array('wert1' => 'X', 'wert2' => 'X','wert3' => 'X', 'wert4' => $zeile['wert4'], 'wert5' => $zeile['wert5']);
foreach (($fields ) as $name => $value) {
if (($value == 1) or ($value == 'X')) {
echo '<img src="http://www.domain.de/symbole/'.$name.'.png">';
}
if (($value > 1) and ($value != 'X')) {
echo $value.' <img src="http://www.domain.de/symbole/'.$name.'.png">';
}
if (was ist hier zu tun bzw. zusammenzufassen um den dritten Wert abzufangen) {
echo $value.' <img src="http://www.domain.de/symbole/'.$name.'.png"> ('.$stromstaerke.' Ampere)';
}
}
}[/src]
Habe schon Dinge wie
[src=php]if ($zeile['stromampere'] > 0) {
$stromampere = '('.$zeile['stromampere'].'A)';
} else {
$stromampere = '';
}[/src]
vor der while-Schleife probiert und dann im Am ende beim Symbol mit angegeben. Da aber durch itteriert wird tauchen die Werte dann logischerweise bei allen Symbolen auf, auch bei denen die gar kein Stromsymbol haben was ja quatsch ist.

Ich hab das dumpfe gefühl das ich einfach nur total auf dem Schlauch stehe und/oder zu doof bin :D

Hat einer von euch Imput?

Vielen Dank im Vorraus :)

Gruß godlike
 

werner

Suchtspielmacher (ehm.)

Registriert
20 Juli 2014
Beiträge
743
Ort
Mannheim
Wieso setzt du dein Ansatz nicht in die zweite if-abfrage? Oder steh ich hier auch gerade auf dem Schlauch :D
 

Jester

★★★★☆ (Kasparski)

Registriert
1 Dez. 2014
Beiträge
6.066
Ort
Code Azure
Meinst in der Art?

[src=php]if(($value == 1 || $value == "X") && !$zeile['stromstaerke']){
Fall 1
}
if(intval($value) > 1 && !$zeile['stromstaerke']){
Fall 2
}
if(intval($value) > 1 && $zeile['stromstaerke']){
Fall 3
}[/src]
 

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.332
Ort
Topkekistan
  • Thread Starter Thread Starter
  • #4
@wernersbacher: Kannst du das mal genauer erläutern? Ich steh ja genau so auf dem Schlauch :D

[src=php]Array ( [wert1] => X [wert2] => X [wert3] => X [strom] => 100 [stromampere] => 10-15 [wert5] => 25 ) [/src]

Das Problem ist ja das es ja immer einen Wert gibt. Entweder X oder eben eine Zahl. Nur bei Strom z.B. habe ich ja jetzt zwei Werte. Ein mal Strom und ein Mal Ampere. Wie bekomme ich jetzt (z.B. mit der oberen Array-Ausgabe) den Wert von (10-15) hinter das Symbol beim Strom?

Noch mal zum verdeutlichen. Das Obere Array gibt mit meiner Abfrage folgendes aus:

sybol-wert-1.png
sybol-wert-2.png
sybol-wert-2.png
100 symbol.png
25 symbol.png

Es soll aber der Wert von stromampere hinter das Strom-Symbol. Also so:

sybol-wert-1.png
sybol-wert-2.png
sybol-wert-2.png
100 symbol.png (10-15)
25 symbol.png

Und daran hängt es bei mir.

Hab nun überlegt oben einen zweiten Array zu nutzen.

[src=php]array('wert1' => 'X', 'wert2' => 'X','wert3' => 'X', 'wert4' => $zeile['wert4'], 'strom' => array(anzahl_strom => zeile['strom'], hat_ampere => zeile['stromampere']));[/src]

Allerdings hab ich dann keine Ahnung mehr wie ich das weiter unten bei der Ausgabe anwenden soll :dozey:

@Jester

Es gibt 3 Fälle das ist richtig.

Symbol
Wert Symbol
Wert Symbol Zweiter-Wert

Das mit der Stromstärke war nur ein Beispiel, es kann da noch mehrere geben.

Ist nur ein X hinterlegt soll nur das Symbol angezeigt werden, ist eine Zahl hinterlegt dann die Zahl + das Symbol, und beim letzten Fall ist eine Zahl hinterlegt + in einer anderen Spalte, die ich ja weiß, ein weiterer Wert der hinter dem Symbol angezeigt werden soll wenn es in dem Datensatz eben diesen Wert gibt.

Sorry, ganz schön schwer zu erklären ...
 
Zuletzt bearbeitet:

werner

Suchtspielmacher (ehm.)

Registriert
20 Juli 2014
Beiträge
743
Ort
Mannheim
Jetzt verstehe ich das Problem :D
Theoretisch sollte man sowas ja in einer weiteren Datenbank speichern, und beim Auslesen dann Joinen und in einem weiterem Array speichern (wie du es angebeben hast)

Was auch noch gehen würde:
Du gibst die Ausgabe nicht direkt über echo aus, sondern speicherst erst alles in einer Variable, z.B. $output und packst das in deine Schleife rein:

[src=php]if ($name === "stromampere" && $zeile['stromampere'] > 0) {
$output .= '('.$zeile['stromampere'].'A)';
continue;
} else if ($zeile['stromampere'] == 0) {
continue;
}[/src]
 
Zuletzt bearbeitet:

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.769
Ort
in der Zukunft
Das ganze sollte sich auch schon hübsch in SQL lösen können... wie schaut denn dein DB-Layout aus und eine exemplarische Tabellenausgabe des Ergebnisses?
 

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.332
Ort
Topkekistan
  • Thread Starter Thread Starter
  • #7
Vorweg, ich habe KEINEN Einfluss auf die Datenbank, ich hätte das nämlich sicher auch anders gelöst! Darum hab ich ja das doofe Problem :dozey:

@wernersbacher

Prost! Kannst du mir das man anhand meiner while-Schleife verdeutlichen? Soweit in der Art war ich nämlich auch schon, mit dem Resultat das entweder hinter jedem Symbol dann der Wert auftauchte oder gar nicht :D

Ich geh mal ans testen :coffee:

Datenbank ist recht simpel und stupide. Hier mal ein Beispiel:

Wert1Wert2Wert3StromWert4Wert5StromstärkeWert6Wert7WasserWert8Wert9WassermengeWert10Wert11
XX1002X10-15205495012[SUP]3[/SUP]10.000Lorem Ipsum
XXX0152005[SUP]3[/SUP]Test

Da wo nur X drin steht, oder eben auch nicht, soll nur ein Symbol angezeigt werden. Bei den Feldern mit Zahlenwert der Wert + Symbol und bei Strom + Wasser (als Beispiel) Der Wert, das Symbol und der Wert aus der zweiten Spalte.

Ok, wenn ich sowas hier habe:

[src=php]Array
(
[Wert1] => X
[Wert2] => X
[Wert3] => X
[Wert4] => X
[Wert5] => X
[Wert6] => X
[Wert7] => X
[Wert8] => X
[Wert9] => X
[Wert10] => X
[Wert11] => 20
[Wert12] => X
[strom] => Array
(
[hat_strom] => 135
[hat_stromampere] => 3-5
)

[wasser] => Array
(
[hat_wasser] => 1
[hat_wassermenge] =>
)

[Wert13] => 0
[Wert14] => 0
[Wert15] => 1
[Wert16] =>
[Wert17] => 0
[Wert18] => 0.6
)[/src]

Wie kann ich nun das unter-array Prüfen? in_array() oder so geht ja schon mal nicht da ich dafür das Array mit $blah array() ausstatten müsste - und das darf ich hier ja nicht...

Ok kacke, mit dem mehrdimensionalen Array erfolgt bei der jetzigen if-Abfrage natürlich keine Ausgabe mehr da $value und $name ja so nicht mehr da sind. Müsste nun ja eher mit $filter["strom"] bzw. $filter["strom"]["hat_strom"] / $filter["strom"]["hat_stromampere"] *arghs*
 
Zuletzt bearbeitet:

Saprox

Neu angemeldet

Registriert
3 Juni 2015
Beiträge
64
Ort
127.0.0.1
Hi, auch wenn ich schon lange nicht mehr mit PhP gearbeitet habe sehe ich aber auch eher die Lösung in der Sql abfrage.
Denn wenn du 2 arrays mit einander vergleichen willst wo du nicht mit bestimmtheit sagen kannst welche 2 es sind musst du sie alle nacheinender durchzählen und diese jeweils immer miteinander vergleichen.
Bedeutet du brauchst zählschleife die jeweils für array[x] und arry[y] laufen die du dann mit AND verknüpfst und so über If ausgeben kannst :)

Hoffe dich bringt mein Ansatz weiter.

mfg Saprox

PS. Habe grade nochmal das ganze angeschaut. Eigentlich benötigst du ja nach dem du die eine Abfrage gemacht hast eigentlich nurnoch den 2ten wert. Das geht doch als verschachtlung mit :

[src=php]
while ($zeile = mysql_fetch_array($erg, MYSQL_ASSOC)) {
$filter = array('wert1' => 'X', 'wert2' => 'X','wert3' => 'X', 'wert4' => $zeile['wert4'], 'strom' => $zeile['strom']);
foreach (($fields ) as $name => $value) {
if (($value == 1) or ($value == 'X')) {
echo '<img src="http://www.domain.de/symbole/'.$name.'.png">';
if ($zeile['stromampere'] > 0) {
echo '('.$stromstaerke.' Ampere)';
}
}
if (($value > 1) and ($value != 'X')) {
echo $value.' <img src="http://www.domain.de/symbole/'.$name.'.png">';
}
}
}

[/src]

Vorteil bei der Verschachtelung ist das du nun auch unterscheiden kannst ob Strom oder Ampare oder du da noch einfügst die abfrage mit wasser usw. geht aber natürlich nur wenn du vorher ein Array weist also das nicht variabl is
 
Zuletzt bearbeitet:

godlike

Warp drölf
Veteran

Registriert
13 Juli 2013
Beiträge
14.332
Ort
Topkekistan
  • Thread Starter Thread Starter
  • #9
Das mit dem SQL-Query ist ne super Idee!

Hab jetzt mal was gebaut:

[src=php]$sql = "SELECT blah";
while ($zeile = mysql_fetch_array($erg, MYSQL_ASSOC)) {
if (($zeile['strom'] > 1) and (!empty($zeile['stromampere']))) {
$strom = $zeile['strom'].' <img src="http://www.domain.de/strom.png">('.$zeile['stromampere'].' A)';
} elseif (($zeile['strom'] == 1) and (empty($zeile['stromampere']))) {
$strom = ' <img src="http://www.domain.de/strom.png">';
} else {
$strom = $zeile['strom'].' <img src="http://www.domain.de/strom.png">';
}

mach was draus
}[/src]

Nun habe ich auch korrekte Werte im Array :T

Wie baue ich das denn jetzt unten in die Ausgabe ein? Also das er mir $strom korrekt ausgibt...

PS. Habe grade nochmal das ganze angeschaut. Eigentlich benötigst du ja nach dem du die eine Abfrage gemacht hast eigentlich nurnoch den 2ten wert. Das geht doch als verschachtlung mit :
Das war auch meine erste Idee aber ein Denkfehler. So bekommt nämlich jedes Symbol hinten dran ein (XY Ampere) wenn der Wert da ist. Bezieht sich ja immer auf einen Durchgang...

Wie prüfe ich in dem Falle denn mit in_array?

der Array heißt ja $filter1 und ich prüfe mit in_array("http://www.domain.de/", $filter1), sollte ja immer TRUE sein wenn ein Symbol vorhanden ist. Also eben was beim $strom (usw.) der Fall sein sollte. Das Array passt imho auch...

[src=php]Array
(
[wert1] => X
[wert2] => X
[wert3] => X
[wert4] => 0
[wert5] => X
[strom] => 90 <img src="http://www.domain.de/strom.png">(3-5 A)
[wert6] =>
[wert7] => 0
[wert8] => 0
)[/src]
Trotzdem bekomme ich keine Ausgabe :confused:

Das hier bringt auch endlich eine korrekte Ausgabe:

[src=php]foreach (($fields ) as $name => $value) {
if (($value == 1) or ($value == 'X')) {
echo '<img src="http://www.domain.de/'.$name.'.png">';
}
if (($value > 1) and ($value != 'X')) {
echo $value.' <img src="http://www.domain.de/'.$name.'.png">';
}
}
echo $filter1["strom"];[/src]

Allerdings halt immer ganz am Ende der Symbole und nicht am richtigen Platz, sprich da wo sie hin gehören...
 
Zuletzt bearbeitet:

Saprox

Neu angemeldet

Registriert
3 Juni 2015
Beiträge
64
Ort
127.0.0.1
godlike schrieb:
Das hier bringt auch endlich eine korrekte Ausgabe:

[src=php]foreach (($fields ) as $name => $value) {
if (($value == 1) or ($value == 'X')) {
echo '<img src="http://www.domain.de/'.$name.'.png">';
}
if (($value > 1) and ($value != 'X')) {
echo $value.' <img src="http://www.domain.de/'.$name.'.png">';
}
}
echo $filter1["strom"];[/src]

Allerdings halt immer ganz am Ende der Symbole und nicht am richtigen Platz, sprich da wo sie hin gehören...

Das is klar da es nicht durch die IF abweisung mit Positioniert wird. Es wird halt immer ans ende gepackt. Dein Problem liegt übrigens in if (($value > 1) and ($value != 'X')) du fragst da $value ab welches größer als 1 sein soll das trifft aber auch auf denn array strom und stromam. zu dementsprechend hört er danach auf. Deshab musst du in deine if abfrage noch eine zusätzliche abfrage einbauen. Wo du einfach abfragst ob $valve halt genauso groß ist wie dein array mit strom. Ist nicht die feinste art und weise aber müsste "theoretisch" gehen.

[src=php]
[src=php]foreach (($fields ) as $name => $value) {
if (($value == 1) or ($value == 'X')) {
echo '<img src="http://www.domain.de/'.$name.'.png">';
}
if (($value > 1) and ($value != 'X')) {
if (($value == $zeile['stromampere'])) {
echo $filter1["strom"];
}else{
echo $value.' <img src="http://www.domain.de/'.$name.'.png">';
}
}
}
[/src]

Hoffe das es so passt.

mfg Saprox
 
Oben