• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

array key exist

bodo92

Aktives Mitglied
Hallo,

ich bräuchte kurz euere Hilfe.

ich versuchen einen Array der per implode erstellt wurde über explode und array_key_exist abfragen.



PHP:
$kraefte = trim(strip_tags(stripslashes(implode(', ', $_POST['kraefte']))));
PHP:
$kraefte_ = explode(', ', $kraefte); 
if ( array_key_exists('Rettungsdienst', $kraefte_) ) { $kraefte_Rettungsdienst = "selected"; }

echo $kraefte_[0]; ergibt Rettungsdienst
 
Schuldigung wegen der undeutlichen fragestellung :)

Bin weng durch den wind xD

Danke "mermshaus",
genau das hab ich gesucht es klappt.
 
Ich hab trotzden nochmal ne Frage.

Ich habe folgendes vor:
ich will Datenbankeinträge über ein Formular ändern, dafür lade ich alle felder aus der tabelle und werte sie aus. Ich schreibe sie dann duch eine Variable in den value attribut der Formularfelder.
Bei Input "text" feldern is das auch kein problem. Nur jetz haben meine formulare viele Select felder. da ist es dann etwas umständlicher somit habe ich über:
PHP:
$kraefte_ = explode(', ', $kraefte); 
if ( in_array('Polizei', $kraefte_) ) { $kraefte_Polizei = "selected"; }
if ( in_array('Rettungsdienst', $kraefte_) ) { $kraefte_Rettungsdienst = "selected"; }
HTML:
<option $kraefte_Polizei>Polizei</option>
<option $kraefte_Rettungsdienst>Rettungsdienst</option>
Das Problem ist folgendes:
ich habe ein Select Feld welches "Zusatz" beim eintragen des Datensatz kann man dießes Optional auswählen und dann in Input "text" felder Zusätzliche Kräfte angeben die aber keinen Vorbestimmten namen haben.

Welche möglichkeiten hab ich da?
Ich bin auch für ganz andere vil. etwas dynamischere realisierungen offen.

Ich hoffe ich hab meine Problematik verständlich darstellen können.
 
Hab jetz einfach ne extra Zeile in der Tabelle angelegt wo die zusätzlichen Kräfte drin sind.

Aber gibt es nicht ne simplere lösung für ein solches Vorhaben?
 
Wenn ich das richtig verstanden habe, solltest du die zusätzlichen Kräfte rausnormalisieren.

Grob so:

Code:
einsatz
    
    +----+------------+-----+
    | id | datum      | ... |
    +----+------------+-----+
    |  1 | 2011-10-27 | ... |
    |  2 | 2011-10-29 | ... |
    |  3 | 2011-11-03 | ... |
    +----+------------+-----+
    
kraft

    +----+---------+-----+
    | id | name    | ... |
    +----+---------+-----+
    |  1 | Polizei | ... |
    |  2 | Notarzt | ... |
    +----+---------+-----+
    
einsatz_nutzt_kraft

    +------------+----------+
    | einsatz_id | kraft_id |
    +------------+----------+
    |          1 |        1 |
    |          1 |        2 |
    |          2 |        2 |
    +------------+----------+

Einsatz 1 nutzt Polizei und Notarzt, Einsatz 2 nutzt nur Notarzt, Einsatz 3 nutzt keine zusätzlichen Kräfte.
 
vom prinzip ja nur hab ich alles in einer tabelle...

Code:
einsaetze
  +---+-------------+---------+-------------------------+----------------+
  | id | datum      | uhrzeit | kraefte                 | kraefte_zusatz |
  +---+-------------+---------+-------------------------+----------------+
  |  1 | 01.01.2010 |   01:01 | Polizei, Rettungsdienst | Straßenbauamt  |
  |  2 | 02.01.2010 |   02:02 | Rettungsdienst          |                |
  +---+-------------+---------+-------------------------+----------------+

so ist die Tabelle im großen und ganzen aufgebaut.

Natürlich sind viel mehr daten drin aber das ist ja nicht relevant..

Danke schonmal.
 
Zuletzt bearbeitet:
Also, die Datenbankstruktur ist so wie gesagt nicht optimal, da du Daten redundant ablegst. Du definierst beteiligte „Kräfte“ nur als Liste von Strings. Das macht Abfragen schwierig wie: „Zeige mir alle Einsätze, an denen die Polizei beteiligt ist.“

Aber gut, dein konkretes Problem gehört wohl eher in den Bereich HTML/JS.

