Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 09:12

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Php DB auslesen Checkbox problem

Discussion on Php DB auslesen Checkbox problem within the Web Development forum part of the Coders Den category.

Reply
 
Old   #1
 
Warnuk3r's Avatar
 
elite*gold: 307
Join Date: Jul 2009
Posts: 1,091
Received Thanks: 434
Php DB auslesen Checkbox problem

Sers, hier mal ein Bild:


Hier mein Code:

PHP Code:
<?php
$sql_select 
$db->query("SELECT * FROM mybb_ugann");
if(!(
mysqli_num_rows($sql_select) == 0)) {
    echo 
'<form method="post" action="ug_ann.php">';
    while (
$row mysqli_fetch_array$sql_selectMYSQL_ASSOC)) {
        
$id $row['ID'];
        
$icon $row['Icon'];
        
$msg $row['Message'];
        
$ugids $row['Usergroups'];
        
$show $row['ShowMessage'];
        echo 
'<input type="hidden" name="ann_id[]" value="'.$id.'" />';
        echo 
'<tr>';
        echo 
'<td class="trow1_ctm"><img src="'.$icon.'" /></td>';
        echo 
'<td class="trow1_ctm"><input type="text" value="'.$icon.'" name="ann_icon[]" /></td>';
        echo 
'<td class="trow1_ctm"><input type="text" value="'.$msg.'" name="ann_msg[]" style="width: 100%" /></td>';
        echo 
'<td class="trow1_ctm"><input type="text" value="'.$ugids.'" name="ann_grpids[]" style="width: 80px;" /></td>';
        if(
$show == 1) {
            echo 
'<td class="trow1_ctm" style="text-align: center;"><input type="checkbox" name="ann_show[]" checked /></td>';
        } else { echo 
'<td class="trow1_ctm" style="text-align: center;"><input type="checkbox" name="ann_show[]" /></td>'; }
        echo
'</tr>';
    }
    echo 
'<tr><td class="trow1" colspan="5"><input type="submit" value="Aktualisieren" name="ann_edit" /></td></tr>';
echo 
"</form>";

if(isset(
$_POST['ann_edit'])) {
    for(
$i 0$i $id$i++) {
        if(!(
$_POST['ann_icon'][$i] == "") AND !($_POST['ann_msg'][$i] == "") AND !($_POST['ann_grpids'][$i] == "")) {
            
$id_n $_POST['ann_id'][$i];
            
$icon_n $_POST['ann_icon'][$i];
            
$msg_n $_POST['ann_msg'][$i];
            
$grpids_n $_POST['ann_grpids'][$i];
            
$showmsg_n $_POST['ann_show'][$i];

            if(isset(
$showmsg_n)) { $doShow 1; } else { $doShow 0; }
echo 
$doShow;
            
$sql_update $db->query('UPDATE mybb_ugann SET Icon = "'.$icon_n.'", Message = "'.$msg_n.'", Usergroups = "'.$grpids_n.'", ShowMessage = "'.$doShow.'" WHERE ID = "'.$id_n.'"');
            if(
$sql_update) {
            } else { echo 
"geht nicht"; }
        }
    }
}

} else {
    echo 
'<tr>';
    echo 
'<td class="trow1" colspan="4" style="text-align: center;">Keine Ankündigungen vorhanden!</td>';
    echo 
'</tr>';
}
?>
Das ganze listet aus einer Tabelle alles aus, dann kann ich das direkt verändern und beim drücken des Buttons updaten. Alles funktioniert außer, dass wenn ich n häckchen bei einer Checkbox setze, dieses sich immer so weit nach oben wie möglich bewegt. Wenn das 1. also gechecked ist und ich z.b. beim letzten n Häckchen mache, update, dann hat das 1. und 2. dann n Häckchen... warum verflucht springt das Teil immer hoch?

Hoffe jemand kann mir ein Tipp geben, danke.

Lg

EDIT: Wenn ich ganz normal Inserte (daher hat die Tabelle ja auch die Inhalte) dann wird die Checkbox richtig angezeigt, der Fehler liegt hier also im Code... das Updated falsch aber sieht eigentlich genau so aus wie die anderen Inhalte der Spalten... wo schleicht sich da der Fehler rum oder bin ich grade echt zu blöd?
Warnuk3r is offline  
Old 10/03/2014, 14:52   #2
 
Schlumpf9's Avatar
 
