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 ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign 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 10.01.2013, 19:04:34
inspiron inspiron ist offline
Anfänger
 
Registriert seit: Nov 2009
Alter: 68
Beiträge: 51
$_Post auswerten

Hallo,
in einem Formular befinden sich Dropdown Felder deren Inhalt aus einer DB gefüllt werden.
Abhängig von der Auswahl soll eine Auswertung gemacht werden ob
" ", = leer
"*", = Trenner für die Übersicht im Dropdown
"Bitte auswählen!" = erster Eintrag im Dropdown
ausgewält wurde.
Soweit funktioniert alles, bis auf die Auswahl: Bitte auswählen! auch diese Schreibweise geht nicht Bitte auswählen!
Nehme ich für "Bitte auswählen!" einen anderen Wert der aus der DB geladen wird funktioniert es auch. kann es am Umlaut liegen?

Gruß

PHP-Code:
foreach($felder as $feld) { 
    if(
"" ==($_POST[$feld]) or "*" ==($_POST[$feld]) or "Bitte auswählen! " ==($_POST[$feld])) { 
      
$error true
      
$errorFelder[$feld] = true
    } 
  } 
Mit Zitat antworten
  #2  
Alt 10.01.2013, 20:41:17
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: $_Post auswerten

1. Der Browser zeigt das an, was zwischen <option> und </option> steht.
Übermittelt wird das, was in value="" steht. Nur dann, wenn das value Attribut fehlt, übermittelt der Browser den Kram, der zwischen <option> und </option> steht.

2. korrektes HTML solltest Du aber schon anbieten. Und dazu gehört, daß Umlaute oder sonstige Sonderzeichen entsprechend dem charset kodiert sind.

3. Value Vorgaben müssen zudem noch (raw)urlencodet sein.
Mit Zitat antworten
  #3  
Alt 10.01.2013, 21:33:09
inspiron inspiron ist offline
Anfänger
 
Registriert seit: Nov 2009
Alter: 68
Beiträge: 51
AW: $_Post auswerten

...das Problem ist, das bei der Auswahl "Bitte auswählen!" dieses nicht als Fehler erkannt und das Formular dann versendet wird.

Anbei ein Auszug als Testdatei:
PHP-Code:
<?php
error_reporting
(E_ALL ^  E_NOTICE);

//  Datenbankzugriff
include 'config_db.php';

    
//Beim Senden eines Formulars die gewählte Auswahl in der Auswahlliste beibehalten.       
//--ist Eintrag selektiert? 
function isselected($value$postvalue){ 
 
$sel=""
  if(isset(
$postvalue) ){ 
    
$sel = ($value== $postvalue) ? ' selected="selected"' ""
  } 
    return (
$sel); 
}

/* Formular mit Fehlerauswertung - Dieses Script überprüft ob alle Felder eines Formulars ausgefüllt wurden 
   und hebt nicht ausgefüllte hervor 
*/
$errorFelder = array(); 
$error null
$felder = array("schicht""ort"); 

// hier startet die Überpruefung der Eingabe im Formular 
if(isset($_POST['ueberpruefung'])) { 
  
$error false
    
  foreach(
$felder as $feld) { 
    if(
"" ==($_POST[$feld]) or "*" ==($_POST[$feld]) or "Bitte auswählen! " ==($_POST[$feld])) { 
      
$error true
      
$errorFelder[$feld] = true
    } 
  } 
}
if(
$error === false) { 

  echo 
"Schicht ---> ".$_POST['schicht']; 
  echo 
"<br>"
  echo 
"Ort ---> ".$_POST['ort'];  

} else { 

  if(
$error === true
          echo 
"<b>Bitte die Rot markierten Felder ausf&uuml;llen!</b>";
?> 

<style type="text/css"> 
select.error { 
    border: red;
    border-style: solid; 
    border-top-width: 2px; 
    border-right-width: 2px; 
    border-bottom-width: 2px; 
    border-left-width: 2px; 
}

</style> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> 
  <body> 
    <form class="commentForm" method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'])?>">
        
        <label class="schicht">Schicht</label>
        <select name="schicht" id="schicht" <?php if(isset($errorFelder['schicht'])) echo 'class="error"'?>>    
        <?php //Beim Senden eines Formulars die gewählte Auswahl in der Auswahlliste beibehalten.
   
               
$sql "SELECT schicht FROM dropdown_schicht "
            
$result mysql_query($sql); 
            
// für jeden Eintrag ein Option-Tag erstellen                 
            
while ($arrschicht mysql_fetch_array($resultMYSQL_ASSOC)) { 
             
            foreach (
$arrschicht as $zeile) { 
              
$sel isselected($zeile$_POST['schicht']); 
              echo 
'<option '.$sel .'>'.$zeile.'</option>'
            }
            } 
            
?> 
          </select>
          
          <label class="ort">Standort</label>
          <select name="ort" id="ort" <?php if(isset($errorFelder['ort'])) echo 'class="error"'?>>
               <?php
   
               $sql 
"SELECT ort FROM dropdown_ort "
            
$result mysql_query($sql); 
            
// für jeden Eintrag ein Option-Tag erstellen                 
            
while ($arrort mysql_fetch_array($resultMYSQL_ASSOC)) { 
             
            foreach (
$arrort as $zeile) { 
              
$sel isselected($zeile$_POST['ort']); 
              echo 
'<option '.$sel .'>'.$zeile.'</option>'
            }
            } 
            
?>
          </select>
          
        <input type="hidden" name="ueberpruefung" value="1">
        <input type="submit" class="Button" name="eintragen" id="eintragen" value="Absenden"/> 
    </form> 

  </body> 
</html>

<?php
}
echo 
"<pre>";
var_dump($errors);
print_r($_POST);
echo 
"</pre>";
?>

Geändert von inspiron (10.01.2013 um 21:56:50 Uhr)
Mit Zitat antworten
  #4  
Alt 10.01.2013, 22:36:50
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: $_Post auswerten

Zitat:
Zitat von inspiron Beitrag anzeigen
...das Problem ist, das bei der Auswahl "Bitte auswählen!"
Nein, Dein Problem ist, daß Du entweder meine Texte nicht liest, nicht verstehst oder nicht verstehen willst.
Zitat:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
Bedeutet: im HTML muß anstelle des ä &auml; verwendet werden.

Zitat:
echo '<option '.$sel .'>'.$zeile.'</option>';
Hier fehlt immer noch das value Attribut, in dem Du das ä mittels rawurlencode() als %E4 kodierst. Wenn Du schon XHTML 1.0 STRICT verwendest, dann halte Dich gefälligst auch daran.

Zusätzlich solltest Du noch zur Kenntnis nehmen, daß der im Browser angezeigte Text und der String im value Attribut nicht gleich sein muß.
PHP-Code:
echo '<option option="nix">Bitte ausw&auml;hlen</option>'

Geändert von meikel (†) (10.01.2013 um 23:01:49 Uhr)
Mit Zitat antworten
  #5  
Alt 10.01.2013, 23:10:55
inspiron inspiron ist offline
Anfänger
 
Registriert seit: Nov 2009
Alter: 68
Beiträge: 51
AW: $_Post auswerten

[sauer_anfang]
Hallooooo,
bitte sei mal nicht so pampig.
Es können nicht alle dein Wissensstand haben.
Von "nicht verstehen wollen" kann auch keine Rede sein! Ich will es ja verstehen deshalb frage ich ja.

Und wenn ich ein Fehler gemacht habe, dann erkläre es mir gefälligst so das auch ein Anfänger es versteht, sonst bring das garnix!
[/sauer_ende]

...schönen Abend noch! :-(
Mit Zitat antworten
  #6  
Alt 10.01.2013, 23:43:10
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: $_Post auswerten

Zitat:
Zitat von inspiron Beitrag anzeigen
... pampig.
... gefälligst
Diese Vokabeln stehen Dir erst dann zu, wenn Du die Handbücher selber lesen kannst. Und das wirst Du auch müssen, weil ich keine Luste mehr habe, Dir daraus vorzulesen.

http://php.net/docs.php
http://dev.mysql.com/doc/
http://de.selfhtml.org/
http://validator.w3.org/
http://jigsaw.w3.org/css-validator/

Und was Du nicht findest, suchst Du da:
http://www.google.de/
Mit Zitat antworten
  #7  
Alt 11.01.2013, 00:13:02
inspiron inspiron ist offline
Anfänger
 
Registriert seit: Nov 2009
Alter: 68
Beiträge: 51
AW: $_Post auswerten

Zitat:
Zitat von meikel Beitrag anzeigen
Diese Vokabeln stehen Dir erst dann zu, wenn Du die Handbücher selber lesen kannst. Und das wirst Du auch müssen, weil ich keine Luste mehr habe, Dir daraus vorzulesen.
Hey,
pack den Rohrstock weg! Die Zeiten sind vorbei.
Wenn ich als Anfänger eine Frage stelle erwarte ich genau wie jeder andere auch eine Antwort im vernünftigen Ton und nicht so ein "Oberlehrergehabe".
....naja, wenn ich andere Antworten von Dir lese, wird mir einiges klar.

Ich Entschuldige mich, das ich hier als Anfänger eine Frage gestellt habe!!!


Zitat:
Zitat von meikel Beitrag anzeigen
Und was Du nicht findest, suchst Du da:
http://www.google.de/
Tja, Google hat mir diese Seite gezeigt
Mit Zitat antworten
  #8  
Alt 11.01.2013, 15:01:21
raiguen raiguen ist offline
Anfänger
 
Registriert seit: Jul 2011
Alter: 71
Beiträge: 30
AW: $_Post auswerten

Moin,

mal abgesehen davon, dass Einträge wie 'Bitte auswählen!' oder '*' in einer Datentabelle vorhanden sind, wäre es doch sinnvoll diese EInträge schon gar nicht erst selektierbar zu machen!

PHP-Code:
...
            print 
'<select name="schicht1" size="5">';

            foreach ( 
$arrschicht1 as $zeile) {
              if(
substr($zeile,0,10)=="Bitte ausw" OR $zeile=="*")
              {
               print 
'<option disabled="disabled">'.$zeile.'</option>';
              }
              else {
                
$sel isselected($zeile$_POST['schicht1']);
                print 
'<option '.$sel .'>'.$zeile.'</option>';
              }
            }
            print 
'</select> <br /><br />';
... 
Alternativ kann man aber auch mit <optgroup> eine Unselektierbarkeit erreichen:
PHP-Code:
            print '<select name="schicht1" size="5">';

            foreach ( 
$arrschicht1 as $zeile) {
              if(
substr($zeile,0,10)=="Bitte ausw" OR $zeile=="*")
              {
               print 
'<optgroup label="'.$zeile.'">'.$zeile.'</optgroup>';
              }
              else {
                
$sel isselected($zeile$_POST['schicht1']);
                print 
'<option '.$sel .'>'.$zeile.'</option>';
              }
            }
            print 
'</select> <br /><br />'
siehe hier z.B. oder hier

Die Überprüfung auf nicht ausgefüllte bzw. selektierte Auswahllisten kann dann recht einfach erfolgen, z.B.:
PHP-Code:
    if(isset($_POST['schicht1'])) {

      print 
$_POST['schicht1'] ;

      }
      else
      {
        print 
'KEINE Auswahl bei Schicht1!';
    } 
Mit Zitat antworten
  #9  
Alt 11.01.2013, 18:24:28
inspiron inspiron ist offline
Anfänger
 
Registriert seit: Nov 2009
Alter: 68
Beiträge: 51
AW: $_Post auswerten

Zitat:
Zitat von raiguen Beitrag anzeigen
Moin,

mal abgesehen davon, dass Einträge wie 'Bitte auswählen!' oder '*' in einer Datentabelle vorhanden sind, wäre es doch sinnvoll diese EInträge schon gar nicht erst selektierbar zu machen!
In einem Selectfeld steht doch immer, wenn nichts ausgwählt wurde "Bitte auswählen!".
Das Sternchen ist halt nur ein optischer Trenner für die Übersicht (das wollten die Kollegen so)

Bitte auswählen!
PP1.1
PP1.2
PP1.3
*
PP2.1
PP2.2
PP2.3
*
FW3.1
FW3.2

Ich werde es mir mal anschauen
Gruß
Mit Zitat antworten
  #10  
Alt 13.01.2013, 19:20:45
raiguen raiguen ist offline
Anfänger
 
Registriert seit: Jul 2011
Alter: 71
Beiträge: 30
AW: $_Post auswerten

Hallo,

Zitat:
... Dropdown Felder deren Inhalt aus einer DB gefüllt werden
also demnach ja auch "Bitte auswählen" und "*" als Gruppentrenner.

Wie bereits schon mal gesagt: beides gehört NICHT in eine Datentabelle!
Zitat:
In einem Selectfeld steht doch immer, wenn nichts ausgwählt wurde "Bitte auswählen!".
Nicht immer, aber meistens und wird vom Programmierer händisch eingetragen, um den geneigten Benutzer des Formulares darauf hinzuweisen...
Zitat:
Das Sternchen ist halt nur ein optischer Trenner für die Übersicht (das wollten die Kollegen so)
ja, ja,... die lieben Kollegen...

Gegeben ist folgendes - schon nach Gruppen sortiertes - Array mit den Schichten (können aus einer Datentabelle stammen):
PHP-Code:
    $arrschicht1 = array("PP1.1""PP1.2""PP1.3""PP2.1""PP2.2""PP2.3","FW3.1""FW3.2"); 
OHNE den 'berüchtigten' Eintrag "Bitte wählen" und OHNE das Gruppentrennersternchen.

So, wie bekomme ich nun ein 'passendes', den lieben Kollegen konformes Dropdownfeld auf das Formular?
1. Der erste Eintrag "Bitte auswählen!" wird händisch VOR dem Durchlauf des DatenArray geschrieben.
2. In der nachfolgenden Array-Schleife zum Eintragen der DB-Daten wird auf einen Gruppenwechsel abgefragt und ggf. das 'für die Kollegen geeignete optische Trennzeichen' eingetragen.

Das sähe dann so aus:
PHP-Code:
            $old "";  //--alter GRuppenname
            
$z 1;     //--Durchlaufzähler

            
print '<select name="schicht1" size="5">';

            
//--ersten Eintrag manuell
            
print '<option disabled="disabled">Bitte ausw&auml;hlen</option>';

            
//--Datenarray durchlaufen und auf Gruppenwechsel abfragen
            
foreach ( $arrschicht1 as $zeile) {
              
$new substr($zeile,0,3); //--neuer Gruppenname
              //--nur für erste Zeile, weil sonst Gruppenwechsel bzw Anzeige unkorrekt
              
if ($z==1) {
                
$old $new;
              }
              
//--ist neuer Gruppenname abweichend vom bisherigen Gruppenname
              //--dann Gruppentrennzeichen eintragen
              
if($new<>$old)
                  {
                   print 
'<option disabled="disabled">*</option>';
                   
//--aktueller Gruppenname als Vergleich speichern
                   
$old $new;
                  }
              
//--Zeile ausgeben
              
$sel isselected($zeile$_POST['schicht1']);
              print 
'<option '.$sel .'>'.$zeile.'</option>';

              
$z++;
            }
            print 
'</select> <br /><br />'
Als Gruppe habe ich Deinen Beispieldaten folgend die ersten 3 Zeichen der Schichtbezeichung genommen; sobald sich der GRuppenname ändert, wird das optische Trennzeichen in die Selectbox (=Dropdownfeld) eingetragen, allerdings mit dem Attribut disabled="disabled".
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
Logfile auswerten, aber wie? Distructive PHP Entwicklung und Softwaredesign 2 02.07.2011 16:37:05
Regex: Link auswerten mit Ausnahme google PuWu PHP für Fortgeschrittene und Experten 2 10.08.2008 01:05:51
Checkbox auswerten agrossm PHP Grundlagen 9 04.05.2008 08:09:12
formularelemente auswerten kevin_k PHP Grundlagen 2 27.06.2004 16:28:49
Textdatei auslesen und auswerten kogi1 PHP Grundlagen 6 06.08.2002 13:01:24


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:06:26 Uhr.


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


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