Zum Forum springen
Checkbox-Values via...
 
Benachrichtigungen
Alles löschen

Checkbox-Values via Ajax/Javascript direkt in die Datenbank schreiben

6 Beiträge
3 Benutzer
0 Reactions
247 Ansichten
Kellerlanplayer
Beigetreten: 02.12.2006

Ich bin kein ausgewiesener JQuery Experte, vielleicht könnt ihr mich ja auf die richtige Spur lotsen.

Ich möchte eine Emailbenachrichtigung umsetzen, mit den Optionen
Bei jeder neuen News (optionsid = 0)
Stündlich (optionsid = 1)
2x täglich (optionsid = 2)
1x täglich (optionsid = 3)

Dazu möchte ich die userid, um welchen "Tag" (tagid) es sich dabei handelt und die optionsid in eine Datenbank schreiben.
Dies soll automatisch via Jquery passieren und ein Request bei jeder Änderung ausgelöst werden.

Der HTML-Bereich:

Spoiler
global $wpdb;
  $userid = get_current_user_id();  
  $schonabonniertabfrage = $wpdb->get_results( "SELECT benachrichtigungsmodus FROM XXXX WHERE tagid ='".$tagid."' AND userid ='".$userid."' AND userid != 0" );

  //durchsuchbares array daraus machen
  $schonabonniert = array();
  foreach ($schonabonniertabfrage as $abonniert)
  {
    $benachrichtigungsmodus = (int)$abonniert->benachrichtigungsmodus;
    array_push($benachrichtigungsmodus, $schonabonniert);
  }
  
  //checkboxen anzeigen  
  echo '<input type="hidden" value="'.$userid.'" id="userid" />';
  echo '<input type="hidden" value="'.$tagid.'" id="tagid" />';
  
  //Modus0
  echo '<div class="dyncheckboxen">';
  echo '<input name="benachrichtigungsoption" id="benachrichtigungsoption" type="checkbox" class ="editbox" value="0"';
  if (array_search(0, $schonabonniert) === true)
  {
    echo 'checked="checked"';
  }
  echo '><label>Bei jeder neuen News</label></div>';
  
  //Modus 1
  echo '<div class="dyncheckboxen">';
  echo '<input name="benachrichtigungsoption" id="benachrichtigungsoption" type="checkbox" class ="editbox" value="1"';
  if (array_search(1, $schonabonniert) === true)
  {
    echo 'checked="checked"';
  }
  echo '><label>Stündlich</label></div>';

  //Modus 2
  echo '<div class="dyncheckboxen">';
  echo '<input name="benachrichtigungsoption" id="benachrichtigungsoption" type="checkbox" class ="editbox" value="2"';
  if (array_search(2, $schonabonniert) === true)
  {
    echo 'checked="checked"';
  }
  echo '><label>2x täglich</label></div>';

  //Modus 3
  echo '<div class="dyncheckboxen">';
  echo '<input name="benachrichtigungsoption" id="benachrichtigungsoption" type="checkbox" class ="editbox" value="3"';
  if (array_search(3, $schonabonniert) === true)
  {
    echo 'checked="checked"';
  }
  echo '><label>1x täglich</label>';
  echo "</div>";

JS-Bereich

