php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 17.07.2007, 22:33  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Argh
Ja das weiß ich doch, aber das ist nicht mein Problem

Wenn ich es so mache, wie du beschreibst, dann habe ich doch so viele Zeilen, wie ich Einträge in der DB habe. Also 4 Familienmitglieder in der DB ergibt dann nach der Whileschleife, vier Zeilen.

Ich muss aber 8 Zeilen (2Ehepartner, 6 Kinder) haben, die nur zum Teil aus der DB gefüllt sind:

Mann gefüllt aus DB
Frau
K1 gefüllt aus DB
K2 gefüllt aus DB
K3
K4
K5
K6

Die, die nicht gefüllt sind, kann ich jedoch noch füllen, weil ja alle über ein INPUT-Feld verfügen.

Versteht mich denn keiner
maeck ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 18.07.2007, 01:33  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

dr.e. hat einen kleinen aber feinen Fehler gemacht, und zwar musst du an die <input name> Attribut-Werte eckige Klammern hängen, damit werden die übergebenen Werte für PHP zu einem Array.

Beispiel:
Code:
<input type="lastname[]" value="Müller" />
<input type="lastname[]" value="Meyer" />
abgeschickt per submit kommt bei PHP folgendes raus:
PHP-Code:
<?php
// $_POST = array('lastname' => array(0 => 'Müller', 1 => 'Meyer'));
?>
So kannst du per JavaScript ganz einfach einen Button verlinken, der zB folgendes Skript ausführt:
Code:
function addChild() // child diesmal im wahren Sinne
{
  var input = document.createElement("INPUT");
  input.type = "text";
  input.name = "lastname[]";

  var form = document.forms["MEINFORMULAR"];
  form.appendChild(input);
}
Ist der Code nicht selbsterklärend? Erstelle dynamisch einen <input> Tag mit, den Attributen type="text" und name="lastname[]" und häng es direkt vorne ins Formular. Du kannst die Funktion 10x ausführen und ohne Neuladen wird 10x ein neues Eingabefeld ins Formular gehängt. Der Benutzer kann also selbst entscheiden, wieviele Kinder er eintragen möchte. Da du für den Array keinen expliziten Schlüssel festlegst (zwischen [] könnte ja zB ein Index stehen - assoziativ oder numerisch - wenn keiner drinsteht, wird eine fortlaufende Zahl verwendet), wird in PHP eben ein durchnummerierter Index verwendet, das heißt es kommt ein PHP-Array für $_POST['lastname'] an, der alle 10 hinzugefügten Werte enthält. Easy oder?

Ums zu verdeutlichen:
PHP-Code:
<html>
<head>
  <script type="text/javascript">
  function addChild() // child diesmal im wahren Sinne
  {
    var input = document.createElement("INPUT");
    input.type = "text";
    input.name = "lastname[]";

    var form = document.forms["meinformular"];
    form.appendChild(input);
  }
  </script>
</head>
<body>

