Ankündigung

Einklappen
Keine Ankündigung bisher.

frage: welche array funktion??

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • frage: welche array funktion??

    hallo liebe php´ler,
    ich habe noch nicht so viel ahnung von php und ich hoffe das meine frage nicht ganz zu blöd ist.
    ich versuche seit einiger zeit eine "cocktailsuche" zu progen.
    und zwar soll man auf der hp mehrere ckeckboxen sehen können, wobei jede für eine zutat steht. also z.b. ckeckbox1 = bananensaft usw...
    dann gibt es eine datenbank mit drei tabellen, die wie folgt aussehen:

    tabelle1(rezepte):
    id_____rezept
    1_____caipirinha
    2_____swimingpool
    usw..

    tabelle2(zutaten)
    id_____zutat
    1_____limetten
    2_____brauner_zucker
    3_____cashaca
    4_____Cream of Coconut
    5_____vodka
    6_____sahne
    usw...

    tabelle3(verknüpfung):
    id____rezept_________zutat
    1____caipirinha_______limetten, brauner zucker, cashaca
    2____swimingpool_____Cream of Coconut, vodka, sahne
    usw...


    mein code sieht so aus:
    Code:
    <html>
    <head></head>
    <body>
    
    <form action="123.php" method="post">
    <table>
    <tr><td><input type="checkbox" name="li">limetten</td></tr>
    <tr><td><input type="checkbox" name="bz">brauner zucker</td></tr>
    <tr><td><input type="checkbox" name="ca">cashaca</td></tr>
    <tr><td><input type="checkbox" name="cc">cream of coconut</td></tr>
    <tr><td><input type="checkbox" name="vo">vodka</td></tr>
    <tr><td><input type="checkbox" name="sa">sahne</td></tr>
    <tr><td><input type="submit"></td></tr>
    </table></form>
    
    
    <?php
    
    if( isset($_POST['li']) )
       $limetten = 1;
    
    if( isset($_POST['bz']) )
       $brauner_zucker = 1;
    
    if( isset($_POST['ca']) )
       $cashaca = 1;
    
    if( isset($_POST['cc']) )
       $cream_of_coconut = 1;
    
    if( isset($_POST['vo']) )
       $vodka = 1;
    
    if( isset($_POST['sa']) )
       $sahne = 1;
    
    $vorhanden = array($limetten , $brauner_zucker , $cashaca , $cream_of_coconut , $vodka , $sahne);
    
    echo "$vorhanden[0]<br>";
    echo "$vorhanden[1]<br>";
    echo "$vorhanden[2]<br>";
    echo "$vorhanden[3]<br>";
    echo "$vorhanden[4]<br>";
    echo "$vorhanden[5]<br>";
    ?>
    
    
    
    <?php
     
    mysql_connect("localhost","user","password") or die ("verindung nicht möglich");
    
    mysql_select_db("mrrosetteadmi_05") or die ("datenbank nicht vorhanden");
    
    $result = mysql_query('select zutat from verknuepfung') OR die(mysql_error());
    
       echo "$result Datensaetze gefunden<br>";
    
    while($benoetigt = mysql_fetch_assoc($result))
    
       {
          echo $benoetigt['zutat'];
       }
    
    
    
    
    
    
      $fertig = array_key($benötigt,$vorhanden)
        {
         echo §fertig;
        }
    
      ?>
    
    
    
    
    </body>
    </html>
    also ganz oben im code sind die ckeckboxen welche nach drücken des submit buttons in den array $vorhanden geladen werden.
    die echo´s sind nur zum test da..
    jetzt werden die benötigten zutaten aus der datenbank gezogen ($benoetigt) und sollen jetzt mit dem array $vorhanden verglichen werden.
    ich eiß nicht so richtig welche array funktion ich jetzt nehmen soll da ich mich wie gesagt nicht so gut auskenne. ich hoffe ich versteht meine idee ud könt mir dabei helfen..
    danke schon im vorraus lg mrrosette


  • #2
    Hallo und Willkommen im Forum!

    So weit ich weis gäbe es da die Möglichkeit das mit einer foreach Schleife zu machen,da kann ich dir aber nichts genaues zu sagen weil ich damit selber noch nichts gemacht habe. Oder aber du kannst mit der Funktion in_array das Array durchsuchen und dann deinen Vergleich dazu programmieren!

    mfg der Litter
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de

    Kommentar


    • #3
      Hi, ich bin auch nicht sehr lange mit PHP dabei aber ich würde $_POST Variablen in dem Fall nicht mit isset() prüfen. Denn selbst wenn du zB "li" nicht auswählst existiert die Variable "li", ist aber leer. Ich würde zusätzlich noch !empty() verweden.

      Tut mir Leid wenn ich mich Irre, ich denke aber ich liege richtig.

      Kommentar


      • #4
        Hi,

        ich versteh noch nicht so ganz wo der Knackpunkt jetzt ist. Du erzählst viel vom drumherum, aber was genau jetzt das Ergebnis sein soll wird kaum gesagt.

        Generelle Tipps:
        - setze deinen Checkboxen das Attribut value="1" , denn der wird dann wirklich nur übertragen wenn ein Haken gesetzt ist und du kannst deine überprüfung auf if($_POST["bz"]==1) erweitern.

        - echo "$result Datensaetze gefunden<br>"; wird nicht funktionieren. $result ist hier eine MySQL-Result-Ressource. Die Anzahl der gefundenen Datensätze bekommst du mit der Funktion mysql_num_rows($result)

        Kommentar


        • #5
          Willst Du anzeigen, welche Cocktails mit den vorhanden Zutaten gemischt werden können? Oder welche Zutaten für einen bestimmten Cocktail fehlen?

          Kommentar


          • #6
            ok danke für alles aber bissher hat nichts davon zum gewünschten ergebnis geführt..
            @david ich möchte die coktails anzeigen lassen, die man mit den zutaten mischen kann, die man hat.
            die tipps von cycap habe ich befolgt aber es hat sich nichts sichtliches geändert.
            was genau ich wissen möchte ist, wie ich die benötigten zutaten ($benötigt) mit den vorhandenen ( $vorhanden) vergleichen kann im gleichem prozess die namen der cokctails ausspucken kann.

            Kommentar


            • #7
              tabelle 1+2 übernehme ich, nur die Namen sind etwas geändert.
              Code:
              CREATE TABLE `rezepte` (
                `rezept_id` int(11) NOT NULL auto_increment,
                `rezept_name` varchar(48) default NULL,
                PRIMARY KEY  (`rezept_id`)
              )
              Code:
              CREATE TABLE `zutaten` (
                `zutat_id` int(11) NOT NULL auto_increment,
                `zutat_name` varchar(48) NOT NULL,
                PRIMARY KEY  (`zutat_id`)
              )
              Tabelle 3 wird aufgetrennt. Es stehen nicht mehr alle Zutaten in einem Feld (das ist etwas, womit SQL nicht umgehen kann), sondern pro Datensatz gibt es genau eine Verknüpfung Rezept->Zutat.
              Code:
              CREATE TABLE `rezept_zutaten` (
                `id` int(11) NOT NULL auto_increment,
                `rezept_id` int(11) NOT NULL,
                `zutat_id` int(11) NOT NULL,
                PRIMARY KEY  (`id`)
              )
              Code:
              INSERT INTO `rezepte` (`rezept_id`, `rezept_name`) VALUES
               (1,'caipirinha'),	(2,'swimingpool'), (3,'ekelcaipi');
              
              INSERT INTO `zutaten` (`zutat_id`, `zutat_name`) VALUES
               (1,'limetten'), (2,'brauner_zucker'), (3,'cashaca'),
               (4,'Cream of Coconut'), (5,'vodka'), (6,'sahne');
              
              INSERT INTO `rezept_zutaten` (`id`, `rezept_id`, `zutat_id`) VALUES
               (1,1,1),(2,1,2), (3,1,3), (4,2,4), (5,2,5), (6,2,6),
               (7,3,1), (8,3,2), (9,3,3), (10,3,5);
              Die beiden Drinks von oben und Drink #1+Voda (irgendeine Zutat mehr, nicht 3 sondern 4)

              Wir haben die Zutaten 1,2,3.
              Erstmal die einfache Abfrage: "Welche Drinks enthalten Zutaten 1,2,3?"
              Code:
              SELECT
                rezept_id,zutat_id
              FROM
                rezept_zutaten as rz
              WHERE
                rz.zutat_id IN(1,2,3)
              Soweit einverstanden?

              Kommentar


              • #8
                ekelcaipi? hehe

                Kommentar


                • #9
                  Ja, ich habe beim Tippen eben gemurmelt "...und jetzt noch 5 zum Caipi ...Vodka." Und dann kam gleich der entsetzte Aufschrei "heute ein bisschen eklig?" zurück. Passt, also Ekelcaipi

                  Kommentar


                  • #10
                    hi
                    also so wie ich es verstanden habe, würde ich es so angehen das du in deiner tabelle die fertigen rezepte hast und dann einfach deine zutaten die du aus den checkboxen übergibst mit den rezepten in der datenbank vergleichst. Sobald 1 rezept komplett erfüllt ist mit zutaten also das alle vorhanden sind dann gibst du für dieses rezept ein true aus, am ende sobald du die komplette tabelle durchgegangen bist also alle rezepte überprüft hast gibst du alle rezepte die ein true gesetzt bekommen haben aus!

                    Kommentar


                    • #11
                      Das kann man aber auch mit einem flat file machen. Durchaus möglich und muss keine schlechte Lösung sein. Aber mit SQL hat das dann nicht mehr viel zu tun.

                      Kommentar


                      • #12
                        wieso? er makiert welche sachen bei dem formular und dann schaut er welche das waren, schickt ne mysql-abfrage wo nach getränken geschaut wird die a ,b ,c als inhalt haben
                        Under Construktion

                        Kommentar


                        • #13
                          Zitat von reliC Beitrag anzeigen
                          die komplette tabelle durchgegangen bist also alle rezepte überprüft hast
                          So wie ich diesen Abschnitt verstanden habe, wird das ein full table scan. Also alle Datensätze abfragen, an PHP übergeben und da irgendwelche Vergleichsoperationen ausführen. Alle Datensätze einlesen kann ich auch mit einem flat file, dafür brauche ich kein SQL.

                          Kommentar


                          • #14
                            So wie ich diesen Abschnitt verstanden habe, wird das ein full table scan. Also alle Datensätze abfragen, an PHP übergeben und da irgendwelche Vergleichsoperationen ausführen. Alle Datensätze einlesen kann ich auch mit einem flat file, dafür brauche ich kein SQL.
                            achso das kannt ich noch gar nicht muss mich dann am über dies informieren aber danke für die info

                            Kommentar


                            • #15
                              man das it ja wahnin wieviele antwortn man hier bekommt. danke erstmal. ich glaube ihr habt das alle richtig verstanden. also ih möhte es gerne mit mysql lösen da vielleicht einige freunde das gleiche auf ihre hp stellen öchtn und das nicht jeder dauernd alles aktualliesieren mus gibt es eine datenbank und die wird von allen benutzt. ih habe auch noch nicht von diesem flat ile gehört was ist den das genau? wird das dann einfach in einer textdatei gespeichert oder wie??
                              also nochmal zu meinem problem: die abfrage der ckeckboxen und diese in ein array einutragen und die daten aus der datenbank zu holen hab ich ja scon hinekommen.. jetzt habe ich nur das problem mit dem vergleichen und ausgeben. sowie reliC scon geschrieben hat deke ich ist die beste möglichkeit nur jetzt weiß ich nicht wie ih das umsetzten soll..
                              könnt ihr mir vielleicht mal ein code beipiel schicken?

                              Kommentar

                              Lädt...
                              X