php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 20-10-2008, 15:08
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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
Mit Zitat antworten
  #2 (permalink)  
Alt 20-10-2008, 15:15
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Und wieso kein mehrdimensionales Array:
PHP-Code:
array(
    
=> array('a''b'),
    
=> array('b''c'),
    
=> 'e'.
); 
?

Grüße
Mit Zitat antworten
  #3 (permalink)  
Alt 20-10-2008, 15:19
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #4 (permalink)  
Alt 20-10-2008, 15:31
Crake
 Registrierter Benutzer
Links : Onlinestatus : Crake ist offline
Registriert seit: Jun 2003
Beiträge: 150
Crake ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #5 (permalink)  
Alt 20-10-2008, 15:50
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #6 (permalink)  
Alt 20-10-2008, 16:43
Crake
 Registrierter Benutzer
Links : Onlinestatus : Crake ist offline
Registriert seit: Jun 2003
Beiträge: 150
Crake ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #7 (permalink)  
Alt 20-10-2008, 16:55
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #8 (permalink)  
Alt 20-10-2008, 17:16
Crake
 Registrierter Benutzer
Links : Onlinestatus : Crake ist offline
Registriert seit: Jun 2003
Beiträge: 150
Crake ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #9 (permalink)  
Alt 20-10-2008, 17:25
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #10 (permalink)  
Alt 20-10-2008, 17:38
Crake
 Registrierter Benutzer
Links : Onlinestatus : Crake ist offline
Registriert seit: Jun 2003
Beiträge: 150
Crake ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #11 (permalink)  
Alt 20-10-2008, 17:50
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #12 (permalink)  
Alt 20-10-2008, 18:52
Crake
 Registrierter Benutzer
Links : Onlinestatus : Crake ist offline
Registriert seit: Jun 2003
Beiträge: 150
Crake ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #13 (permalink)  
Alt 20-10-2008, 19:10
Olli4
 Registrierter Benutzer
Links : Onlinestatus : Olli4 ist offline
Registriert seit: Mar 2008
Beiträge: 112
Olli4 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke dir für deine Aktive Hilfe.

Gruss

Olli
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 12:28 Uhr.