<? if (array_key_exists('lastname'$_POST)) { ?>
<ul>[*]<?=implode("[*]"$_POST['lastname'])?>[/list]<? ?>

<form name="meinformular" method="post">
<button onclick="addChild();return false">neues Kind</button>
<input type="submit" />
</form>

</body>
</html>
Zergling-new ist offline  
Alt 18.07.2007, 03:19  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Schau Dir doch mal phpMyAdmin an, wie es dort z.B. zum Anlegen eines neuen Tabellenfelds umgesetzt ist. Oder Du nutzt das verlinkte Formular und generierst per Javascript und/oder php nach Wiederaufruf automatisch ein neues Eingabefeld mit einem dynamisch vom Vorgängerfeld abhängigen name-Attribut
EDIT: Ups, sorry, 2. Seite des Threads übersehen...
nikosch ist gerade online  
Alt 19.07.2007, 16:44  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Danke Zergling!
Zitat:
Zitat von Zergling
Erstelle dynamisch einen <input> Tag mit, den Attributen type="text" und name="lastname[]" und häng es direkt vorne ins Formular. Du kannst die Funktion 10x ausführen und ohne Neuladen wird 10x ein neues Eingabefeld ins Formular gehängt. Der Benutzer kann also selbst entscheiden, wieviele Kinder er eintragen möchte. Da du für den Array keinen expliziten Schlüssel festlegst (zwischen [] könnte ja zB ein Index stehen - assoziativ oder numerisch - wenn keiner drinsteht, wird eine fortlaufende Zahl verwendet), wird in PHP eben ein durchnummerierter Index verwendet, das heißt es kommt ein PHP-Array für $_POST['lastname'] an, der alle 10 hinzugefügten Werte enthält. Easy oder?
Aber wenn ich die INPUT-Felder dynamisch erstelle, dann kann ich darauf nicht über JS zugreifen, um z.B. Berechnungen anzustellen, oder?

Z.B.: Ich habe nicht nur ein Inputfeld sondern auch SELECT-Felder, in dem für die Person ausgewählt werden kann, welches Essen derjenige möchte. Also ob Frühstück, und/oder Mittag-/Abendessen.
Wenn dort ein Essen ausgewählt wird, soll eine Funktion aufgerufen werden, die bei jedem Mitglied der Familie schaut, was an Essen ausgewählt wurde, den Gesamtpreis berechnet und dies in einem Feld anzeigt.
Wenn ich die Felder aber nicht mit Namen auseinander halten kann, weil sie alle "name="Essen[]" heissen, dann kann ich sie auch nicht ansprechen, oder?

Ich merke, dass ich mit dieser Geschichte wirklich an meine Grenzen stoße und bin dankbar von euch zu lernen.

Schöne Grüße,
Marcel
maeck ist offline  
Alt 19.07.2007, 22:20  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Zitat von maeck
Aber wenn ich die INPUT-Felder dynamisch erstelle, dann kann ich darauf nicht über JS zugreifen, um z.B. Berechnungen anzustellen, oder?
Doch das geht. Über den DOM Baum kannst Du die Objekte unabhängig von ihrem name Attribut über ihren Typ (Tagname) und einen Index ansprechen. Da du wahrscheinlich ohnehin für jede Person die gleiche Menge Eingabefelder benutzt, kannst Du das gute in einer Schleife abarbeiten. Sinnvollerweise zählst Du beim Erstellen neuer Inputfelder gleich die Anzahl in einer globalen Variablen mit.
nikosch ist gerade online  
Alt 20.07.2007, 00:31  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Hallo nikosch77,

könntest du mir das bitte ein bisschen näher erklären?
Wie komme ich über den DOM-Baum an die Tags und wie meinst du, dass ich das über eine Schleife lösen kann?

Danke und schöne Grüße,
Marcel
maeck ist offline  
Alt 20.07.2007, 04:05  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Versuch Dich mal hier reinzudenken. Das demonstriert, wie jeweils ein Paar Felder angelegt wird (add) und davon das erste über seinen numerischen Index angesprochen und mit einer Doppelklickfunktionalität versehen (Aufruf von fill) wird. Dabei bezieht es sich jeweils auf sein rechtes Nachbarfeld, welches beim Erstellen mit einer Zufallszahl gefüllt wird.

Code:
<html><head>
<style>
  input {float:left;}
  .nl {clear:left;}
</style>


</head><body>

<div id="Elements">
<span onclick="add()">add</span>


<input type="text" onclick="fill(0)" name="name[]">
<input type="text" name="name[]" value="1">
</div>


<script type="text/javascript">
  var fields = document.getElementById('Elements').getElementsByTagName('input');

  function add()
    {
    var InputNeu = document.createElement('input');
    var InputNeu2 = document.createElement('input');

    var Attribute = document.createAttribute('class');
    Attribute.nodeValue = "nl";


    document.getElementById('Elements').appendChild(InputNeu);
    document.getElementById('Elements').appendChild(InputNeu2);

    var number = fields.length - 2;
    fields[number + 1].value = Math.round (Math.random() * 1000000);
    fields[number].ondblclick = function () { fill (number); }
    fields[number].setAttributeNode(Attribute);
    }

  function fill(number)
    {
    fields[number].value = fields[number+1].value - 1;
    }

</script>


</body></html>
nikosch ist gerade online  
Alt 21.07.2007, 18:32  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Hallo nikosch77,

vielen Dank! Das hat mir schon sehr weitergeholfen

Jetzt habe ich noch eine Frage dazu.
Ich habe folgenden Code:
Code:
if ( getAge(new Date(fields_input[j].value)) < 13) setMealSwitch(fields_select[i].value, 0);
Wenn ich aus einem INPUT-Feld den Value auslese (in meinem Fall ein Geburtstdatum im Format 2002-12-31) muss ich das dann noch in ein Dateformat umwandeln damit ich es benutzen kann? Denn irgendwie kann die Funkton getAge mit dem Geburtstdatum nichts anfangen und rechnet mir das Alter nicht aus.

// EDIT: Hat sich erledigt: Ich muss den String erst splitten, um die einzelnen Werte zu bekommen.

Danke,
Marcel
maeck ist offline  
Alt 21.07.2007, 23:28  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von maeck
Wenn ich die Felder aber nicht mit Namen auseinander halten kann, weil sie alle "name="Essen[]" heissen, dann kann ich sie auch nicht ansprechen, oder?
Hallo,
auch wenn es sich schon erledigt haben sollte, grundsätzlich sollte ein Objekt natürlich eindeutig sein, am Besten im Namen oder letztlich in seiner ID oder der Gesamtsumme seiner Eigenschaften. Du kannst jedem DOM Objekt natürlich eine ID zuweisen, die keinen Einfluß auf sein name-Attribut hat.
Somit wäre das geklärt.
Anders kannst du natürlich einen Index in die eckigen Klammern schreiben:
Code:
<input name="firstname[father]" id="firstname_father" value="<?=$_GET['firstname']['father']?>" 
/>
<input name="firstname[mother]" id="firstname_mother" value="<?=$_GET['firstname']['mother']?>" />
Auch diese Konstellation ist möglich.

Wenn du dich mehr für DOM interessierst, hier gibt es haufenweise Funktionen:
http://de.selfhtml.org/javascript/
http://de.selfhtml.org/javascript/objekte/document.htm
(speziell getElement* Funktionen)
http://de.selfhtml.org/javascript/objekte/node.htm
Zergling-new ist offline  
Alt 22.07.2007, 13:59  
Erfahrener Benutzer
 
Registriert seit: 28.06.2008
Beiträge: 259
maeck befindet sich auf einem aufstrebenden Ast
Standard

Super! Vielen Dank für die Informationen und die Links.
Möchte mich gerne etwas tiefer darin einarbeiten und da kommen sie mir gerade recht.

Schönen Sonntag und schöne Grüße,
Marcel
maeck ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
HTML Tabelle ausgeben PHP-Fortgeschrittene 7 22.02.2011 17:59
abfrage mit bedingung bei einer zweiten tabelle marcelglaeser Datenbanken 6 29.05.2008 19:10
Frage: richtige SQL Abfrage von einer MySQL Spalte die SET werte besitzt Seb PHP Tipps 2008 2 29.05.2008 11:36
MySQL und html Tabelle sven88 PHP Tipps 2008 10 12.05.2008 17:31
Abfrage auf fehlende ID in einer Tabelle maeck Datenbanken 2 04.07.2007 19:44
where Abfrage in anderer Tabelle?? Matthiasnet Datenbanken 10 11.04.2007 17:35
werte einer tabelle in andere tabelle speichern high_scorer Datenbanken 3 30.09.2005 16:28
[Erledigt] mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
Abfrage einer Tabelle mit mehreren wörtern Diego1978 PHP Tipps 2005-2 4 15.08.2005 14:58
[Erledigt] html Tabelle mit scrollbars HTML, Usability und Barrierefreiheit 16 09.04.2005 12:54
Tabelle existiert, if Abfrage Datenbanken 9 15.02.2005 14:00
Word Tabelle direkt in HTML Datei einfügen nsane HTML, Usability und Barrierefreiheit 7 28.12.2004 09:02
Werte in Tabelle änder und in DB speichern PHP Tipps 2004-2 5 17.12.2004 22:11
werte einer tabelle mit werten einem array vergleichen PHP Tipps 2004 1 08.07.2004 21:33
[Erledigt] Werte eines Arrays aus Tabelle auslesen ? PHP-Fortgeschrittene 12 08.06.2004 19:57

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
javascript vorgängerfeld, eingabefelder in formular bringen php, php sql abfrage meherer ergebnisse abarbeiten, abfrage sql mit html, abfrage sql per htm, werte sql in input feld

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:40 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.