Spoiler
    <script type="text/javascript">
  $(document).ready(function()
  {
      $(".dyncheckboxen").click(function().change(function()
      {
      var tagid = document.getElementById("tagid").value;
      var userid = document.getElementById("userid").value;
      var data =  document.getElementById("benachrichtigungsoption").value;
      var dataString = "tagid=" + tagid + "&userid=" + userid + "&value=" + data;
   
      $.ajax({
          type: "POST",
          url: "update_ajax.php",
          data: dataString,
          cache: false,
          success: function(data)
          {
            $("#dyncheckboxen").html(data);
          },
          error: function(data)
          {
          alert("Es ist ein Fehler aufgetreten!");
          }
      });
      });
  });
  </script>

PHP-Bereich
(hier fehlt noch die Überprüfung ob schon eingetragen, aber das ist erstmal wayne)

Spoiler
global $wpdb;

  $userid = esc_sql($_POST['userid']);
  $tagid = esc_sql($_POST['tagid'];
  $benachrichtigungsmodus = esc_sql($_POST['value']);
  
  $wpdb->insert( 
              	'XXXXX', 
              	array( 
              		'userid' => $userid, 
              		'tagid' => $tagid,
                  'benachrichtigungsmodus' => $benachrichtigungsmodus 
              	), 
              	array( 
              		'%d', 
              		'%d',
                  '%d' 
              	) 
              );

Der Fehler wird sicherlich im Javascript bereich liegen, leider passiert gar nichts, wenn ich die Checkboxen klicke.
Angezeigt werden sie ohne Fehler

Bin über jeden Tipp sehr dankbar :)


Antwort
Zitat
5 Antworten
berxwedan
Beigetreten: 17.02.2009

Ich habe deinen Fehler jetzt nicht gefunden, aber würde dir sehr ans Herz legen, dich mal mit Smarty auseinander zu setzen um PHP Code getrennt von HTML zu halten.

Ansonsten würde ich mir diesen Teil

.click(function().change(function()

nochmal genauer angucken. Muss aber auch gestehen, dass ich eher nicht so fähig bin, was das Frontend angeht (im Backend auch nicht, aber immerhin weniger unfähig :P) und mich jedesmal Schritt für Schritt neu einarbeiten muss.

Grüße und viel Erfolg bei der Fehlersuche!


Antwort
Zitat
flowIIpoker
Beigetreten: 14.02.2007
array_push($benachrichtigungsmodus, $schonabonniert);

ist das nicht gerade falsch rum?!?


Antwort
Zitat
Kellerlanplayer Themenstarter
Kellerlanplayer
Beigetreten: 02.12.2006

@berxwedan: Danke für den Tipp, werd ich mir anschauen.
Den Bereich hab ich schon lange angestarrt
Ich muss natürlich das Zeug mal von Vorne anfangen zu lernen, jetzt wärs aber cool, wenn das so funktionieren würd und mir einer helfen könnt :)

Original von flowIIpoker

array_push($benachrichtigungsmodus, $schonabonniert);

ist das nicht gerade falsch rum?!?

hast recht :) aber ändert leider nichts an dem Hauptproblem ^^


Antwort
Zitat
flowIIpoker
Beigetreten: 14.02.2007

php bereich zeile 4

 $tagid = esc_sql($_POST['tagid'];

da fehlt die schliessende klammer


Antwort
Zitat
berxwedan
Beigetreten: 17.02.2009

Lässt du dir keine Fehler ausgeben? Gerade solche Sachen wie fehlende Syntax etc. werden ja dann direkt angezeigt.

Na gut, hab jetzt doch mal nachgeguckt und hätte den Javascript Teil irgendwie folgendermaßen geschrieben

$(".dyncheckboxen").click(function() {
    //deine Funktion   
});

Keine Ahnung, ob dadurch dein Problem gelöst wird, den Rest habe ich mir jetzt nicht angesehen.

Wenn du ein Change Event triggern willst, ersetzt du click einfach durch change.

https://api.jquery.com/change/
https://api.jquery.com/click/

Für PHP relevante Sachen ist php.net unersetzlich.

Weiterhin viel Spaß und Erfolg. Ich würde gerne mehr helfen, bin allerdings gerade auf dem Sprung in den Urlaub. Wenn du bis Freitag nächste Woche nicht weiter gekommen bist, schau ich mir das nochmal genauer an :P

Edit:

 success: function(data)
          {
            $("#dyncheckboxen").html(data);
          },

Willst du an der Stelle eine ID oder die Klassen von "dyncheckboxen" ansprechen? Ich tippe mal auf letzteres!?


Antwort
Zitat
Teilen: