ilch Forum » Allgemein » HTML, PHP, SQL,... » PHP und Checkbox

Geschlossen
  1. #1
    User Pic
    Son!c Hall Of Fame
    Registriert seit
    14.09.2006
    Beiträge
    3.766
    Beitragswertungen
    5 Beitragspunkte
    Hi zusammen,

    Ich baue gerade ein Referenz-Modul für mich, soweit klappt alles, außer eine Sache mit den Leistungen. Und zwar wenn man eine neue Referenz erstellt, kann man mehrere Leistungen auswählen wie Webdesign, Logodesign, usw. Pro Leistung eine Checkbox. Wenn ich dort jetzt mehrere Auswähle wird in die Datenbank immer nur das letzte eingetragen.

    'ne Idee wie ich das beheben kann?

    Gruß
    Sonic


    Zuletzt modifiziert von Son!c am 16.07.2009 - 08:57:51
    Nimm das Leben nicht zu ernst, du kommst sowieso nicht lebend raus.
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    annemarie gelöschter User
    code? bitte.
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    Son!c Hall Of Fame
    Registriert seit
    14.09.2006
    Beiträge
    3.766
    Beitragswertungen
    5 Beitragspunkte
    <input name="leistungen" value="2," type="checkbox">Webdesign<br><input name="leistungen" value="3," type="checkbox">Logo Design<br>
    [..]


    <?php
    [..]
    $leistungen = $_POST["leistungen"];
    $query = mysql_query("INSERT INTO anjin_referenzen ([..], `leistungen`) VALUES ( [..], '$leistungen') ");


    Mir is schon klar das das so nicht geht, allerdings weiss ich nicht wie ich das anderst machen kann. Ich hätte zwar eine Idee wie ich das umsetzten könnte, allerdings ist mir das "zu viel".
    Nimm das Leben nicht zu ernst, du kommst sowieso nicht lebend raus.
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    annemarie gelöschter User
    $_POST["leistungen"] ist auch n array, bitte nocheinmal die html checkbox referenz lesen.

    <?php
    [..]
    $leistungen = $_POST["leistungen"];
    
    // Prüfen auf array, es kann auch keine checkbox markiert sein!
    if(!is_array($leistungen)) {
    [...]
    }else {
    $leistungs_string = NULL;
     foreach($leistungen as $leistung) {
      $leistungs_string .= $leistung.',';
     }
    }
    //Letztes komma entfernen
    $leistungs_string = substr($leistungs_string,0,-1);
    $query = mysql_query("INSERT INTO anjin_referenzen ([..], `leistungen`) VALUES ( [..], '$leistungs_string') ");


    so speicherst du die leistungs IDs in dem format ab "1,24,53,12", dann kannste das wieder zum array machen durch explode und weiterverwerten.

    das sollte als gedankenstütze reichen


    Zuletzt modifiziert von annemarie am 16.07.2009 - 10:12:48
    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    Son!c Hall Of Fame
    Registriert seit
    14.09.2006
    Beiträge
    3.766
    Beitragswertungen
    5 Beitragspunkte
    hm ... das funktioniert irgendwie nicht so, in der datenbank wird dann bei leistungen gar nix eingetragen. und verstehen tu ich das ganze grad auch nicht

    total verwirrt grumml
    Nimm das Leben nicht zu ernst, du kommst sowieso nicht lebend raus.
    0 Mitglieder finden den Beitrag gut.
  6. #6
    User Pic
    annemarie gelöschter User
    checkboxen in HTML

    ZitatZitat geschrieben von selfHTML
    Im Gegensatz zu Radiobuttons müssen Checkboxen keine identische Namen haben, um zu funktionieren. Es ist aber hinsichtlich des auswertenden Skripts eventuell sehr sinnvoll, identische Namen zu verwenden, weil das Skript dann automatisch ein Array anlegt.

    Für PHP-Nutzer der Hinweis: Das automatische Anlegen eines Arrays funktioniert nur, wenn der Name des Feldes mit eckigen Klammern endet: name="zutaten[]"


    das sollte dich schlauer machen!

    (ok, ich dachte der array wird jedenfalls automatisch erstellt, also wenn du deine leistungen im html um jeweils ne [] erweiterst solltest du auch dein array bekommen.)

    lass dir während der entwicklung lieber das post array ausgeben bzw. den string den er erstellt anstatt die DB zu checken ob er etwas eingetragen hat.


    Zuletzt modifiziert von annemarie am 16.07.2009 - 11:17:16
    0 Mitglieder finden den Beitrag gut.
  7. #7
    User Pic
    Son!c Hall Of Fame
    Registriert seit
    14.09.2006
    Beiträge
    3.766
    Beitragswertungen
    5 Beitragspunkte
    wow, danke. soweit funktioniert das jetzt lächeln

    allerdings hab ich jetzt auch noch ein problem mit dem bearbeiten von einer referenz. dort sollen ja dann die leistungen die ausgewählt worden sind, von anfang an als checked makiert sein. das problem ist, ich weiss noch nicht wie ich das umsetzten kann/soll.

    vielleicht kannst du/ihr mir ja wieder helfen lächeln

    danke schonmal
    Nimm das Leben nicht zu ernst, du kommst sowieso nicht lebend raus.
    0 Mitglieder finden den Beitrag gut.
  8. #8
    User Pic
    Ithron Hall Of Fame
    Registriert seit
    21.01.2006
    Beiträge
    2.659
    Beitragswertungen
    24 Beitragspunkte
    Wenn du mit dem ilch Template arbeitest machst du im im input tag noch vor > einfach {checked1} (beim zweiten input halt {checked2} usw).

    In der php Datei fragst du dann ab ob die leistung aktiv ist und wenn ja gibst du für {checked1} dann checked="checked" aus.
    ZitatZitat geschrieben von loW

    Ja ich habs gesehen und wenn ichs kostenlos bekomm dann zahl ich doch nix dafür oder?
    0 Mitglieder finden den Beitrag gut.
  9. #9
    User Pic
    Son!c Hall Of Fame
    Registriert seit
    14.09.2006
    Beiträge
    3.766
    Beitragswertungen
    5 Beitragspunkte
    Ich arbeite nicht mit dem ilch Template sondern mit einem eigenen, das aber so ähnlich funktioniert.

    Außerdem würde das nicht funktionieren, da die Leistungen dynamisch sind. D.h. die Leistungen werden auch aus einer Datenbank Tabelle gelesen. Aber das konntet ihr so ja bis jetzt nicht wissen zwinker

    Bis jetzt schaut das ganze so aus:
    <?php
    $query = mysql_query("SELECT * FROM anjin_referenzen WHERE id = $id");
    $row = mysql_fetch_assoc($query);
    
    $query2 = mysql_query("SELECT id, icon, name FROM anjin_leistungen");
    	if( mysql_num_rows($query2) == 0){
    		$leist = 'Bitte legen Sie zuerst Leistungen an.';
    	}
    	while( $row2 = mysql_fetch_assoc($query2) ){
    		
    		$icon = '<img src="images/icons/leistungen/'.$row2["icon"].'" height="16" width="16"> ';
    		$name = $row2["name"];
    		$id = $row["id"];
    		$leist .= '<input type="checkbox" name="leistungen" value="'.$id.'"'.$check.'>'.$icon.$name.'<br>';
    	}


    Allerdings weiß ich eben nicht, wie ich das mit dem $check machen kann :/


    Zuletzt modifiziert von Son!c am 16.07.2009 - 11:49:02
    Nimm das Leben nicht zu ernst, du kommst sowieso nicht lebend raus.
    0 Mitglieder finden den Beitrag gut.
  10. #10
    User Pic
    annemarie gelöschter User
    *narf*

    <?php
    // datenbankfeld mit den leistungen ist $row['leistungen']
    
    //check ob mehrere werte drin sind da sonst explode unsinnig ist
    if(eregi(',',$row['leistungen'])) {
     $row['leistungen'] = explode(',',$row['leistungen']);
    }
    //check ob vielleicht nur 1 value drinsteht wenn schon nix kommasepariert wurde
    else if(!empty($row['leistungen'])){
    	$temp = $row['leistungen']
    	// überschreiben für späteres foreach zur fehlerprävention
    	$row['leistungen'] = array();
    	// somit haben wir die selbe struktur mit einen eintrag erstellt wie es das explode mit mehreren machen würde
    	$row['leistungen'][] = $temp;
    }
    
    
    
    // wenn der obere aufbereitungsblock funktioniert hatte ist $row['leistungen'] auf jedenfall ein array, prüfen da sonst das foreach fehler wirft wenns das nicht ist
    if(is_array($row['leistungen'])) {
    	foreach($row['leistungen'] as $leistung) {
    		/* jetzt nehme ich mal ayn das du alle leistungen hardgecodet im template hast und ilch benutzt, sonst wär der andere weg eleganter und flexibler
    			dann musste wohl deine einzelnen boxen mit {checkbox_logodesign}, {checkbox_webdesign} usw beschriften
    		*/
    		switch($leistung){
    			// gartenarbeit
    			case 1:
    				{checkbox_gartenarbeit} = 'selected="selected"';
    			break;
    			// omas helfen
    			case 2:
    				{checkbox_omas_helfen} = 'selected="selected"';
    			break;
    			
    			usw
    		}
    	}
    }
    ?>


    php.net/switch

    ach und das
    $leistungs_string = NULL;
     foreach($leistungen as $leistung) {
      $leistungs_string .= $leistung.',';
     }


    sollte auch mit implode(',',$leistungen) gehen

    *narf*


    Zuletzt modifiziert von annemarie am 16.07.2009 - 11:59:55
    0 Mitglieder finden den Beitrag gut.
  11. #11
    User Pic
    Son!c Hall Of Fame
    Registriert seit
    14.09.2006
    Beiträge
    3.766
    Beitragswertungen
    5 Beitragspunkte
    dank dir annemarie lächeln

    hab das n bisschen anderst gemacht, was dann zwar nicht mehr valide ist aber das ist mir momentan egal - ist eh nur der admin bereich wo niemand hin kommt ^^
    Nimm das Leben nicht zu ernst, du kommst sowieso nicht lebend raus.
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu HTML, PHP, SQL,...

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten