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
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
15.03.2008, 11:20:01
|
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 11:27:23 Uhr)
|
15.03.2008, 14:43:36
|
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!
|
15.03.2008, 15:33:26
|
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 11:37:39 Uhr)
Grund: Link und Gast-Zugangsdaten entfernt
|
15.03.2008, 16:31:08
|
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.
|
15.03.2008, 17:05:34
|
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'?!
|
15.03.2008, 18:13:32
|
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!
|
15.03.2008, 18:40:40
|
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.
|
15.03.2008, 20:27:44
|
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
|
17.03.2008, 11:46:54
|
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 12:30:14 Uhr)
|
17.03.2008, 17:18:27
|
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?
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 16:48:07 Uhr.
|