#1 17. August 2008 Mehrfachauswahl richtig übergeben? Ja ich bins schon wieder ... Jetzt hat sich bei mir ein neues Problem herauskristalisiert! Wenn ich bei meinem Script eine Artikel anlege, dann habe ich im Formular ein Listenfeld mit Mehrfachauswahl. Nun Wähle ich dann zb. 5 Kategorien aus und übergeben diese via POST. Und jede Kategorie erzeugt einen extra Eintrag in der Datenbank. Wie geht das? Mit einer While Schleife? Wie übergebe ich den Wert richtig an eine Variable das dass dan auch so läuft? Hoffe ihr könnt mir folgen! BW gibts natürlich, danke + Multi-Zitat Zitieren
#2 17. August 2008 AW: Mehrfachauswahl richtig übergeben? kommt darauf an, wie du die namen etc. der checkboxen gewählt hast.. wenn dieser z.B. ein array ist, könntest du die post daten dann per foreach() auswerten + Multi-Zitat Zitieren
#3 17. August 2008 AW: Mehrfachauswahl richtig übergeben? ich habe keine checkbox gemacht sondern ein listfeld ... ähh wie mach ich das zb mit dem array??? das mit foreach ahb ich mir schon überlegt, aber das mit dem array hab ich nicht hinbekommen! + Multi-Zitat Zitieren
#4 17. August 2008 AW: Mehrfachauswahl richtig übergeben? z.B. wenn du die inputs durch eine while schleife erstellst: daten[$i][name] $i als laufvariable, falls keine schleife verwendet wird kannst du auch für $i 0,1,2,3... einsetzen. und name einfach als platzhalter für das element unter dem der wert gespeichert wird und nach dem post rufst du es so auf.. foreach ($_POST['daten'] as $k) { und dann normal wie beim array auf die werte zugreifen } + Multi-Zitat Zitieren
#5 17. August 2008 AW: Mehrfachauswahl richtig übergeben? stimmt das so???? Code: $i = 1; while($_POST['kategorien']){ $kategorie[$i]=$_POST['kategorien']; $i++; } foreach($kategorie as $katid){ echo $katid; } + Multi-Zitat Zitieren
#6 17. August 2008 AW: Mehrfachauswahl richtig übergeben? kann ich schlecht einschätzen.. kannst du den ausschnitt deines quelltextes posten? + Multi-Zitat Zitieren
#7 17. August 2008 AW: Mehrfachauswahl richtig übergeben? das ist alles was relevant ist Code: }elseif($_GET['action'] == 'newpresent'){ if(!$loggedin) die('Bitte einloggen!'); $user = mysql_query("SELECT premium FROM present_user WHERE id='$idofuser'"); $du=mysql_fetch_array($user); $premium = $du['premium']; if($premium == 1){ $bild= 'max. 120*120 Pixel'; $link= '<tr> <td><div align="right">Link:</div></td> <td><input name="link" type="text" id="link" value="http://" /></td> </tr>'; }else{ $link= ''; $bild= 'max. 90*90 Pixel'; } ?><form action="index.php?site=geschenke&action=save" method="post" enctype="multipart/form-data" name="post"> <table width="90%" border="0" align="center" cellpadding="2" cellspacing="2"> <tr> <td colspan="2" height="20" class="title"><h3>Neues Geschenk :<br /> </h3> </td> </tr> <tr> <td colspan="2"></td> </tr> <tr> <td width="250"><div align="right">* Name:</div></td> <td width="1036"><input name="name" type="text" class="form_off" id="name" onFocus="this.className='form_on'" onBlur="this.className='form_off'" size="30" maxlength="30"></td> </tr> <tr> <td width="250" align="right">Bild:</td> <td ><input name="bild" type="file" id="bild" /> <br> <? echo $bild; ?></td> </tr> <tr> <td width="250" align="right" valign="top"> </td> <td align="left" valign="top"> </td> </tr> <tr> <td width="250" align="right" valign="top">* Beschreibung:</td> <td align="left" valign="top"><textarea name="beschreibung" cols="25" rows="7" class="form_off" id="beschreibung" onFocus="this.className='form_on'" onBlur="this.className='form_off'"></textarea></td> </tr> <tr> <td width="250"><div align="right">* Preis:</div></td> <td><input name="preis" type="text" id="preis" /> € <br> <br></td> </tr> <tr> <td width="250"><div align="right">* gesehen bei: </div></td> <td><input name="seen" type="text" id="seen" /> <br> (keine Links erlaubt, <a class="stobern" href="index.php?site=getpremium"> >> Premiumuser werden</a>) <br> <br></td> </tr> <? echo $link;?> <tr> <td width="250"><div align="right">* Kategorien:</div></td> <td align="left" valign="middle"><table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td width="130" align="left" valign="middle"><? $gamesquads=mysql_query("SELECT name FROM present_art ORDER BY id"); while($ds=mysql_fetch_array($gamesquads)) { $hometeam.= '<option value="0">'.$ds['name'].'</option>'; $squadmembers=mysql_query("SELECT * FROM present_kategorien WHERE art='".$ds['name']."' ORDER BY id"); while($dm=mysql_fetch_array($squadmembers)) { $hometeam.= '<option value="'.$dm['id'].'"> - '.$dm['name'].'</option>'; } $hometeam.= '<option value="0"> </option>'; } echo '<select name="kategorien" size="5" multiple="multiple">'.$hometeam.'</select>'; ?></td> <td align="left" valign="middle">(für eine Mehrfachauswahl beim Auswhälen die 'Strg'-Taste gedrückt halten!<br> <br></td> </tr> </table> </td> </tr> <tr> <td width="250"></td> <td><input name="save" type="submit" value="absenden" /> (alle Felder mit * sind Pflichtfelder!) </td> </tr> </table> </form> <? }elseif($_GET['action'] == 'save'){ if(!$loggedin) die('Bitte einloggen!'); if($_POST['save']){ $user = mysql_query("SELECT premium FROM present_user WHERE id='$idofuser'"); $du=mysql_fetch_array($user); $premium = $du['premium']; if($premium == 1) $premiumfeld = 2; else $premiumfeld = 3; $name = $_POST['name']; $beschreibung = $_POST['beschreibung']; $bild = $_FILES[bild]; $preis = $_POST['preis']; $seen = $_POST['seen']; $link = $_POST['link']; //$kategorie = $_POST['kategorien']; //echo $kategorie; $i = 1; while($_POST['kategorien']){ $kategorie[$i]=$_POST['kategorien']; $i++; } foreach($kategorie as $katid){ echo $katid; } Errormessage: Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 35 bytes) in C:\xampp\htdocs\present\geschenke.php on line 184 ich hab no plan + Multi-Zitat Zitieren
#8 17. August 2008 AW: Mehrfachauswahl richtig übergeben? also du hast 2 verschachtelte while schleifen.. willst du diese getrennt voneinander auswerten? oder gehören diese zusammen + Multi-Zitat Zitieren
#9 17. August 2008 AW: Mehrfachauswahl richtig übergeben? Code: $gamesquads=mysql_query("SELECT name FROM present_art ORDER BY id"); while($ds=mysql_fetch_array($gamesquads)) { $hometeam.= '<option value="0">'.$ds['name'].'</option>'; $squadmembers=mysql_query("SELECT * FROM present_kategorien WHERE art='".$ds['name']."' ORDER BY id"); while($dm=mysql_fetch_array($squadmembers)) { $hometeam.= '<option value="'.$dm['id'].'"> - '.$dm['name'].'</option>'; } $hometeam.= '<option value="0"> </option>'; } du meisnt das oder??? das ist zum erstellen des list feldes! so sieht das gesamte formular aus und darunter is dann die andere auswertung mit dem Code: $i = 1; while($_POST['kategorien']){ $kategorie[$i]=$_POST['kategorien']; $i++; } foreach($kategorie as $katid){ echo $katid; } kopier das ganze mal in deine entwicklungsumgebung dann siehst das besser und kommst vll auf die lösung ^^ + Multi-Zitat Zitieren
#10 17. August 2008 AW: Mehrfachauswahl richtig übergeben? Tipp am Rande: Du machst das ja so: Oberbegriff [id:0] - Unterbegriff [id:1] - Unterbegriff [id:2] leer [id:0] ... Schonmal was von <optgroup> gehört? (Es sei denn natürlich du willst "Oberbegriff" auch zur Auswahl stellen, denk ich aber mal nicht, allein wegen ID 0..) + Multi-Zitat Zitieren
#11 17. August 2008 AW: Mehrfachauswahl richtig übergeben? um das gehts ja gar nicht, das is einfach ansichtssache, es geht darum, wie ich das array über das formular befülle und dann mithilfe dieses array einträge in die dantebnak mache! ich mach am besten morgen mal einen screener!!! aber wäre c00l wenn ihrs dennoch schon lösen könnt! + Multi-Zitat Zitieren
#12 17. August 2008 AW: Mehrfachauswahl richtig übergeben? Sende dein Formular ab und in der Datei wo du's auslesen willst: print '<pre>'.print_r($_POST,true).'</pre>'; Dann siehst du, wie du es verwenden kannst. + Multi-Zitat Zitieren
#13 30. August 2008 Zuletzt von einem Moderator bearbeitet: 14. April 2017 AW: Mehrfachauswahl richtig übergeben? also ich habs immer noch nicht gerafft oO =((( es funktioniert einfach nichts was ich ausprobiere! hier mal ein screener vll könnt ihr es auch dann besser vorstellen! https://www.xup.in/dl,18437841/Unbenannt-2.jpg/ + Multi-Zitat Zitieren
#14 30. August 2008 AW: Mehrfachauswahl richtig übergeben? Beispiel: PHP: <form action='bla.php' method='POST'> <select multiple name='kategorien[]'> <!-- "name ='kategorien[]' " = feld ! --> <option value=''><?php echo $hometeam ?></option> </select> <input type='submit' name='gesendet'></form> <?php for ( $i = 0 ; $i < sizeof ( $_POST [ 'kategorien' ]) ; $i ++){ if (isset( $_POST [ 'kategorien' ][ $i ] { //kram um DB eintrag anzulegen mit inhalt aus $_POST['kategorien'][$i] }} ?> die optionen die bei dir aus $hometem kommen, werden nach auswahl und abschicken des formulars im numerisch indizierten Feld kategorien[] übergeben. das kannst du dann z.b. mit for & if auslesen. hoffe das hat einigermaßen geholfen. gruß Bomberpilot + Multi-Zitat Zitieren
#15 30. August 2008 AW: Mehrfachauswahl richtig übergeben? while($_POST['kategorien']){ da hast ne endlosschleife. for ($i = 0 ; $i < sizeof($_POST['kategorien']) ; $i++) da hast nen unötigen overhead mach es so: PHP: foreach( $_POST [ 'kategorien' ] as $kategorie ) { //mach was mit $kategorie } btw, wenn du was in eine tabelle eintragen möchtest, reicht ein query für alle inserts. Code: INSERT INTO foo (bar) VALUES ('blah'), -- zeile 1 ('blub'), -- zeile 2 ('lala'); -- zeile 3, ";" => ende + Multi-Zitat Zitieren
#16 30. August 2008 AW: Mehrfachauswahl richtig übergeben? foreach kA er behandelt das so als würde er keine werte erhalten oO ... so weit war ich auch schon und zum 2. vorschlag, nein geht leider nicht! jede kategorie muss eienn extra eintrag erzeugen also muss es wohl mit foreach gehen! ja is elegant funktioniert aber nicht. hier mein script zum speichern: PHP: elseif( $_GET [ 'action' ] == 'save' ){if(! $loggedin ) die( 'Bitte einloggen!' );if( $_POST [ 'save' ]){ $user = mysql_query ( "SELECT premium FROM present_user WHERE id=' $idofuser '" ); $du = mysql_fetch_array ( $user ); $premium = $du [ 'premium' ]; if( $premium == 1 ) $premiumfeld = 2 ; else $premiumfeld = 3 ; $name = $_POST [ 'name' ]; $beschreibung = $_POST [ 'beschreibung' ]; $bild = $_FILES [ bild ]; $preis = $_POST [ 'preis' ]; $seen = $_POST [ 'seen' ]; $link = $_POST [ 'link' ]; $kategorie = $_POST [ 'kategorien' ]; if(!( strlen ( trim ( $name )))) $error []= "Geschenkname eingeben!" ; if(!( strlen ( trim ( $beschreibung )))) $error []= "Beschreibung eingeben!" ; if(!( strlen ( trim ( $preis )))) $error []= "Preis angeben!" ; if(!( strlen ( trim ( $seen )))) $error []= "Gesehen bei eingeben!" ; if(!( strlen ( trim ( $kategorie )))) $error []= "Bitte mindestens eine Kategorie angeben!" ; if( is_array ( $error )) { echo '<b>Ein Fehler ist aufgetreten!</b><br><br>' ; foreach( $error as $err ) { echo '<li>' . $err . '</li>' ; } echo '<br><br><input type="button" class="button" onClick="javascript:history.back()" value="Zurück">' ; } else { mysql_query ( "INSERT INTO `present_geschenk` (`name`, `bild`, `userid`, `preis`, `beschreibung`, `seen`, `link`, `premiumfeld`, `grundsperre`) VALUES (' $name ', ' $bild ', ' $idofuser ', ' $preis ', ' $beschreibung ', ' $seen ', ' $link ', ' $premiumfeld ', 'neues Geschenk')" ); $geschenkid = mysql_insert_id (); foreach( $_POST [ 'kategorien' ] as $katid ){ mysql_query ( "INSERT INTO `present_geschenk_kategorien` (`geschenkid`, `kategorieid`) VALUES (' $geschenkid ', ' $katid ')" ); } echo 'Ihr Artikel wurde erfolgreich eingetragen' ; }}else{ echo '<br> Bitte zuerst das Formular ausfüllen!' ; } } bild von der eingabemaske habt ihr ja ! + Multi-Zitat Zitieren
#17 30. August 2008 AW: Mehrfachauswahl richtig übergeben? hast du denn das HTML: <select multiple name='kategorien[]'> im formular gemacht oder bist bei deinem name='kategorien' geblieben? ich hab extra nochmal in meinem schlauen buch nachgelesen, und laut diesem ist es wichtig, das kategorien schon im formular als feld deklariert wird. aber man lernt nie aus, wenn das also egal sein sollte, sagts mir ruhig + Multi-Zitat Zitieren
#18 31. August 2008 AW: Mehrfachauswahl richtig übergeben? PHP: foreach( $_POST [ 'kategorien' ] as $katid ){ mysql_query ( "INSERT INTO `present_geschenk_kategorien` (`geschenkid`, `kategorieid`) VALUES (' $geschenkid ', ' $kategorie ')" ); } In der foreach sagst du $katid aber unten benutzt du $kategorie - ? + Multi-Zitat Zitieren
#19 2. September 2008 AW: Mehrfachauswahl richtig übergeben? ja hab ich ned darauf geachtet, aber das is derziet noch egal, weil es ja sowieso nicht funktioniert!!! @ Bomberpilot ähh hrhr das hab ich wieder übersehen, gibm ir 5 minuten, wenn das jetzt geht, dann muss ich aus dem fenster springen!!! nein bei mir sieht es so aus! und auch mit deinem beispiel funktioniert es leider nicht =(( Code: <select name="kategorien" size="5" multiple="multiple"> ich mein gibts es denn das??? das kann doch ned sein, es wird alles übergeben, nur eben beim post von den kategorien spinnt alles herum! ES GEHT ... ich weis zwar nicht was ich gemacht habe, aber jetzt geht es DD alter nochmal danke an alle! wenn ich euch jetzt noch einmal bewerten kann mach ich das sonst, müsst ihr leider mit meiner tiefsten dankbarkeit leben DDDDDD + Multi-Zitat Zitieren