PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |

20-10-2008, 14:08
|
Olli4
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 112
|
|
array mit mehreren werten
Hi
Ich habe ein kleines Problem wo ich grad nicht weiter weiss, und hoffe jemand von euch kann mir da weiterhelfen.
Bisher hatte ich folgenden arrayaufbau:
Array
(
[0] => 9
[1] => 2
[2] => 8
[3] => 11
)
Nun habe ich eine MySQL Abfrage gemacht mit
WHERE PersonalID IN (".implode(",", $meinarray).")
Dies klappte alles wunderbar wie es soll.
Nun würde ich zu den einzelnen PersonalID ab und an gerne auch Optionen mit einfügen. Ich habe mir dann überlegt, ich könnte so ein array machen:
Array
(
[0] => 9
[1] => 9-2
[2] => 9-1
[3] => 2
[4] => 2-1
[5] => 8
[6] => 11-7
[7] => 11-9
)
Die erste Zahl ist die PesonalID und die zweite eine entsprechende Option. Wenn es keine gibt, soll er obengenannte Abfrage machen.
Wenn es jedoch eine zweite gibt, soll er quasi im array erstmal die Inhalte löschen wo die PersonalID einzel steht. In diesem beispiel wäre das dann der Index 0 und der index 2
Jetzt würde ich aber gerne eine WHILE erstellen, wo er einerseits das selbe wie oben abfragen würde, jedoch zusätzlich noch AND AID IN (Die werde der Optionen die zur PersonalID gehören).
Geht sowas überhaupt, oder ist das ganze zu komplex?
Danke schonmal für eure Hilfeversuche und Tipps.
Gruss
Olli
|

20-10-2008, 14:15
|
Griecherus
PHP Senior
|
|
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
|
|
Und wieso kein mehrdimensionales Array:
PHP-Code:
array(
1 => array('a', 'b'),
2 => array('b', 'c'),
3 => 'e'.
);
?
Grüße
|

20-10-2008, 14:19
|
Olli4
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 112
|
|
Zitat:
Original geschrieben von Griecherus
[B]Und wieso kein mehrdimensionales Array:
|
Hi
Danke für deine Antwort.
Das habe ich mir auch schon überlegt, dass ich mir statt 1-2 direkt einen Mehrdimensioalen array erstelle.
Dies ist soweit auch gar kein Problem. Jedoch hapert es dann an der weiteren Ausführung wie ich am einfachsten die Werte wo nur eine PersonalID vorhanden ist lösche sofern die AID leer ist, und vorallem ist mein grösstes Problem wie ich die MySQL Abfrage am bessten gestalte.
Gruss
Olli
|

20-10-2008, 14:31
|
Crake
Registrierter Benutzer
|
|
Registriert seit: Jun 2003
Beiträge: 150
|
|
Zitat:
Original geschrieben von Olli4
Dies ist soweit auch gar kein Problem. Jedoch hapert es dann an der weiteren Ausführung wie ich am einfachsten die Werte wo nur eine PersonalID vorhanden ist lösche sofern die AID leer ist
|
An dieser Stelle sehe ich absolut kein Problem.
Ein mehrdimensionales Array sehe wie folgt aus:
$array[1][ID], $array[1][wert1], $array[1][wert2]....
Unter Verwendung einer einfachen IF-Abfrage ließe sich nun prüfen, ob das Feld neben der ID noch weitere Werte beheimatet.
Zitat:
..., und vorallem ist mein grösstes Problem wie ich die MySQL Abfrage am bessten gestalte.
|
Hier sehe ich nur Vorteile des mehrdimensionalen Arrays, da du ohne zusätzliche Trennfunktion Zugriff auf die jeweiligen Werte hast.
__________________
Gesellschaftsforum.net - Projekt zur Wiederbelebung der Diskussionskultur im Internet
1st News - Das Newsletterscript für den professionellen Einsatz
|

20-10-2008, 14:50
|
Olli4
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 112
|
|
Hi
Danke für deine Antwort.
Ein mehrdinemsionaler Array könnte ja ungefähr so aussehen:
$array[0] (
[PersonalId] => 9
[AIF] =>
)
$array[1] (
[PersonalId] => 9
[AIF] => 2
)
$array[3] (
[PersonalId] => 9
[AIF] => 1
)
etc.
Da ist dann die Frage ob sich das lohnt den Array einmalig umzuschreiben das dieser so aufgebaut ist, oder ob ich nachher einfach mit implode arbeite.
Zitat:
Unter Verwendung einer einfachen IF-Abfrage ließe sich nun prüfen, ob das Feld neben der ID noch weitere Werte beheimatet.
|
So könnte ich den Arrayinhalt mit unset löschen ja. Aber wie würde ich dies anstellen, wenn er noch erst Prüfen soll ob ein weiterer Array mit der PersonalID vorhanden ist wo AIF ebenfals ein wert hat.
Bei meinem ersten arraybeispiel sollte er nur den index 0 und 2 löschen. Beim Index 8 hat es ja keine weiteren Arrayinhalte wo die PersonalID 8 wäre und eine AID vorhanden wären
Zum MySQL: Wie würde dies denn aussehen? Ich glaube ich stehe hier etwas auf dem Schlauch. Er soll mir ja die AID noch beachten. Also wenn wir dies ansehen:
[0] => 9
[1] => 9-2
[2] => 9-1
Sollte es ungefähr so sein:
WHERE PersonalID = '9' AND (AID = '2' OR AID = '1')
einfach mit einer Abfrage. Also das ich ihm sagen könnte alle Einträge wo die PersonalID im Array ist, und entsprechend zur PersonalID die AID beachten soll und wenn keine AID im Array ist wie im Anfangsbeispiel beim Index 8 soll er die AID nicht beachten.
Gruss
Olli
|

20-10-2008, 15:43
|
Crake
Registrierter Benutzer
|
|
Registriert seit: Jun 2003
Beiträge: 150
|
|
Zitat:
Original geschrieben von Olli4
So könnte ich den Arrayinhalt mit unset löschen ja. Aber wie würde ich dies anstellen, wenn er noch erst Prüfen soll ob ein weiterer Array mit der PersonalID vorhanden ist wo AIF ebenfals ein wert hat.
|
Dies lässt sich pauschal nicht sagen. Es gibt verschiedene Methoden, Arrays zu durchsuchen. Wenn die Datenmenge überschaubar ist, wäre es sinnvoll, das Array entsprechend nach der ID zu sortieren, da du dann lediglich die benachbarten Felder absuchen müsstest.
Oder du nutzt direkt die ID als eindeutige Referenz.
Also: $array[$ID]
{
[0] => 2
[1] => 1
...
}
Mittels count() kannst du dann auch direkt in Erfahrung bringen, wieviel Werte unter der entsprechenden ID hinterlegt sind.
Zitat:
Zum MySQL: Wie würde dies denn aussehen? Ich glaube ich stehe hier etwas auf dem Schlauch. Er soll mir ja die AID noch beachten. Also wenn wir dies ansehen:
[0] => 9
[1] => 9-2
[2] => 9-1
Sollte es ungefähr so sein:
WHERE PersonalID = '9' AND (AID = '2' OR AID = '1')
einfach mit einer Abfrage. Also das ich ihm sagen könnte alle Einträge wo die PersonalID im Array ist, und entsprechend zur PersonalID die AID beachten soll und wenn keine AID im Array ist wie im Anfangsbeispiel beim Index 8 soll er die AID nicht beachten.
|
Nutzt du, wie zuvor angesprochen, die ID als eindeutige Referenz, kannst du ohne aufwendiges Suchen die Anzahl der zugehörigen Werte ermitteln und eine entsprechende Abfrage per Schleife zusammenstellen.
Was mir noch auffällt:
Ich weiß nicht, woher die Daten stammen, aber ggf. wäre es sinnvoll, Leerwerte beim Einlesevorgang nicht zu berücksichtigen?
__________________
Gesellschaftsforum.net - Projekt zur Wiederbelebung der Diskussionskultur im Internet
1st News - Das Newsletterscript für den professionellen Einsatz
|

20-10-2008, 15:55
|
Olli4
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 112
|
|
Hi
Danke dir. Da sieht man doch ab und an den Wald vor lauter Bäumen nicht.
Ich habe mir nun folgenden Array gebaut:
PersonalID = 9:
$array[9][0] = 9;
$array[9][1] = 2;
$array[9][2] = 1;
PersonalID = 8:
$array[8][0] = 8;
Nun habe ich einen sauberen Array wo ich das habe was ich wollte.
Zum MySQL: Kannst du mir hier nochmals helfen? Ich finde einfach keine Lösung dazu wie diese aussehen muss. Ich möchte ja wenn möglich grad eine SELECT Abfrage haben wo ich dann in der while habe, ohne das ich in der while noch zusätzlich die Optionen (AID) abrufen muss ob welche da sind und wenn ja diese noch filtern.
Zu deiner Frage: Der Array wird über ein Formular gefüllt. Habe nach dem Arrayeinlesen nun obengenannen array erzeugt.
Danke nochmals für deine Hilfe.
Gruss
Olli
|

20-10-2008, 16:16
|
Crake
Registrierter Benutzer
|
|
Registriert seit: Jun 2003
Beiträge: 150
|
|
Etwas notdürftig zusammengeschustert, aber so sollte es grob funktionieren:
PHP-Code:
$ID = 9;
$array[$ID][0] = 9;
$array[$ID][1] = 2;
$array[$ID][2] = 1;
$str = "WHERE PersonalID = '". $ID . "' AND (";
$count = count($array[$ID]);
$i = 0;
foreach($array[$ID] as $value)
{
$str .= "AID = '". $value . "'";
$i++;
if($i < $count) $str .= " OR ";
else $str .= ")";
}
echo $str;
Da die Daten aus Formulareingaben stammen, wäre es sinnvoll, die Daten während der Ausführung des SQL-Befehl zu maskieren zwecks Vermeidung von SQL-Injections.
__________________
Gesellschaftsforum.net - Projekt zur Wiederbelebung der Diskussionskultur im Internet
1st News - Das Newsletterscript für den professionellen Einsatz
|

20-10-2008, 16:25
|
Olli4
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 112
|
|
Hi
Danke für deine Antwort.
Wegen den SQL Injections. Die Werte sind per Intval maskiert worden. Entsprechend kann ja kein Text eingeschleust werden.
Ist das die einzige lösung? Dann müsste ich ja pro ID (so habe ich es bereits) eine SQL Abfrage starten.
Kann man das nicht irgendwie in einer machen? Wenn es nur um die PersonalID gehen würde geht ja dies: WHERE PersonalID IN (".implode(",", $meinarray)."). Meine Frage war ja ursprünglich ob dies irgendwie in einer Abfrage gehen würde mit den Optionen.
Wenn nicht lasse ich es so wie es ist. Aber wen es so wäre, würde es etwas einfacher gehen.
Gruss
Olli
|

20-10-2008, 16:38
|
Crake
Registrierter Benutzer
|
|
Registriert seit: Jun 2003
Beiträge: 150
|
|
Also du möchtest eine SQL-Abfrage, die für sämtliche IDs mitsamt der zugehörigen Werte die entsprechenden Daten abfragt?
__________________
Gesellschaftsforum.net - Projekt zur Wiederbelebung der Diskussionskultur im Internet
1st News - Das Newsletterscript für den professionellen Einsatz
|

20-10-2008, 16:50
|
Olli4
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 112
|
|
Genau ja.
Also ich hatte ja dies nur für die PersonalID:
WHERE PersonalID IN (".implode(",", $meinarray).")
Sagen wir meinarray hatte 2 3 und 5
Also das wir quasi dann dies haben wenn bei 5 noch optionen 2 und 6 drin sind hätten wir drei abfragen:
WHERE PersonalID = '2'
WHERE PersonalID = '3'
WHERE PersonalID = '5' AND (AID = '2' OR AID = '6')
Wenn ich dir das so schreibe, habe ich ggf grad eine Lösung gesehen ähnlich wie deine. Könnte ich so den array einfach durchlaufen und ein $whilestring generieren der so aussieht:
$while = "(PersonalID = '2') OR (PersonalID = '3') OR (PersonalID = '5' AND (AID = '2' OR AID = '6'))"
oder wäre dies nicht schlau wenn es nicht sogar eine bessere lösung geben würde?
Gruss
Olli
|

20-10-2008, 17:52
|
Crake
Registrierter Benutzer
|
|
Registriert seit: Jun 2003
Beiträge: 150
|
|
Ich will nicht sagen, dass es sich hierbei um die beste Lösung handelt, wenngleich mir keine bessere spontan in den Sinn kommt, aber sie erscheint mir gerade aufgrund der Einfachheit am sinnvollsten.
__________________
Gesellschaftsforum.net - Projekt zur Wiederbelebung der Diskussionskultur im Internet
1st News - Das Newsletterscript für den professionellen Einsatz
|

20-10-2008, 18:10
|
Olli4
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 112
|
|
Danke dir für deine Aktive Hilfe.
Gruss
Olli
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
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.
HTML-Code ist aus.
|
|
|
|
PHP News
Aktuelle PHP Scripte
Homepagetools 2022
Kostenloses Gästebuch und Homepagetools für die eigene Homepage.
Bei GuxDu kann man sich kostenlos die Websitetools auf die vorhandene Website einbauen. Zudem kann man bei GuxDU auch eine eigene Homepage mit 3D Effekten erstellen. GuxDu ist kostenlos.
29.04.2022
freepler | Kategorie: PHP/ Gaestebuch
|
SF-Shopsystem V1.0
Hier haben wir ein einzigartiges Shopsystem in PHP.
Die Anzahl der Artikel ist unbegrenzt, einfach zu bedienen und erklärt sich.
Ausführliche Beschreibung weiter unten.
28.04.2022
Speedcrawler | Kategorie: PHP/ Shops
|
Anzeigen Markt mit PayPal Bezahl System
Anzeigen Markt Script
mit PayPal Bezahl System
Der Benutzer hat die Möglichkeit sofort nach Bezahlung mit PayPal
seine Anzeigen zu schalten, je nach seinem Guthaben.
27.04.2022
Webace_de | Kategorie: PHP/ Anzeigenmarkt
|
Alle PHP Scripte anzeigen
|