SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 15.03.2008, 12:20:01
AlexD AlexD ist offline
Junior Member
 
Registriert seit: Jun 2003
Beiträge: 186
brauche Denkanstoß - Checkbox auswertung

Hallo zusammen,

ich brauch mal wieder einen kleinen Denkanstoß.

Die grundsätzliche Auswertung von Checkboxen ist kein problem, jedoch möchte ich folgendes realisieren.

Ich erstelle gerade eine kleine Startseite für mich, Familie und Freunde in der man sich unter anderem News anzeigen lassen kann.

Die 'Kategorien' wie 'Nachrichten, Sport usw..' sowie die Quell-Adressen sind in einer MySQL-DB gespeichert.

Jeder soll sich seine News so zusammenstellen können wie er will.
Dazu lese ich z.B. alle Kategorien aus und lasse sie mit Hilfe der Checkboxen auswählen, zugleich kann man die Reihenfolge festlegen.
Die Auswahl wird dann in der DB in einer eigenen Tabelle gespeichert.

Jetzt würde ich gerne es so realisieren, dass je nach dem ob eine Kategorie aus oder abgewählt wurde, in die DB geschrieben bzw. gelöscht wird.
Irgendwie hab ich aber ein 'Denkproblem' mit den nicht ausgewählten Boxen.

=> ausgewählte Checkbox wird in DB geschrieben.
=> wenn eine Checkbox abgewählt wird, entsprechender Datensatz soll gelöscht werden.
=> unveränderte Checkboxen können ignoriert werden oder auch 'NICHTS' aus der DB gelöscht werden.