Du müsstest je nach Darstellung einen passenden Event-Handler setzen, der bei Auswahl eines bestimmten Eintrags oder bei Aktivieren eines bestimmten Elements zusätzliche Eingabeelemente einblendet. Wenn du es wirklich als select-Element umgesetzt hast, wäre das wohl change.

HTML:
<!DOCTYPE html>

<html lang="en">

    <head>
        <meta charset="utf-8" />
        <title>New</title>
        <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
        <script type="text/javascript">
            /*<![CDATA[*/

            $(function () {
                $('#demo').hide();

                $('select[name=test]').bind('change', function () {
                    var selectedItems = [];

                    $(this).children('option:selected').each(function () {
                        selectedItems.push($(this).val());
                    });

                    if ($.inArray('C', selectedItems) !== -1) {
                        $('#demo:hidden').show();
                    } else {
                        $('#demo:visible').hide();
                    }
                });
            });

            /*]]>*/
        </script>
    </head>

    <body>

        <select name="test" multiple="multiple">
            <option value="A">Eintrag A</option>
            <option value="B">Eintrag B</option>
            <option value="C">Eintrag C</option>
        </select>

        <div id="demo">Zusatz</div>

    </body>

</html>

„Zusatz“ wird nur dann angezeigt, wenn „Eintrag C“ gewählt ist.
 
Hast mich glaub falsch verstanden. Ich suche eher nach ner funktion das Formular mit den Daten aus der MySQL zu füllen.

Momentan mach ich es Folgendermaßen: (ausschnitt des Code)

PHP:
$kraefte=mysql_result($result,$i,"kraefte");
$kraefte_zusatz=mysql_result($result,$i,"kraefte_zusatz"); 

// Abfrage ob Wert im Array steht dann die Feld-Variable auf "selected" setzen.
$kraefte_ = explode(', ', $kraefte); 
if ( in_array('UG-ÖEL', $kraefte_) or in_array('UG ÖEL', $feuerwehren_) ) { $kraefte_UG_ÖEL = "selected"; }
if ( in_array('KBM', $kraefte_) or in_array('KBM', $feuerwehren_) ) { $kraefte_KBM = "selected"; }
if ( in_array('KBI', $kraefte_) or in_array('KBI', $feuerwehren_) ) { $kraefte_KBI = "selected"; }
if ( in_array('KBR', $kraefte_) or in_array('KBR', $feuerwehren_) ) { $kraefte_KBR = "selected"; }
if ( in_array('Polizei', $kraefte_) or in_array('Polizei', $feuerwehren_) ) { $kraefte_Polizei = "selected"; }
if ( in_array('Rettungsdienst', $kraefte_) or in_array('Rettungsdienst', $feuerwehren_) or in_array('BRK', $feuerwehren_) ) { $kraefte_Rettungsdienst = "selected"; }
if ( in_array('Notfallselsorge', $kraefte_) or in_array('Notfallselsorge', $feuerwehren_) ) { $kraefte_Notfallselsorge = "selected"; }

// Abfrage ob der String einen Inhalt hat, danach den String in Array schreiben und das "," entfernen.
if (strlen($kraefte_zusatz) >= "1") {
$kraefte_Zusatz = "selected";
$kraefte_zusatz_ = explode(', ', $kraefte_zusatz);
$anzahl_kraefte_zusatz = count($kraefte_zusatz_);
$replace_zeichen = array(",");
$kraefte_Zusatz_4 = $kraefte_zusatz_[--$anzahl_kraefte_zusatz]; $kraefte_Zusatz_4 = str_replace($replace_zeichen, "", $kraefte_Zusatz_4); 
$kraefte_Zusatz_3 = $kraefte_zusatz_[--$anzahl_kraefte_zusatz]; $kraefte_Zusatz_3 = str_replace($replace_zeichen, "", $kraefte_Zusatz_3); 
$kraefte_Zusatz_2 = $kraefte_zusatz_[--$anzahl_kraefte_zusatz]; $kraefte_Zusatz_2 = str_replace($replace_zeichen, "", $kraefte_Zusatz_2); 
$kraefte_Zusatz_1 = $kraefte_zusatz_[--$anzahl_kraefte_zusatz]; $kraefte_Zusatz_1 = str_replace($replace_zeichen, "", $kraefte_Zusatz_1); 
}

// Ausgabe im Formular.
echo "
<select name=\"kraefte[]\" size=\"7\" multiple>
<option $kraefte_UG_ÖEL>UG-ÖEL</option>
<option $kraefte_KBM>KBM</option>
<option $kraefte_KBI>KBI</option>
<option $kraefte_KBR>KBR</option>
<option $kraefte_Polizei>Polizei</option>
<option $kraefte_Rettungsdienst>Rettungsdienst</option>
<option $kraefte_Notfallselsorge>Notfallselsorge</option>
</select>
<input type=\"text\" size=\"15\" maxlength=\"30\" name=\"kraefte_zusatz_1\" value=\"$kraefte_Zusatz_1\">
<input type=\"text\" size=\"15\" maxlength=\"30\" name=\"kraefte_zusatz_2\" value=\"$kraefte_Zusatz_2\">
<input type=\"text\" size=\"15\" maxlength=\"30\" name=\"kraefte_zusatz_3\" value=\"$kraefte_Zusatz_3\">
<input type=\"text\" size=\"15\" maxlength=\"30\" name=\"kraefte_zusatz_4\" value=\"$kraefte_Zusatz_4\">
";

Es funktionert wie gewünscht.
Ist halt ein ziemlicher aufwand dies für all meine Tabellen zu machen ;)

Es müsste doch für solche vorhaben PHP funktionen geben.


Mit freundlichen Grüßen
Bodo
 
Du meinst eine Schleife?

PHP:
$alleKraefte = array('UG-ÖEL', 'KBM', 'KBI', 'KBR', 'Polizei', 'Rettungsdienst', 'Notfallseelsorge');

$kraefte = explode(', ', 'UG-ÖEL, Notfallseelsorge');

echo '<select name="kraefte[]" size="7" multiple="multiple">';

foreach ($alleKraefte as $kraft) {
    $selected = (in_array($kraft, $kraefte)) ? ' selected="selected"' : '';
    echo '<option' . $selected . '>' . $kraft . '</option>';
}

echo '</select>';



$kraefteZusatz = explode(', ', 'Circus Sarasani, Spielmannszug Hintertupfingen');

for ($i = 1; $i <= 4; $i++) {
    $tmp = (isset($kraefteZusatz[$i - 1])) ? $kraefteZusatz[$i - 1] : '';
    echo '<input type="text" size="15" maxlength="30" name="kraefte_zusatz_' . $i . '" value="' . $tmp . '" />';
}

Übrigens ist die Datenbankstruktur nicht gut. Das fliegt dir alles sehr schnell um die Ohren.
 
Das sieht schonmal sehr hilfreich aus vielen Dank.

Inwiefern würdest du die Datenbank ändern?

So in der form?
Code:
einsaetze
+----+------------+---------+-------+--------------+------+--------+---------------+-------------+--------------+
| id | datum      | uhrzeit | titel | beschreibung | ort  | art_id | alarmstufe_id | fahrzeug_id | feuerwehr_id |
+----+------------+---------+-------+--------------+------+--------+---------------+-------------+--------------+
|  1 | 29.10.2011 |   18:00 | test  | test         | test |      2 |             1 |       2,4,5 |      1,4,5,7 |
+----+------------+---------+-------+--------------+------+--------+---------------+-------------+--------------+
+---------------------+----------+-----------------+----------+------------------+-----------+------------------+
| feuerwehr_zusatz_id | kraft_id | kraft_zusatz_id | personal | bilder           | status_id | sort             |
+---------------------+----------+-----------------+----------+------------------+-----------+------------------+
|                 2,5 |      2,4 |               2 |       15 | 2011-10-29-18-00 |         1 | 2011-10-29-18-00 |
+---------------------+----------+-----------------+----------+------------------+-----------+------------------+ 

art_id
+----+-----------+
| id | art       |
+----+-----------+
|  1 | brand     |
|  2 | thl       |
|  3 | fehlalarm |
+----+-----------+

alarmstufe_id
+----+--------------+
| id | alarmstufe   |
+----+--------------+
|  1 | brand_klein  |
|  2 | brand_mittel |
|  3 | brand_groß   |
|  4 | thl_klein    |
+----+--------------+

fahrzeug_id
+----+-----------+
| id | fahrzeug  |
+----+-----------+
|  1 | KdoW      |
|  2 | HLF 20/16 |
|  3 | LF 8      |
+----+-----------+

feuerwehr_id
+----+-----------+
| id | feuerwehr |
+----+-----------+
|  1 | FF 1      |
|  2 | FF 2      |
+----+-----------+

feuerwehr_zusatz_id
+----+------------------+
| id | feuerwehr_zusatz |
+----+------------------+
|  1 | FF 1             |
|  2 | FF 2             |
+----+------------------+

...

Danke für deine hilfe :)
 
Zurück
Oben