elite*gold: 1
Join Date: May 2011
Posts: 28
Received Thanks: 4
Ich kann so weit auch keinen Fehler finden.
Das einzige wo ich mir nicht sicher bin sind folgende Zeilen:
PHP Code:
$showmsg_n $_POST['ann_show'][$i];

if(isset(
$showmsg_n)) { $doShow 1; } else { $doShow 0; } 
Undzwar bin ich mir nicht sicher ob man den Inhalt einer checkbox mit isset() überprüfen kann. Denn isset() liefert ja auch true, wenn z.B. eine Variable nur existiert, egal welcher Inhalt vorliegt.
Versuch mal if($showmsg_n) oder besser if($showmsg_n == true).

Grüße
Schlumpf9 is offline  
Old 10/03/2014, 18:09   #3
 
NotEnoughForYou's Avatar
 
elite*gold: 0
Join Date: Jun 2010
Posts: 3,406
Received Thanks: 2,024
Quote:
Originally Posted by Schlumpf9 View Post
Ich kann so weit auch keinen Fehler finden.
Das einzige wo ich mir nicht sicher bin sind folgende Zeilen:
PHP Code:
$showmsg_n $_POST['ann_show'][$i];

if(isset(
$showmsg_n)) { $doShow 1; } else { $doShow 0; } 
Undzwar bin ich mir nicht sicher ob man den Inhalt einer checkbox mit isset() überprüfen kann. Denn isset() liefert ja auch true, wenn z.B. eine Variable nur existiert, egal welcher Inhalt vorliegt.
Versuch mal if($showmsg_n) oder besser if($showmsg_n == true).

Grüße
Eine Checkbox wird nicht gesetzt wenn sie nicht aktiviert wurde, dh. der POST Wert existiert dann nicht. Daher funktioniert isset in dem Kontext.
NotEnoughForYou is offline  
Thanks
1 User
Old 10/03/2014, 19:43   #4
 
elite*gold: 0
Join Date: Oct 2012
Posts: 71
Received Thanks: 24
PHP Code:
$showmsg_n $_POST['ann_show'][$i];

if(isset(
$showmsg_n)) { $doShow 1; } else { $doShow 0; } 
in diesen Fall ist die herangehend weise falsch denn er prüft ja das $showmsg_n schon
vorhanden ist was ja der Fall ist.

er muss schon direkt $_POST['ann_show'][$i] prüfen.

PHP Code:
if(isset($_POST['ann_show'][$i])) { $doShow 1; } else { $doShow 0; } 
_robox is offline  
Old 10/03/2014, 20:31   #5
 
Schlumpf9's Avatar
 
elite*gold: 1
Join Date: May 2011
Posts: 28
Received Thanks: 4
Quote:
Originally Posted by _robox View Post
PHP Code:
$showmsg_n $_POST['ann_show'][$i];

if(isset(
$showmsg_n)) { $doShow 1; } else { $doShow 0; } 
in diesen Fall ist die herangehend weise falsch denn er prüft ja das $showmsg_n schon
vorhanden ist was ja der Fall ist.

er muss schon direkt $_POST['ann_show'][$i] prüfen.

PHP Code:
if(isset($_POST['ann_show'][$i])) { $doShow 1; } else { $doShow 0; } 
Das meinte ich eig. auch mit meinen Post, da isset() ja auch prüft, ob eine Variable schon gesetzt wurde, weshalb das dann trotzdem true liefert, auch wenn vom POST nichts kommt.
Schlumpf9 is offline  
Old 10/03/2014, 21:50   #6
 
elite*gold: 0
Join Date: Oct 2012
Posts: 71
Received Thanks: 24
PHP Code:
if(!($_POST['ann_icon'][$i] == "") AND !($_POST['ann_msg'][$i] == "") AND !($_POST['ann_grpids'][$i] == "")) { 
außerdem ist die if Überprüfung totaler misst ich Zweifel das sie sauber funktioniert keine isset oder empty Überprüfung Fehler in den Vergleich Operatoren
AND, OR, XOR benützt Mann so eigentlich nicht mehr auch wenn sie weiterhin gültig sind.

Hier mal ein Beispielmit mit isset
PHP Code:
if(isset($_POST['ann_icon'][$i]) && $_POST['ann_icon'][$i] != ''){
$icon_n $_POST['ann_icon'][$i];
}
// und so weider 
für bessere Lesbarkeit und zu Fehler Minimierung Solde Mann alle
$_POST Element eine eigne if Überprüfung verwandten.
_robox is offline  
Thanks
1 User
Old 10/04/2014, 03:03   #7
 
Warnuk3r's Avatar
 
elite*gold: 307
Join Date: Jul 2009
Posts: 1,091
Received Thanks: 434
Hatte kein Bock einen sauberen Code etc. zu machen war einfach echt Faul letztens.

Ich habe das ganze mal Lokal bei mir ausprobiert. Zuerst schön nur einen einzelnen Datensatz updaten, funktioniert. Dann habe ich das ganze noch einmal sauber (lesen / updaten einzeln in seperaten Dateien) rekonstruiert und das Problem ist immer noch vorhanden. Habe alles Mögliche versucht und am Ende den Checkboxen feste Namen zugeordnet (am Ende immer eine Nummerierung generiert ann_showmsg_ + id) und damit klappt es.

Würde trotzdem gerne wissen, wie man das mit Arrays hin bekommt.

Hat denn jemand das ganze auch mal ausprobiert, oder könnte dies für mich bitte tun? Mir platzt langsam der Kopf von lauter Checkboxen.... was mache ich da nur falsch?

Hier mal mein verbesserter Code:

Falls ihr noch generelle Tipps habt oder sonst was zu meckern habt bitte her damit. Und das mit den Checkbox-Arrays wäre auch noch interessant zu wissen.
Warnuk3r is offline  
Old 10/04/2014, 11:42   #8
 
elite*gold: 0
Join Date: Oct 2012
Posts: 71
Received Thanks: 24
Die HTML Ausgabe gehört an den Schluss nicht an den Anfang erst müssen alle php relevanten Sachen abgearbeitet sein.


wie ich gerate sehe ist die zweite for schleife überflüssig für deinen Zweck reicht die erste aus
außerdem musst sie anders gestalten so wird sie nie sauber durchlaufen.

PHP Code:
  for ($i 0$i count($_POST['ann_id']); $i++) {
        
 } 


noch ein kleiner Tip
ich würde die if Überprüfung so schreiben das nur eine Bedingung erfüllt sein muss
PHP Code:
if(!isset($_POST['ann_id'][$i]) || $_POST['ann_id'][$i] == '') {
            
$error true; break;
        } 
So habe dein Code mal bearbeitet wie ich in schreiben würde und alle Fehler die ich erkannt habe korrigiert.
habe den Code nicht getestet wenn ich jetzt nicht noch ein Fehler eingeschlichen hat Solde er so ohne Probleme Durchlaufen.
_robox is offline  
Thanks
1 User
Old 10/04/2014, 18:47   #9
 
Warnuk3r's Avatar
 
elite*gold: 307
Join Date: Jul 2009
Posts: 1,091
Received Thanks: 434
Quote:
Originally Posted by _robox View Post
Die HTML Ausgabe gehört an den Schluss nicht an den Anfang erst müssen alle php relevanten Sachen abgearbeitet sein.
Könntest du all deine Aussagen auch mal begründen? Warum? Wenn ich das Zeug ins Forum wieder einbaue dann ist die Reihenfolge so oder so anders und lässt sich kaum ändern, von daher ist es dann eh egal.

Quote:
Originally Posted by _robox View Post
wie ich gerate sehe ist die zweite for schleife überflüssig für deinen Zweck reicht die erste aus
außerdem musst sie anders gestalten so wird sie nie sauber durchlaufen.
Als ich das ganze ins Forum eingebaut habe, musste ich die erste Schleife eh ändern. Somit hat sich das Problem dann erledigt gehabt. Wie sollte ich das denn aber machen mit nur einer Schleife, wenn ich alle Felder einzeln überprüfe und nicht so wie vorhin alle gleichzeitig? Ich will ja erst am Ende das Update durchführen (evtl. mit Multiple Statements da lese ich mich noch ein), aber nicht direkt eins nach dem anderen und wenn eins nicht geht wirds übersprungen. Einfach aus dem Grund, weil ich kaum Platz für die Fehlermeldungen habe. Da darf höchstens eine kommen, daher möchte ich das so handhaben.

Quote:
Originally Posted by _robox View Post
noch ein kleiner Tip
ich würde die if Überprüfung so schreiben das nur eine Bedingung erfüllt sein muss
PHP Code:
if(!isset($_POST['ann_id'][$i]) || $_POST['ann_id'][$i] == '') {
            
$error true; break;
        } 
Das stimmt, danke.
Warnuk3r is offline  
Old 10/04/2014, 19:30   #10
 
elite*gold: 0
Join Date: Oct 2012
Posts: 71
Received Thanks: 24
ein Script wird immer von Zeile 0 an bis zur letzten Zeile abgearbeitet

deswegen ist es ratsam erst alle INSERT , UPDATE und sonstigen Daten die für die Ausgabe benötigt werden vor der Ausgabe abzuarbeiten.

deswegen reicht es in deinen Fall auch nur eine for schleife indem du der reihe nach erst dein Überprüfung machst.
und danach weiden aufgaben abarbeiten lassen kannst.
außer dem wenn du mit zwei schleifen arbeitest braust du mehr Ressourcen
und die zweite schleifen laut erst an wenn die erste abgeschlossen ist da durch kann es fortkommen
das die zweite schleife gar nicht anlauft wenn in den letzten schleifen Durchlauf der ersten schleifen ein Fehler gab oder die zweite schleife lauft komplett durch trotz Fehler in der ersten schleife wenn der letzte Durchlauf in ersten schleife true ergibt.



an stelle von break mit denn du ja die schleife verlast benützt du einfach
continue dabei überspringst du den aktuellen schleifen Durchlauf.

das du keine platz für Fehlermeldungen hast glaube ich nicht den da gibt es mehrerer Lösungen
entweder alle in einen block über, unter, rechts , links oder Pop-up Container und oder einzeln
über, unter, rechts , links des Eingabe Element.
was für dich in frage kommt musst du selber entscheiden.
du darfst dann eben nicht die Fehlermeldungen innerhalb der schleife mit echo ausgeben
musst das anders regeln dazu eignet sie sowohl ein array oder auch ein string.
Beispiel mit einen array

PHP Code:
$errorMsg = array();
    
// Durchgaenge zum Ueberpruefe
    
for ($i 0$i count($array); $i++) {

       
        
// Ueberpruefe ann_id
        
if (!isset($array['id'][$i]) || $array['id'][$i] == '') {
        
$errorMsg[] = 'deine gewünschte Fehlermeldung ';
        continue;
        }
 
// und so weider
}//ende der for schleife
// ausgabe in block
 
if (isset($errorMsg) && is_array($errorMsg) && count($errorMsg) > 0) {
echo 
'<div style="display: inline !IMPORTANT;" id="flash_message" class="error">';
echo 
implode("<br />"$errorMsg);
echo 
'</div>';

_robox is offline  
Reply


Similar Threads Similar Threads
Problem mit Checkbox & Werte setzen
07/18/2012 - AutoIt - 11 Replies
Hey.. ich hab mein Script für mein progressbar test fast fertig, nur iwie zeigt der mir immer (nach einiger zeit) nachdem die checkbox für vierfache geschwindigkeit aktiviert wurde in line 318 (der teil kurz vorm ende des scriptes ($mdiff = 25 darunter $hungerzeit = ... darunter...)) einen fehler. Ich habe keine ahnung , wie ich das problem lösen kann. die werte in den variablen: mdiff, hungerzeit etc. sind die milisekunden nachdem zum beispiel der hungerbalken reduziert werden soll....
Problem mit Checkbox
08/06/2011 - AutoIt - 12 Replies
Hallo Leute, ich hab ein Programm geschrieben, dass die aktuelle IP alle x Minuten ausließt und in einer txt speichert. Es soll auch im Hintergrund gestartet werden können, aber ich hab Probleme mit der Checkbox: sie verändert sich nicht, wenn man draufklickt... #include <ButtonConstants.au3> #include "INet.au3"
html frage (id einer hidden checkbox auslesen/herausfinden)
06/04/2010 - Web Development - 0 Replies
hay leute.. ich möchte nen bot mit autoit machen^^ aber nicht zurückschrecken meine frage hat so gut wie NICHTS MIT AUTOIT ZU TUN sondern eher mit HTML also: ich würde gerne die ID einer hidden checkbox im quelltext auslesen... für leute die nicht wissen was ich genau meine:
checkbox auslesen ?
05/27/2009 - AutoIt - 3 Replies
Hey, brauche hilfe da weder search hier im forum noch au3 help was ausgespuckt hat wie bekomme ich checkbox ausgelesen (vieleicht so wie $radio??) sodas ich diese dann in eine if/else reinpacken kann hier mal ansatz //Edit:so habe es hinbekommen aber wie packe ich diese nun in eine if/else also das wenn z.b. alle 3 ausgewählt sind er auch alle 3 ausführt? danke euch schonmal ;D



All times are GMT +1. The time now is 09:13.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.