Freddy: Variablen übertragen

Hi mein Problem ist, dass ich den Wert von zwei Variablen nicht übertragen kann!!

  
		$ksql= "SELECT * FROM menu WHERE nebenkat=0";  
				$kresult = mysql_query($ksql);  
		//SELECT START  
			echo '<select name="kategorie" rows="10" cols="10">';  
				while ( $kat = mysql_fetch_array($kresult) ){  
				//Hauptkategorie  
					echo '<optgroup label="'.$kat[3].'">';  
					$hk = $kat[1];  
					$uksql = "SELECT * FROM menu WHERE hauptkat=$hk AND nebenkat!=0";  
					$ukresult = mysql_query($uksql);  
						while ( $u_kat = mysql_fetch_array($ukresult) ){  
					//Nebenkategorie  
							echo '<option value="'.$u_kat[1].'-'.$u_kat[2].'">'.$u_kat[3].'</option>';  
						}  
					echo '</optgroup>';  
				}  
			echo '</select>';	  

Das ist mein bisheriges Script für den Teilbereich in dem ich ein Problem hab! Und wenn man das forumular dann abschickt dann soll der das in eine datenbank eintragen!!
habt ihr ne idee wie das gehen sollte??
gruß
Freddy

  1. habt ihr ne idee wie das gehen sollte??

    Eine Schleife in der SQL-Queries abgesetzt werden ist eine Katastrophe.

    Sieh zu, dass du all genötigten Daten in einer Abfrage ermittelest und setze dich dann mit dem Stichwort "Gruppenwechsel" auseinander.

  2. Du zeigst leider weder das form-Tag, noch dessen method- und action-Attribut, noch den Code der betreffenden Seite, in der Du $_GET['kategorie'] bzw. $_POST['kategorie'] mit isset auf Vorhandensein prüfst und ggf. mit UPDATE oder INSERT in die Datenbank schreibst - glaubst Du etwa, das passiert von alleine?

    Gruß, LX

    --
    RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
    1. also das ganze formular sieht zurzeit so aus aber den betreffenden teil habe ich euch ja schon geschickt und dann habe ich eine neue datei in der die daten also alle anderen auser hauptkat und nebenkat erfolgreich eingetragen werden! Und deswegen würde ich gerne wissen wie das auszusehen hat!
      danke

      hier das formular:

      echo '<form action="artikeleinstellen2.php" method="POST"><br/>';  
      			echo 'Kategorie:<br/>';  
        
      				$ksql= "SELECT * FROM menu WHERE nebenkat=0";  
      				$kresult = mysql_query($ksql);  
      		//SELECT START  
      			echo '<select name="kategorie" rows="10" cols="10">';  
      				while ( $kat = mysql_fetch_array($kresult) ){  
      				//Hauptkategorie  
      					echo '<optgroup label="'.$kat[3].'">';  
      					$hk = $kat[1];  
      					$uksql = "SELECT * FROM menu WHERE hauptkat=$hk AND nebenkat!=0";  
      					$ukresult = mysql_query($uksql);  
      						while ( $u_kat = mysql_fetch_array($ukresult) ){  
      					//Nebenkategorie  
      							echo '<option value="'.$u_kat[1].'-'.$u_kat[2].'">'.$u_kat[3].'</option>';  
      						}  
      					echo '</optgroup>';  
      				}  
      			echo '</select>';	  
      		//SELECT ENDE  
      			echo '<br/><br/>';  
      				  
      			echo 'Artikelname<br/>';  
      			echo '<input type="text" size="50" maxlength="50" name="name"><br/><br/>';  
        
      			echo 'gew&uuml;nschter Preis:<br/>';  
      			echo '<input type="text" size="10" maxlength="20" name="preis"> EURO<br><br>';  
        
      			echo 'Bild:<br/>';  
      			echo '<input type="text" size="50" maxlength="150" name="bild">';  
      			  
      			echo '<br/><br/>';  
        
      			echo 'genaue Beschreibung:<br/>';  
      			echo '<textarea name="beschreibung" cols="50" rows="10"></textarea><br/>';  
        
      		echo '<input type="submit" value="Artikel einstellen">';  
      		echo '</form>';
      

      und hier noch die übertragung

        
      	$hauptkategorie = $_POST['hauptkat'];  
      	$nebenkategorie = $_POST['nebenkat'];  
      	$name = $_POST['name'];  
      	$bild = $_POST['bild'];  
      	$preis = $_POST['preis'];  
      	$beschreibung = $_POST['beschreibung'];  
      
      
      1. Das Eintragen in die Datenbank geschieht mit dem folgenden SQL-Statement:

        INSERT INTO table (key1, key2, ...) VALUES (value1, value2, ...)

        Hierbei muss man natürlich die klein geschriebenen Bezeichner durch passende Werte ersetzen.

        Gruß, LX

        --
        RFC 1925, Satz 2: Egal, wie fest man schiebt, ganz gleich, wie hoch die Priorität ist, man kann die Lichtgeschwindigkeit nicht erhöhen.
        1. das habe ich auch schon aufgesetzt!
          das sieht dann so aus

            
          $eintrag = "INSERT INTO artikel (hauptkat, nebenkat, name, bild, preis, beschreibung)  
          			VALUES ('$hauptkat', '$nebenkat', '$name', '$bild', '$preis', '$beschreibung')";  
          	  
          			$eintragen = mysql_query($eintrag);  
            
          			$abfrage = mysql_query("SELECT * FROM `artikel`  
          			WHERE `hauptkat` LIKE '$hkat' AND nebenkat LIKE $nkat AND `name` LIKE '$ueberschrift' AND `beschreibung` LIKE '$beschreibung' AND `preis` LIKE '$preis' AND bild LIKE $bild");  
          			  
          			if($eintragen == true)  
          				{  
          			  echo "Der Artikel <b>$name</b> wurde eingestellt. <br/>";  
          				echo "Ihnen wurde eine E-Mail als Best&auml;tigung geschickt! <br />";  
          				echo "Das LOEmarkt Team w&uuml;nscht viel Erfolg beim Verkauf.";  
            
          				  
          			}else{  
          				echo "Der Artikel wurde nicht eingestellt! Bitte versuchen Sie es erneut!";  
          			}  
          
          

          mein problem ist aber das die variable, die durch das <select> menü erstellt wird, nicht richtig übertragen wird!
          wenn ich die jedoch explode dann bringt das irgendwie nix!
          also nochmal es geht um den teil:

            
          	$ksql= "SELECT * FROM menu WHERE nebenkat=0";  
          				$kresult = mysql_query($ksql);  
          		//SELECT START  
          			echo '<select name="kategorie" rows="10" cols="10">';  
          				while ( $kat = mysql_fetch_array($kresult) ){  
          				//Hauptkategorie  
          					echo '<optgroup label="'.$kat[3].'">';  
          					$hk = $kat[1];  
          					$uksql = "SELECT * FROM menu WHERE hauptkat=$hk AND nebenkat!=0";  
          					$ukresult = mysql_query($uksql);  
          						while ( $u_kat = mysql_fetch_array($ukresult) ){  
          					//Nebenkategorie  
          							echo '<option value="'.$u_kat[1].'-'.$u_kat[2].'">'.$u_kat[3].'</option>';  
          						}  
          					echo '</optgroup>';  
          				}  
          			echo '</select>';	  
          		//SELECT ENDE  
          
          
          1. Hi,

            mein problem ist aber das die variable, die durch das <select> menü erstellt wird, nicht richtig übertragen wird!

            Wie du diesen Parameter (nicht Variable) in Empfang nimmst und bearbeitest, hast du uns *immer* noch nicht gezeigt ...

            also nochmal es geht um den teil:

            Der serverseitige Code, mit dem du das Selectfeld erstellst, ist reichlich uninteressant.
            Wenn ein clientseitiger Fehler nicht ausgeschlossen werden kann, dann ist der Code von Interesse, den der Client erhält.

            echo '<select name="kategorie" rows="10" cols="10">';

            Dass das Blödsinn ist, lässt allerdings auch der serverseitige Code schon erkennen. Wie kommst du auf die abenteuerliche Idee, ein SELECT-Element mit den Attributen rows und cols auszustatten?

            MfG ChrisB

            --
            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
            1. wenn ich es euch nochnicht gezeigt hab dann habe ich sowas noch nicht!
              und das mit dem select habe ich jetzt weg gemacht war ein dumme idee :D geb ich selber zu!
              aber was hat das mit meinem problem zutun?
              mein problem ist das die variablen der "kategorie" also die hinter dem begriff stehen nicht richtig übertragen werden!

              1. Hallo,

                mein problem ist das die variablen der "kategorie" also die hinter dem begriff stehen nicht richtig übertragen werden!

                wie wäre es mit einer einfachen Debugausgabe im verarbeitenden Skript, das heißt in

                artikeleinstellen2.php

                schaust Du Dir den Inhalt von $_POST an. Die Funktion print_r() kann Dir dabei gute Dienst leisten. Es ist eine gute Idee, durch die Verwendung eines <pre>-Elementes für eine übersichtliche Ausgabe zu sorgen. Oftmals unterscheiden sich Erwartungshaltung und das, was man erhält.

                <?php  
                    # Schauen wir uns den Inhalt der superglobalen Variablen $_POST an.  
                    # Schließlich verwendest Du die Methode "POST"  
                    print "<pre>\n";  
                    print [link:http://de2.php.net/manual/de/function.htmlspecialchars.php@title=htmlspecialchars]([link:http://de2.php.net/manual/de/function.print-r.php@title=print_r]($_POST, true));  
                    print "</pre>\n";  
                ?>
                

                Wenn Du es noch genauer wissen willst, verwende var_dump(), um den Inhalt von $_POST zu analysieren. Nutze ebenfalls ein <pre>-Element, um eine übersichtliche Ausgabe zu erhalten.

                Freundliche Grüße

                Vinzenz

                1. Ok dh wenn ich dich richtig verstanden hab soll ich einfach das mal in artikeleinstellen2.php einfügen und ausführen?
                  gruß
                  Freddy

                  1. ok also ich lass mir das jetzt anzeigen nur ich komm nich drauf wie ich das eintragen kann!
                    so siehts zurzeit aus!

                    $kat = (explode('-', $_GET[$kategorie]));  
                      
                    				$kat[1] = $_POST['hauptkat'];  
                    				$kat[2] = $_POST['nebenkat'];  
                    				$name = $_POST['name'];  
                    				$bild = $_POST['bild'];  
                    				$preis = $_POST['preis'];  
                    				$beschreibung = $_POST['beschreibung'];  
                    			  
                    				  
                    			$eintrag = "INSERT INTO artikel (hauptkat, nebenkat, name, bild, preis, beschreibung)  
                    			VALUES ('$hauptkat', '$nebenkat', '$name', '$bild', '$preis', '$beschreibung')";  
                    	  
                    			$eintragen = mysql_query($eintrag);  
                      
                    			$abfrage = mysql_query("SELECT * FROM `artikel`  
                    			WHERE `hauptkat` LIKE '$hkat' AND nebenkat LIKE $nkat AND `name` LIKE '$ueberschrift' AND `beschreibung` LIKE '$beschreibung' AND `preis` LIKE '$preis' AND bild LIKE $bild");  
                    			    
                    

                    ich bin mir nich sicher ob ich $_GET[$kategorie] oder nur $kategorie machen muss bei explode! wie sieht das aus?

                    1. Hallo,

                      ok also ich lass mir das jetzt anzeigen nur ich komm nich drauf wie ich das eintragen kann!

                      ich weiß nicht, was Dein Code mit meinem Hinweis zu tun hat.
                      Ich weiß nur, dass das, was Du da zeigst, potentiell hochgradig gefährlich ist.

                      ich bin mir nich sicher ob ich $_GET[$kategorie] oder nur $kategorie machen muss bei explode! wie sieht das aus?

                      Ich habe keine Vorstellung davon, was überhaupt passieren soll. *Ich* kenne nur ein paar Codeausschnitte und habe keine Vorstellung, was sich davon in welcher Datei befindet und wie es Deiner Vorstellung nach zusammenarbeiten soll. Ich habe auch keinen blassen Schimmer davon, was sich in Deiner Datenbanktabelle befindet und was Du damit vorhast. Ich sehe nur, dass Du völlig leichtsinnig mit Benutzereingaben umgehst.

                      Ich habe *keine* funktionierende Glaskugel.

                      Freundliche Grüße

                      Vinzenz

                      1. ok Vinzenz ich versuche es so gut wie möglich zu erklären!
                        also ich habe ein Formular(welches du nicht als script wolltest) und dort werden daten eingetragen und per SELECT ausgesucht diese daten werden richtig übertragen, wie ich mit print_r festgestellt habe, nur wird dies nicht richtig eingetragen und mir geht es zurzeit auch nicht um sicherheit oder sonst irgendwelche sachen, mir geht es darum das es die sachen richtig ein die datenbank einträgt und das passiert mit allem auser mit der kategorie!
                        und da ist meine frage wie ich das mache ich denke mit explode ist eine gute idee nur tut er da nicht das was ich will :D
                        also wenn dir das hilft wäre es sehr nett wenn du mir dann auch weiterhelfen kannst!
                        gruß
                        Freddy

                        1. Hallo,

                          diese daten werden richtig übertragen, wie ich mit print_r festgestellt habe,

                          das ist schon einmal ein Schritt in die richtige Richtung.

                          nur wird dies nicht richtig eingetragen

                          jetzt müssten wir auch mal die Beispieldaten kennen, die nicht eingetragen werden.

                          und mir geht es zurzeit auch nicht um sicherheit

                          Doch: Sicherheit ist ein wichtiges Thema. Es kann sogar sein, dass die entsprechenden Maßnahmen dazu führen, dass die Daten eingetragen werden können.

                          also: wir benötigen

                          a) die Daten, die übertragen werden
                          b) das SQL-Statement nach dem Zusammenbauen

                          »             $eintrag  = "INSERT INTO artikel (hauptkat, nebenkat, name, bild, preis, beschreibung)  
                          
                          >             VALUES ('$hauptkat', '$nebenkat', '$name', '$bild', '$preis', '$beschreibung')";  
                            
                          # baue hier bitte eine Kontrollausgabe ein:  
                          echo htmlspecialchars($eintrag);  
                            
                          
                          >             $eintragen = mysql_query($eintrag);
                          
                          

                          c) die Fehlermeldung von MySQL

                          und hier gehört eine Fehlerbehandlung hin.
                          Wenn mysql_query fehlschlägt, dann erzählt Dir mysql_error(), was MySQL dazu zu sagen hatte.

                          if ($eintragen === false) {  
                              # INSERT fehlgeschlagen  
                              # Kontrollausgabe (das ist noch keine Fehlerbehandlung)  
                              echo [link:http://de2.php.net/manual/de/function.mysql-error.php@title=mysql_error]();  
                          }  
                          
                          

                          Bitte zeige uns, wie Dein SQL-Statement (die Ausgabe von $eintrag) und gegebenenfalls die Ausgabe von mysql_error() aussieht.

                          Freundliche Grüße

                          Vinzenz

                          1. jo das SQL zeug hab ich alles!
                            also die daten die übertragen werden sind die values die im select ausgesucht werden!

                            //SELECT START  
                            			echo '<select name="kategorie">';  
                            				while ( $kat = mysql_fetch_array($kresult) ){  
                            				//Hauptkategorie  
                            					echo '<optgroup label="'.$kat[3].'">';  
                            					$hk = $kat[1];  
                            					$uksql = "SELECT * FROM menu WHERE hauptkat=$hk AND nebenkat!=0";  
                            					$ukresult = mysql_query($uksql);  
                            						while ( $u_kat = mysql_fetch_array($ukresult) ){  
                            					//Nebenkategorie  
                            							echo '<option value="'.$u_kat[1].'-'.$u_kat[2].'">'.$u_kat[3].'</option>';  
                            						}  
                            					echo '</optgroup>';  
                            				}  
                            			echo '</select>';	  
                            		//SELECT ENDE
                            

                            die kategorie ist mit einem "-" getrennt!

                            wenn ich diese aber explode geht das nicht!
                            der wert wird richtig in das artikeleinstellen2.php übertragen aber von dort nicht richtig in die datenbank! Und mysql_error bringt keine fehlermeldung!

                            was soll ich dann machen?

                            1. Mahlzeit Freddy,

                              was soll ich dann machen?

                              Z.B. die Hinweise und Fragen von Vinzenz ernst nehmen - ich vermisse erneut, dass Du konkret darauf eingehst ... wie sollen Deine Leser Dir helfen, wenn Du es ihnen nicht ermöglichst?

                              MfG,
                              EKKi

                              --
                              sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
                            2. Hallo,

                              jo das SQL zeug hab ich alles!

                              aber ich nicht. Ohne die SQL-Anweisung kann ich Dir nicht helfen.

                              also die daten die übertragen werden sind die values die im select ausgesucht werden!

                              ja, ja. Da steht irgendwelcher PHP-Code. Ich bräuchte jedoch das erzeugte HTML, das Dir Dein Browser anzeigt und das Du über die Quelltextansicht lesen und für uns kopieren kannst.

                              [code lang=php]//SELECT START
                              echo '<select name="kategorie">';
                              while ( $kat = mysql_fetch_array($kresult) ){
                              //Hauptkategorie
                              echo '<optgroup label="'.$kat[3].'">';
                              $hk = $kat[1];
                              $uksql = "SELECT * FROM menu WHERE hauptkat=$hk AND nebenkat!=0";

                              Den Inhalt von $uksql benötige ich.
                              Den Inhalt nach Ausführung dieser Anweisung.
                              Den Inhalt, wie ihn

                              echo $uksql;

                              ausspuckt.
                              Nein, ich weiß nicht, was in $hk steht.

                                			$ukresult = mysql\_query($uksql);  
                              

                              Es fehlt die Fehlerbehandlung.

                              Bitte die Ausgabe von mysql_error() an dieser Stelle, wenn etwas schiefgegangen ist, posten.

                              Dass Du hier einen (Self-)join imitierst und das überflüssig und fehleranfällig ist, wurde Dir bereits gesagt.

                                				while ( $u\_kat = mysql\_fetch\_array($ukresult) ){  
                                			//Nebenkategorie  
                                					echo '<option value="'.$u\_kat[1].'-'.$u\_kat[2].'">'.$u\_kat[3].'</option>';  
                              

                              und Du glaubst, ich wüsste, was in den Spalten mit den entsprechenden Spaltennummern Deiner Tabelle steht? Ich schrieb Dir doch, dass ich das nicht weiß, dass ich aber diese Information *unbedingt* benötige, um gegebenenfalls einen Fehler lokalsieren zu können

                              die kategorie ist mit einem "-" getrennt!

                              Oh ja, *das* sehe ich.

                              wenn ich diese aber explode geht das nicht!

                              Da ich keine Ahnung habe, welchen Wert Du mit explode() aufteilen willst, kann ich Dir nicht helfen. Wir brauchen konkrete Werte. Dieser Code ist nicht besonders hilfreich, diesen Code hast Du ja schon gepostet. Wir wissen aber nicht, mit welchen Daten dieser Code arbeiten muss - und was dabei schiefgeht.

                              Freundliche Grüße

                              Vinzenz

                              1. Ok viele dank euch allen hat sich erledigt habe mein fehler gefunden und habe es gelöst!
                                danke euch allen
                                gruß
                                Freddy

                    2. Hallo,

                      $kat = (explode('-', $_GET[$kategorie]));

                      und $kategorie enthält den richtigen Schlüssel?

                        		$kat[1] = $\_POST['hauptkat'];  
                        		$kat[2] = $\_POST['nebenkat'];  
                      

                      Watt denn nu - benutzt du POST oder GET? Im Normalfall sollte man sich für eine Methode entscheiden.

                      ich bin mir nich sicher ob ich $_GET[$kategorie] oder nur $kategorie machen muss bei explode!

                      Mir ist nicht klar, was du überhaupt erreichen willst. Wolltest du nicht einfach das gesamte $_GET- oder $_POST-Array mit print_r() oder var_dump() ausgeben?

                      So long,
                       Martin

                      --
                      F: Was ist eigentlich aus deinem schlimmen Durchfall geworden?
                      A: Mein Arzt hat mir Valium verschrieben.
                      F: Und das hilft?
                      A: Naja, ich mach mir immer noch in die Hose. Aber inzwischen ist es mir egal.
              2. 'ǝɯɐu$ ıɥ

                wenn ich es euch nochnicht gezeigt hab dann habe ich sowas noch nicht!
                und das mit dem select habe ich jetzt weg gemacht war ein dumme idee :D geb ich selber zu!
                aber was hat das mit meinem problem zutun?
                mein problem ist das die variablen der "kategorie" also die hinter dem begriff stehen nicht richtig übertragen werden!

                lass dir doch mal den inhalt von post anzeigen - das komplette array, fehlt dort auch die variable stimmt deine db abfrage nicht...

                ssnɹƃ
                ʍopɐɥs

                --
                Answers: $1, Short: $5, Correct: $25, dumb looks are still free ...
              3. Hi,

                mein problem ist das die variablen der "kategorie" also die hinter dem begriff stehen nicht richtig übertragen werden!

                Und woher sollen wir wissen, was du dabei falsch machst, wenn du uns nicht zeigst, was du überhaupt machst?

                Da brauchst du nicht trotzig jeden Satz mit einem Ausrufezeichen zu beenden, wenn du lediglich darauf hingewiesen wirst, dass die Informationen, die du uns lieferst, einfach unbrauchbar sind, um nachvollziehen zu können, was dein Problem ist.

                mein problem ist das die variablen der "kategorie" also die hinter dem begriff stehen nicht richtig übertragen werden!

                Das behauptest du immer noch, ja ... es ist aber als Problembeschreibung immer noch analog zu einem „funzt nich“, und damit ist nichts anzufangen.

                Anstatt einfach deine Pauschalaussagen zu wiederholen und alles mit Ausrufezeichen zu versehen, beantworte die (impliziten) Rückfragen, die dir gestellt werden.

                MfG ChrisB

                --
                “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]