im Moment trage ich die Daten so in die DB ein (halt nur schreiben und bestehende ignorieren)
PHP-Code:
    if(isset($_POST['channel_id'])){
        
reset($_POST['channel_id']);
        
reset($_POST['channel_pos']);

        
$c_position $_POST['channel_pos'];
        
$id $_POST['channel_id'];
        
$p 0;

        foreach(
$_POST['channel_pos'] as $v){      // ALLE 0-Werte werden aussortiert und zu einem String zusammengeführt
            
if($v == 0){                           // so werden nur die Positionswerte verarbeitet
            
} else {
                
$pos.= "$v,";
            }
        }
        
$channel_pos explode(",",$pos);

        foreach(
$_POST['channel_id'] as $c_id){

            include(
'./db_connect/connect_sql.php');
            
$result mysql_query("SELECT channel_id
                                     FROM news_channel_pos
                                    WHERE user_id = '
{$_POST['user_id']}'
                                      AND channel_id = 
$c_id",$db);
            if(!
$result){echo mysql_error($db);}
            
$data mysql_fetch_assoc($result);
            
            if(empty(
$data['channel_id'])){
            
                
$insert mysql_query("INSERT INTO news_channel_pos
                                                   (user_id, channel_id, channel_pos)
                                            VALUES ('
{$_POST['user_id']}', '$c_id', '".$channel_pos[$p++]."')",$db);
                } else {
                
$p++;
                }

                
mysql_close($db);
            }
        } 
Hoffe ich hab mich einigermaßen verständlich ausgedrückt. ;)

vielleicht hat jemand einen Denkanstoß für mich wie ich das realisieren könnte. Klar, dass ich hier höchstwahrscheinlich einiges verändern muss.

Geändert von AlexD (15.03.2008 um 12:27:23 Uhr)
Mit Zitat antworten
  #2  
Alt 15.03.2008, 15:43:36
lukgestach lukgestach ist offline
Junior Member
 
Registriert seit: Feb 2007
Ort: Safnern, CH
Alter: 32
Beiträge: 255
AW: brauche Denkanstoß - Checkbox auswertung

du kannst einfach wenn die checkbox 0 ist, den Datensatz löschen mit DELETE FROM tabelle!
Die überprüfung, ob sie angewählt wurden oder nicht machst du ja schon in der ersten foreach schleife!
Mit Zitat antworten
  #3  
Alt 15.03.2008, 16:33:26
AlexD AlexD ist offline
Junior Member
 
Registriert seit: Jun 2003
Beiträge: 186
AW: brauche Denkanstoß - Checkbox auswertung

Hm,

ist nicht ganz richtig.
In der ersten foreache-Schleife werden nur die 0-Positionen aussortiert um die Kategorie nach Wunsch zu verschieben.
Die Arrays von $channel_pos und $_POST['channel_id'] müssen gleich groß sein und korrekte Sortierung haben, da sie von einander abhängen.

Kannst Dir gerne selbst ein Bild davon machen wie ich mir das Vorstelle
im Control-Center unter 'meine News'. Einfach mal ein paar Channels abonnieren (Pos. zuweisen!)! Man kann sie dann nach Wunsch sortieren, nun würde ich eben gerne bei Channels bei denen der Haken weggenommen wird diese entsprechend aus der DB löschen.

Bei den einzelnen News möchte ich das dann analog übernehmen.

Geändert von AlexD (22.03.2008 um 12:37:39 Uhr) Grund: Link und Gast-Zugangsdaten entfernt
Mit Zitat antworten
  #4  
Alt 15.03.2008, 17:31:08
lukgestach lukgestach ist offline
Junior Member
 
Registriert seit: Feb 2007
Ort: Safnern, CH
Alter: 32
Beiträge: 255
AW: brauche Denkanstoß - Checkbox auswertung

ok, ein neuer Versuch:
schau doch einfach mit if(!isset($_POST["checkbox"])) ob die checkbox abgewählt wurde danach kannst du den Dataensatz löschen.
Mit Zitat antworten
  #5  
Alt 15.03.2008, 18:05:34
AlexD AlexD ist offline
Junior Member
 
Registriert seit: Jun 2003
Beiträge: 186
AW: brauche Denkanstoß - Checkbox auswertung

Ja an ähnliches hab ich auch schon gedacht.

Nur, mit der Checkbox wird die 'channel_id' übergeben.
Im Formular werden die Channels aus der DB mit einer while-Schleife ausgelesen. Heißt, die POST-Variable die ich mit den Checkboxen übergebe ist ein Array mit nur den angewählten Werten.

Wenn ich nun eine (!isset)-Abfrage einbaue, wird sie nie zur Ausführung kommen, da ja nur die ausgewählten Checkboxen übergeben werden.

Oder lieg ich da jetzt falsch??

Hm... mir ist da grad ne Idee durch den Kopf gegangen.
Was wäre falsch daran wenn ich erst alle Channels des Users lösche und denn einfach neu schreibe??

Also in etwa so:

POST-Daten => bestehende DB-Daten löschen => übergebene Daten eintragen

Oder wäre so eine Lösung ein 'No-Go'?!
Mit Zitat antworten
  #6  
Alt 15.03.2008, 19:13:32
lukgestach lukgestach ist offline
Junior Member
 
Registriert seit: Feb 2007
Ort: Safnern, CH
Alter: 32
Beiträge: 255
AW: brauche Denkanstoß - Checkbox auswertung

ne die nicht angweählten checkboxen sind auch da, da es sie ja anzeigt. sonst würde man ja nicht mit der isset abfrage schauen ob eine checkbox angewählt wurde oder nicht.

Deine Variante mit alles löschen und wieder neu reinschreiben würde natürlich auch gehen!
Mit Zitat antworten
  #7  
Alt 15.03.2008, 19:40:40
AlexD AlexD ist offline
Junior Member
 
Registriert seit: Jun 2003
Beiträge: 186
AW: brauche Denkanstoß - Checkbox auswertung

Bist Du Dir da sicher?!

Nur nochmal zum Verständnis der systematische Aufbau.
Das Formular und der oben gepostete CODE sind in zwei unterschiedlichen Datein.

Das Formular cc_news.php in dem die Checkboxen abgefragt und angezeigt werden. Die Daten werden dann beim Absenden an die process.php (der CODE oben) übergeben. Mit 'header (Location:....php);' leite ich wieder zurück zum Formular.
Mit Zitat antworten
  #8  
Alt 15.03.2008, 21:27:44
lukgestach lukgestach ist offline
Junior Member
 
Registriert seit: Feb 2007
Ort: Safnern, CH
Alter: 32
Beiträge: 255
AW: brauche Denkanstoß - Checkbox auswertung

ja, alle form elemente sind beim absenden im Array $_POST verfügbar! Die nichtausgewählten checkboxen sind aber allerdings nicht verfügbar, da sie ja nicht ausgewählt wurden! Sonst ist alles verfügbar mit dem Value Wert. desahlb lautet di if anweisung if(!isset($_POST["checkbox"])) und nicht if(isset($_POST["checkbox"]))

Gruss Lukas
Mit Zitat antworten
  #9  
Alt 17.03.2008, 12:46:54
AlexD AlexD ist offline
Junior Member
 
Registriert seit: Jun 2003
Beiträge: 186
AW: brauche Denkanstoß - Checkbox auswertung

Hallo Lukas,

hatte die letzten Tage keine Zeit mich damit zu beschäftigen.

Das komplette Löschen und anschließende neu Schreiben in die Datenbank funktioniert leider nicht, da noch eine andere Tabelle mit den einzelnen News davon abhängt und der User dann jedes mal die einzelnen News neu abonnieren müsste.

Wie Du ja schon geschrieben hast, werden nicht ausgewählte Checkboxen nicht übergeben.
Ich hab das nochmal getestet und die Durchläufe in der 'foreache'-Schleife zählen lassen, und es werden logischer weise nur so viele Durchläufe gemacht wie Checkboxen ausgewählt sind.
So scheidet ja die 'if(!isset($_POST['channel_id']))' aus, da das Array nicht leer sein wird, und wenn dann passiert eh nix.

Hab jetzt noch einen anderen Weg ins Auge gefasst.
Und zwar so:
Alle eingetragenen Datensätze eines Users ermitteln (channel_id), anschließend mit dem '$_POST['channel_id']' abgleichen, und alle die ungleich der übergebenen ID's sind, werden gelöscht.

Theoretisch funktioniert das schon, nur werden zum Teil die 'channel_id's mehrfach im $delete-Array aufgelistet. Das kommt nurch die While-Schleife und darin enthaltene foreach-Schleife.
Kann man das noch besser lösen?!

edit:


Funktioniert leider doch nicht....





hier nochmal der Code (kompletter Ausschnitt aus der process.php):
PHP-Code:
// neuen News-Channel eintragen/austragen
if ($_POST['channel'] == 'abonieren'){

    if(isset(
$_POST['channel_id'])){
        
reset($_POST['channel_id']);
        
reset($_POST['channel_pos']);

        
$c_position $_POST['channel_pos'];
        
$id $_POST['channel_id'];
        
$p 0;

        foreach(
$_POST['channel_pos'] as $v){      // ALLE 0-Werte werden aussortiert und zu einem String zusammengeführt
            
if($v == 0){                           // so werden nur die Positionswerte verarbeitet
            
} else {
                
$pos.= "$v,";
            }
        }
        
$channel_pos explode(",",$pos);
        

        foreach(
$_POST['channel_id'] as $c_id){

            include(
'./db_connect/connect_sql.php');
            
$result mysql_query("SELECT channel_id
                                     FROM news_channel_pos
                                    WHERE user_id = '
{$_POST['user_id']}'
                                      AND channel_id = 
$c_id",$db);
            if(!
$result){echo mysql_error($db);}
            
$data mysql_fetch_assoc($result);
            
            if(empty(
$data['channel_id'])){
            
                
$insert mysql_query("INSERT INTO news_channel_pos
                                                   (user_id, channel_id, channel_pos)
                                            VALUES ('
{$_POST['user_id']}', '$c_id', '".$channel_pos[$p++]."')",$db);
                } else {
                
$p++;
                }

                
mysql_close($db);
            }
           
// ab hier werden die Datensätze die gelöscht werden sollen ermittelt 
         
include('./db_connect/connect_sql.php');
         
$result mysql_query("SELECT channel_id
                                  FROM news_channel_pos
                                 WHERE user_id = 
{$_POST['user_id']}",$db);
         if(!
$result){echo mysql_error($db);}
         while(
$daten mysql_fetch_array($result)){

             foreach(
$_POST['channel_id'] as $chnl_id){      // durch die Verschachtelung der Schleifen werden ID's mehrfach geschrieben.

                 
if($daten['channel_id'] != $chnl_id){
                     
$del_chnl .= $daten['channel_id'].",";
                 }
             }
         }
         
$delete explode(",",$del_chnl);
         foreach(
$delete as $id){
             echo 
"$id, ";      // Hier wird dann gelöscht, dient jetzt zur Darstellung der ID !!
         
}
        }

//    header("Location: control_center.php?auswahl=5");
    
header("Cache-Control: no-store, no-cache");

Gruß
Alex

Geändert von AlexD (17.03.2008 um 13:30:14 Uhr)
Mit Zitat antworten
  #10  
Alt 17.03.2008, 18:18:27
lukgestach lukgestach ist offline
Junior Member
 
Registriert seit: Feb 2007
Ort: Safnern, CH
Alter: 32
Beiträge: 255
AW: brauche Denkanstoß - Checkbox auswertung

hmm
Kannst du mal zeigen wie du die checkboxen benannt hast?
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Checkbox in Email-Formular auslesen huetchen PHP Grundlagen 11 24.06.2005 22:25:38
Problem mit Checkbox Auswertung Nickle PHP Grundlagen 3 30.05.2005 17:31:08
checkbox im formular gerhard HTML, CSS und JavaScript Help! 2 26.04.2004 09:53:20
Zuweisung textfeld zu checkbox! powerbulls PHP für Fortgeschrittene und Experten 2 20.03.2004 14:58:25
Checkbox Der Andy PHP für Fortgeschrittene und Experten 1 10.12.2002 12:22:44


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:02:07 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt