php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack (1) Themen-Optionen Thema bewerten
  1 links from elsewhere to this Post. Click to view. #1 (permalink)  
Alt 11-04-2012, 06:39
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard POST string mit gleichen namen (Checkboxen) auswerten?

hi!

wie kann ich einen POST string mit gleichen namen (Checkboxen) auswerten?

ich weiß das man es normalerweise mit eckigen klammern macht, aber ich erzeuge mit javascript die checkboxen und kann daher keine eckigen klammern mit erzeugen (code nicht gültig).

Code:
append("<input type='checkbox' name='Postbox' value='" + ID + "'>");
d.h. jetzt, mein string (mit jquery serialisitert) sieht so aus:

...?Postbox=1&Postbox=293&&Postbox=12&Postbox=889


usw.

geht es techn. in php, das ich in der speichern.php den string doch noch auswerten kann und der mit nicht nur den letzten stringwert speichert?

sonst muß ich wohl in javascript den string umständlicher zusammen basteln.

also meine frage bezieht sich trotzdem auf php, obwohl ich hier javascript erwähnt habe (denke das ich damit im richtigen forum bin).

mfg
Mit Zitat antworten
  #2 (permalink)  
Alt 11-04-2012, 08:23
ezkimo
 Registrierter Benutzer
Links : Onlinestatus : ezkimo ist offline
Registriert seit: Apr 2005
Ort: Beckum / Westf.
Beiträge: 279
ezkimo befindet sich auf einem aufstrebenden Ast
ezkimo eine Nachricht über ICQ schicken
Standard

Ja das geht - auch mit eckigen Klammern. Das hat auch weniger mit PHP, sondern eher etwas mit HTML zu tun. Erkundige Dich bitte über das HTML Element Checkbox (Deine Lösung steht im Abschnitt "Beachten Sie") und den Umgang mit Arrays innerhalb von PHP.

Dann sollte Dein Problem eigentlich gar kein Problem mehr darstellen.
__________________
MM Newmedia | MeinBlog

Geändert von ezkimo (11-04-2012 um 08:29 Uhr)
Mit Zitat antworten
  #3 (permalink)  
Alt 11-04-2012, 14:31
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

OffTopic:
Zitat:
Zitat von ezkimo Beitrag anzeigen
Das hat auch weniger mit PHP, sondern eher etwas mit HTML zu tun.
Nein, das hat nur was mit PHP zu tun - andere Sprachen schaffen es durchaus, bei mehreren gleichnamigen Parametern diese nicht zu überschreiben, sondern Zugriff auf alle zur Verfügung zu stellen - auch ohne eckige Klammern …
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #4 (permalink)  
Alt 11-04-2012, 22:34
Benutzerbild von fireweasel fireweasel
 Registrierter Benutzer
Links : Onlinestatus : fireweasel ist offline
Registriert seit: Sep 2008
Ort: At home
Beiträge: 851
fireweasel wird schon bald berühmt werdenfireweasel wird schon bald berühmt werden
fireweasel eine Nachricht über AIM schicken fireweasel eine Nachricht über Yahoo! schicken
Standard

Zitat:
Zitat von Gamer20 Beitrag anzeigen
hi!

wie kann ich einen POST string mit gleichen namen (Checkboxen) auswerten?

ich weiß das man es normalerweise mit eckigen klammern macht, ...
Wie hier schon gesagt wurde: NORMALERWEISE macht man das ohne eckige Klammern. PHP brät sich hier (mal wieder) eine Extrawurst.

Zitat:
geht es techn. in php, das ich in der speichern.php den string doch noch auswerten kann und der mit nicht nur den letzten stringwert speichert?
Ja, mit einer Ausnahme (siehe weiter unten).

Zitat:
sonst muß ich wohl in javascript den string umständlicher zusammen basteln.
Das wäre auch eine Lösung. So schwer ist das String-Zusammenkleben in JavaScript nun auch wieder nicht.

Falls doch: PHP stellt "freundlicherweise" per POST hochgeladene Daten per Stream zur Verfügung. Der Pseudopfad dafür heißt 'php://input'. Man kann die Rohdaten von dort mit file_get_contents() einlesen. Danach muss man sie allerdings selbst in die gewünschte Form bringen, also bspw. so wie sie im $_POST-Array "normalerweise" zu finden sind.

Ein weiterer Knackpunkt ist, dass das Ganze nur funktioniert, wenn keine File-Uploads dabei sind. In dem Fall löscht PHP (aus nicht nachvollziehbaren Gründen) den Input-Stream mit den POST-Daten.

Hier mal eine ausbaufähige Beispielklasse, die so etwas handhabt. Sie kann statt der POST- auch die GET-Daten verarbeiten. Das erweist sich als praktisch, falls man mal schnell im Browser ein wenig herumtesten möchte:
PHP-Code:
class cgi_params
implements
    
ArrayAccessIteratorCountable
{

    
// clumsy attempt to prevent from HashDOS attacks
    // used in ->split()
    
const max_items 200;

    
/// return input as an array 
    
static function simulate_post() {
        return 
self::split(self::read());
    }

    
/// update the given array with the input
    
static function update_post(
        & 
$post_array
    
) {
        foreach (
self::split(self::read()) as $name => $param) {
            
$post_array[$name] = $param;
        }
        return 
true;
    }

    function 
__construct(
        
$mode self::post
    
) {
        
$this->params $this->split($this->read($mode));
    }

    
// mode
    
const get 0;
    const 
post 1;

    
/// read raw input data from POST or GET
    /// return str() encoded POST|GET data | null() if an error occured
    
static function read(
        
$mode self::post /// ::post|::get
    
) {
        if (
self::post === $mode) {
            if (
                isset (
$_SERVER['CONTENT_TYPE'][0]) &&
                
preg_match('/\Amultipart\/form-data/i'$_SERVER['CONTENT_TYPE'])
            ) {
                return 
null;
            }
            return 
file_get_contents('php://input');
        }
        return 
$_SERVER['QUERY_STRING'];
    }

    
/// split raw input data into a nice hash
    
static function split(
        
$data /// raw input data (from POST or GET)
    
) {
        
$parts preg_split('/[&;]/'$dataself::max_items 1PREG_SPLIT_NO_EMPTY);
        if (
count($parts) > self::max_items) {
            
array_pop($parts);
        }
        
$hash = array ();
        foreach (
$parts as $part) {
            @list (
$name$value) = preg_split('/=/'$part);
            
// note: rawurldecode() does not work, because it ignores '+'-encoded spaces
            
$name_decoded urldecode($name);
            
// handle multiple entries sharing the same $name; eg: &bla=x&bla=y&bla=z
            
if (!isset ($hash[$name_decoded])) {
                
$hash[$name_decoded] = array ();
            }
            
$hash[$name_decoded][] = urldecode($value); // add to list
        
/// end foreach $parts
        
return $hash;
    }

    
/// output as string
    
function __toString() {
        return 
var_export($this->paramstrue);
    }

    
/// ArrayAccess:: interface

    
function offsetExists($offset) {
        return isset (
$this->params[$offset]);
    }

    function 
offsetGet($offset) {
        return 
$this->params[$offset];
    }

    function 
offsetSet($offset$value) {
        throw new 
Exception('not yet implemented');
    }

    function 
offsetUnset($offset) {
        throw new 
Exception('not yet implemented');
    }

    
/// Iterator:: interface (for fun)

    
function rewind() {
        
reset($this->params);
    }

    function 
valid() {
        return 
null !== key($this->params);
    }

    function 
current() {
        return 
current($this->params);
    }

    function 
key() {
        return 
key($this->params);
    }

    function 
next() {
        
next($this->params);
    }

    
/// Countable:: interface

    
function count() {
        return 
count($this->params);
    }

/// end class 
Anwenden kann man den POST-Teil auf altmodische prozedurale Art:
PHP-Code:
// usage:

// overwrite $POST
cgi_params::update_post(
    
$_POST
);
var_dump($_POST);

// use your own array of parameters

$my_post_vars cgi_params::simulate_post();
var_dump($my_post_vars); 
... oder man bedient sich der OO-Möglichkeiten (das funktionert mit POST oder GET):

PHP-Code:
// OO-style + using Interfaces
$input = new cgi_params();

// check if a parameter 'test' exists
var_dump($input['test']);

// dump all parameters
foreach ($input as $name => $param) {
   
printf('%s$name: %s $param: '"\r\n"$name);
   
var_dump($param);


Geändert von fireweasel (13-04-2012 um 23:44 Uhr) Grund: typos (what else)
Mit Zitat antworten
  #5 (permalink)  
Alt 12-04-2012, 06:14
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard

danke für die infos. ich habe das in JS so geklärt:

Code:
$(eobj + " input[name='Boxen']:checked").each(function()
{Kette = Kette + '&Boxen%5B%5D=' + $(this).val();});
ich denke mal das ist die kürzeste variante!
Mit Zitat antworten
  #6 (permalink)  
Alt 12-04-2012, 19:29
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Du verwendest doch offenbar ein Framework (vermutl. jQuery) - warum zum Geier bastelst du dir sowas dann selber, anstatt eine vorgefertigte Lösung wie Form.serialize zu verwenden, die dir die Arbeit komplett abnimmt …?
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
  #7 (permalink)  
Alt 12-04-2012, 19:43
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Gamer20 Beitrag anzeigen
danke für die infos. ich habe das in JS so geklärt:

Code:
$(eobj + " input[name='Boxen']:checked").each(function()
{Kette = Kette + '&Boxen%5B%5D=' + $(this).val();});
ich denke mal das ist die kürzeste variante!
Bei deiner Variante hast du auf das URL-Encoding vergessen!

Aber wie wahsaga schon sagte, warum machst du das überhaupt per Hand?
Mit Zitat antworten
  #8 (permalink)  
Alt 13-04-2012, 05:36
Gamer20
 Registrierter Benutzer
Links : Onlinestatus : Gamer20 ist offline
Registriert seit: Mar 2005
Beiträge: 336
Gamer20 kann nur auf Besserung hoffen
Standard

weil das mit $(#formblog1).serialize(); nicht geklappt hat. der hatte mir das trotzdem ohne klammern serlialisiert und in php konnte ich es nicht normal als array speichern.

das ist doch das problem, weshalb ich hier geschrieben habe.

selbst mit serializeArray(); hat es nicht geklappt, deshalb mußte ich in meinen string irgendwie die eckigen klammern noch mit einbauen.
Mit Zitat antworten
  #9 (permalink)  
Alt 13-04-2012, 08:45
h3ll
 Registrierter Benutzer
Links : Onlinestatus : h3ll ist offline
Registriert seit: Mar 2008
Beiträge: 3.581
h3ll befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Gamer20 Beitrag anzeigen
weil das mit $(#formblog1).serialize(); nicht geklappt hat. der hatte mir das trotzdem ohne klammern serlialisiert und in php konnte ich es nicht normal als array speichern.
Halt ich für unwahrscheinlich, dass .serialize() deine Klammern entfernt. Bei mir macht es das zumindest nicht.
Mit Zitat antworten
  #10 (permalink)  
Alt 13-04-2012, 12:25
wahsaga
  Moderator
Links : Onlinestatus : wahsaga ist offline
Registriert seit: Sep 2001
Beiträge: 25.236
wahsaga befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Gamer20 Beitrag anzeigen
weil das mit $(#formblog1).serialize(); nicht geklappt hat. der hatte mir das trotzdem ohne klammern serlialisiert
Natürlich müssen die Klammern in den Feldnamen schon enthalten sein, damit serialize sie auch als Parameternamen übernimmt.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
Mit Zitat antworten
Antwort

Lesezeichen


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/102845-post-string-mit-gleichen-namen-checkboxen-auswerten.html
Erstellt von For Type Datum
MetaGer, Suche nach: Checkboxen mit JavaScript auswerten This thread Refback 06-06-2012 10:37

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Checkboxen in einer Schleife mit Arrays namen zuordnen Daniel002 PHP Developer Forum 11 12-04-2010 21:47
Checkboxen auswerten netleader PHP Developer Forum 3 11-04-2006 22:25
Checkboxen auswerten. toxiclein PHP Developer Forum 1 13-09-2005 14:03
Checkbox mit gleichen namen berwie HTML, JavaScript, AJAX, jQuery, CSS, Bootstrap, LESS 1 04-10-2003 18:32
HTML Formular mit multiplen Checkboxen in PHP auswerten HMOCDarkLord PHP Developer Forum 3 21-04-2002 14:24

Themen-Optionen
Thema bewerten
Thema bewerten:

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 an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:12 Uhr.