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

07-01-2015, 16:12
|
Heavy-Dee
Registrierter Benutzer
|
|
Registriert seit: Jan 2015
Beiträge: 6
|
|
Übergabe $_POST aus einer Tabellenzelle
Ein frohes neues Jahr an alle Forenmitglieder.
Ich bearbeite gerade einen Dienstplaner der die Schichtdienste aller Angestellten anzeigt.
Dazu wird nach Auswahl eines Monat/Jahr eine Tabelle angezeigt in der horizontal die Tage des Monats und vertikal alle Angestellten untereinander dargestellt werden.
Die eingetragenen Dienstarten (Tagschicht, Nachtschicht ect. ) werden bei jedem Angestellten an dem entsprechenden Tag (mit entsprechender Formatierung und ggf. vorhandenem Kommentar als 'title') angezeigt.
Nun möchte ich das beim anklicken einer Tabellenzelle der entsprechende Datumswert für den angeklickten Tag (Spalte) und die NutzerID des angeklickten Nutzers (Zeile) zur Ersteingabe bzw. Bearbeitung mittels $_POST übergeben werden.
Das onklick event befindet sich im Tag der Tabellenzelle: (echo "<td onclick='document.edit_data.submit()'; align='center'"
PHP-Code:
<div>
<fieldset class="table_list">
<form class="frm" name='edit_data' method='POST' action='planning.php?mpkt=1'>
<table class="table" align='center'>
<thead class="frm">
<tr class="frm">
<th align='left' width='160px'></th>
<?php
// Schleife für Tage des Monats / 1.Zeile
for ($selTag = 1; $selTag <= date("t",$selDatum); $selTag++)
{
$selDatum = mktime(0, 0, 0, $selMonat, $selTag, $selJahr); // selektietes Datum als "timestamp"
$df_tag = Dienstfrei($selMonat, $selTag, $selJahr); // Übergabewert Funktion Dienstfrei [0]=Mo.-Fr. [1]=Sa. [2]=Sa+ [3]=So./Feiertag
$ferien_tag = Ferien($selMonat, $selTag, $selJahr); // Übergabewert Funktion Ferien [0]=keine Ferien [1]=Ferien in Bayern
echo "<th align='center' width='28px' ";
IF ($df_tag)
{
echo "bgcolor='#DDDDDD' ";
}
Else
{
echo "bgcolor='#F5F5F5' ";
}
IF ($_aktDatum == $selDatum)
{
echo "style='border: solid 1px red; padding-top 3px'>";
}
Else
{
echo "style='border: none; padding-top: 3px'>";
}
# Ausgabe Tage u. Bezeichnung des Wochentags
echo date ("d", $selDatum) . "<br>" .
"<div style='font-size: 10px; ";
# Ausgabe der Ferien in Bayern
IF ($ferien_tag)
{
echo "border-bottom: solid 5px #85ADAD;' title='Ferien'>";
}
Else
{
echo "border-bottom: solid 5px transparent;'>";
}
echo strtr(date("w", $selDatum), $arrTage_kz) . "</div>";
echo "</th>";
}
?>
</tr>
</thead>
<?php
// Gruppierung der Datensätze nach Fachbereichen
$sql_o = "SELECT * FROM `unitc`
INNER JOIN `organ` ON organ.orgkey = unitc.fk_orgkey
WHERE `orgid` = '$_OID'
ORDER BY `unitcid` asc";
$res_o = mysql_query($sql_o);
while($row=mysql_fetch_array($res_o))
{
$cid = $row['unitcid'];
$cname = $row['unitcname'];
echo "<tr class='frm'>";
echo "<td class='frm_o' colspan='$selTag' >";
echo $cname;
echo "</td>";
echo "</tr>";
// Zeilenweise Auflistung der Nutzer (Hauptbereich der Tabelle)
$sql_u = "SELECT `rankshort`, `surname`, `forename`, userid FROM `user`
INNER JOIN `rank` ON rank.rankkey = user.fk_rankkey
INNER JOIN `role` ON role.rolekey = user.fk_rolekey
INNER JOIN `organ` ON organ.orgkey = user.fk_orgkey
INNER JOIN `unitc` ON unitckey = user.fk_unitckey
WHERE `staffno` != 0 AND `orgid` = '$_OID' AND `unitcid` = $cid
ORDER BY `roleid` desc, `rankid` desc, `surname` asc";
$res_u = mysql_query($sql_u);
while($row=mysql_fetch_array($res_u))
{
$rank = $row['rankshort'];
$name = $row['surname'];
$vname = $row['forename'];
$userid = $row['userid'];
echo "<tr class='frm'>";
// 1. Spalte Personal (DstG, Name, Vorname)
echo "<td align='left'>";
echo $rank . " " . $name . " " . $vname;
echo "</td>";
// Tagesspalten für den entsprechenden Monat
for ($selTag = 1; $selTag <= date("t",$selDatum); $selTag++)
{
$selDatum = mktime(0, 0, 0, $selMonat, $selTag, $selJahr); // selektietes Datum als "timestamp"
$df_tag = Dienstfrei($selMonat, $selTag, $selJahr); // Übergabewert Funktion Dienstfrei [0]=Mo.-Fr. [1]=Sa. [2]=Sa+ [3]=So./Feiertag
echo "<td onclick='document.edit_data.submit()'; align='center'";
IF ($df_tag)
{
echo "bgcolor='#DDDDDD' ";
}
Else
{
echo "bgcolor='#F5F5F5' ";
}
IF ($_aktDatum == $selDatum)
{
echo "style='border:solid 1px red'>";
}
Else
{
echo "style='border:none'>";
}
// Zeilenweise Auflistung der Nutzerdaten (Hauptbereich der Tabelle)
$selDatum = date("Y-m-d",$selDatum); # Umwandlung in strTime in Datumsformat
$sql_d = "SELECT fk_userid, shiftdate, shiftshort, shiftcolour, comments
FROM `data_$_OID`
INNER JOIN `shift` ON `shift`.shiftkey = `data_$_OID`.fk_shiftkey
WHERE `data_$_OID`.fk_userid = '$userid' AND shiftdate = '$selDatum'";
$res_d = mysql_query($sql_d);
while($row=mysql_fetch_array($res_d))
{
$fk_userid = $row['fk_userid'];
$shiftdate = $row['shiftdate'];
$shiftshort = $row['shiftshort'];
$shiftcolour = $row['shiftcolour'];
$comments = $row['comments'];
// <div> für Formatierung der Daten und Anzeige der Kommentare
echo "<div style='line-height: 16px; font-weight: 100; background: $shiftcolour; ";
If ($comments != NULL)
{
echo "font-weight: 700; font-style: italic;' title='$comments"; # Format u. Ausgabe 'Comments'
}
echo "' >";
echo $shiftshort . "</div>"; # Ausgabe Schichtart
}
// Formularfelder für Datum und NutzerId (hier noch als Text später 'hidden')
echo "<input type='text' name='sDatum' value='$selDatum'>"; // Datum der Spalte
echo "<input type='text' name='sUser' value='$userid'>"; // UserId der Benutzerzeile
echo "</td>";
}
echo "</tr>";
}
}
?>
</table>
</form>
</fieldset>
</div>
<?php
$S = $_POST['sDatum'];
$U = $_POST['sUser'];
echo $S . "/" . $U;
?>
...
die Input Felder in den Zellen zeigen die korrekten Werte an, aber beim klick auf eine Zelle werden diese nicht richtig übergeben.
Ich vermute das bei der Übermittlung der Daten die "letzten" Werte aus den Schleifen übergeben werden, aber ich habe keine Ahnung wie ich das abfangen kann.
Wäre nett wenn mir jmd helfen könnte.
|

07-01-2015, 19:02
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.800
|
|
Worked as designed. Du überschreibst jedes Mal den Namen des Input-Feldes, also wird auch nur der letzte Wert übermittelt. Mach mal Folgendes
PHP-Code:
echo "<input type='text' name='sDatum[]' value='$selDatum'>";
echo "<input type='text' name='sUser[]' value='$userid'>";
und dann lass dir das mit einem print_r ausgeben. Dann verstehst du es.
Gruß
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

07-01-2015, 20:26
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.875
|
|
Datenbankabfragen haben übrigens inmitten der HTML-Ausgabe nichts verloren. Halte dich an das EVA-Prinzip.
SELECT * sollte niemals verwendet werden. Gib im SELECT immer die Spalten an, die du im Ergebnis erwartest.
Du beachtest die Kontextwechsel nicht. Werte, die du in HTML-Code einfügst, müssen mit htmlspecialchars() maskiert werden. Werte, die du in SQL-Code einfügst, müssten mit mysql_real_escape_string() maskiert werden.
Die mysql_* Funktione sind veraltet und sollten nicht mehr verwendet werden. Als Alternative gibt es mysqli und PDO.
|

08-01-2015, 09:59
|
Heavy-Dee
Registrierter Benutzer
|
|
Registriert seit: Jan 2015
Beiträge: 6
|
|
@ Kropff:
die Ausgabe von
PHP-Code:
$S = $_POST['sDatum'];
echo print_r($S,true);
liefert folgendes Ergebnis:
Array ( [0] => 2015-01-01 )
Alles klar, aber wie kann ich das ändern?
|

08-01-2015, 10:12
|
Heavy-Dee
Registrierter Benutzer
|
|
Registriert seit: Jan 2015
Beiträge: 6
|
|
@ h3ll:
Wenn das so funktioniert wie ich mir das vorstelle versuche ich die Datenbankabfragen aus dem html-teil zu nehmen und passe auch die select-Anweisungen entsprechend an. Auch die mysql_* Funktionen möchte ich dann auf mysqlli umstellen.
Da ich aber Änfänger bin und nicht sofort den Überblick verlieren möchte, versuche ich es erst zu realisieren (mit den mir teil-bekannten alten) und dann anzupassen.
Die folgende Aussage verstehe ich nicht richtig, versuche mir aber die "Grunglagen" anzueignen.
Zitat:
Zitat von h3ll
Du beachtest die Kontextwechsel nicht. Werte, die du in HTML-Code einfügst, müssen mit htmlspecialchars() maskiert werden. Werte, die du in SQL-Code einfügst, müssten mit mysql_real_escape_string() maskiert werden.
|
|

08-01-2015, 14:37
|
Heavy-Dee
Registrierter Benutzer
|
|
Registriert seit: Jan 2015
Beiträge: 6
|
|
Ich habe mir nun 2 Arrays erstellt
PHP-Code:
$s_arr [$selTag] = $selTag;
$s_arr [$selTag][$userid] = $userid;
und meine Input-Felder wie folgt angepasst
PHP-Code:
echo "<input type='text' name='sDatum[$selTag]' value='$s_arr[$selTag][$selDatum]'>"; // Datum der Spalte
echo "<input type='text' name='sUser[$userid]' value='$s_arr[$selTag][$userid]'>"; // UserId der Benutzerzeile
als Ergebnis wird nun in jeder Zelle der Tageswert u. die Userid angezeit
-----------------------------------------------------
1[2015-01-01]. | 2[2015-01-02]. | 3[2015-01-03]. |
1[d215c89a].... | 2[d215c89a].... | 3[d215c89a].... |
-----------------------------------------------------
1[2015-01-01]. | 2[2015-01-02]. | 3[2015-01-03]. |
1[7e4986c7].... | 2[7e4986c7].... | 3[7e4986c7].... |
-----------------------------------------------------
1[2015-01-01]. | 2[2015-01-02]. | 3[2015-01-03]. |
1[3afa2593].... | 2[3afa2593].... | 3[3afa2593].... |
-----------------------------------------------------
allerdings bekomme ich es nicht hin die entsprechenden Werte zu über geben. 
Wie schaffe ich es, das beim anklichen des "blauen" Tabellenfeldes die Werte der Input-Felder übergeben werden.
Soll:
sDatum = 2015-01-02
sUser = 7e4986c7
PHP-Code:
print_r ( $s_arr );
liefert folgendes Ergebnis
Array
(
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
[6] => 6
[7] => 7
[8] => 8
[9] => 9
[10] => 10
[11] => 11
[12] => 12
[13] => 13
[14] => 14
[15] => 15
[16] => 16
[17] => 17
[18] => 18
[19] => 19
[20] => 20
[21] => 21
[22] => 22
[23] => 23
[24] => 24
[25] => 25
[26] => 26
[27] => 27
[28] => 28
[29] => 29
[30] => 30
[31] => 31
[32] => Array
(
[d215c89a] => d215c89a
[7e4986c7] => 7e4986c7
[3afa2593] => 3afa2593
[bd83e97e] => bd83e97e
[8eb82cd2] => 8eb82cd2
[e130e8f5] => e130e8f5
[24d5ee15] => 24d5ee15
[207e55a1] => 207e55a1
[b148c4a1] => b148c4a1
[7d91a0cb] => 7d91a0cb
[d83631b2] => d83631b2
[b213426f] => b213426f
[5791d5fb] => 5791d5fb
[548fadcc] => 548fadcc
[ef7c7242] => ef7c7242
[a0c679c3] => a0c679c3
[252d7be6] => 252d7be6
[561d0daf] => 561d0daf
[3f24094b] => 3f24094b
[2d0fb2ca] => 2d0fb2ca
[f56f5af0] => f56f5af0
[9ac53996] => 9ac53996
[9d7dbe68] => 9d7dbe68
[5bd1abbb] => 5bd1abbb
[62244eee] => 62244eee
)
)
vorab Danke für eine mögliche Hilfestellung
|

08-01-2015, 19:40
|
h3ll
Registrierter Benutzer
|
|
Registriert seit: Mar 2008
Beiträge: 3.875
|
|
Zitat:
Zitat von Heavy-Dee
Wenn das so funktioniert wie ich mir das vorstelle versuche ich die Datenbankabfragen aus dem html-teil zu nehmen und passe auch die select-Anweisungen entsprechend an. Auch die mysql_* Funktionen möchte ich dann auf mysqlli umstellen.
|
Ich halte es nicht besonders Zielführend als Anfänger erst das Falsche zu lernen, nur um es dann später umändern zu müssen. Da hast du nur doppelte Arbeit.
|

08-01-2015, 19:50
|
Heavy-Dee
Registrierter Benutzer
|
|
Registriert seit: Jan 2015
Beiträge: 6
|
|
naja wahrscheinlich hast du recht.
Beim nächsten Abschnitt im obigen Projekt versuche ich es gleich anders.
Aber erst mal brüte ich weiter über meiner Datenübergabe.
|

12-01-2015, 10:58
|
Heavy-Dee
Registrierter Benutzer
|
|
Registriert seit: Jan 2015
Beiträge: 6
|
|
da ich zur Umsetzung des Themas noch einige Zeit benötigen werde, möchte ich diesen Thread beenden.
Zeitgleich möchte ich mich hiermit jegliche Art der Unterstützung in diesem Forum bedanken!
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
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.
HTML-Code ist aus.
|
|
|
|
PHP News
Aktuelle PHP Scripte
Homepagetools 2022
Kostenloses Gästebuch und Homepagetools für die eigene Homepage.
Bei GuxDu kann man sich kostenlos die Websitetools auf die vorhandene Website einbauen. Zudem kann man bei GuxDU auch eine eigene Homepage mit 3D Effekten erstellen. GuxDu ist kostenlos.
29.04.2022
freepler | Kategorie: PHP/ Gaestebuch
|
SF-Shopsystem V1.0
Hier haben wir ein einzigartiges Shopsystem in PHP.
Die Anzahl der Artikel ist unbegrenzt, einfach zu bedienen und erklärt sich.
Ausführliche Beschreibung weiter unten.
28.04.2022
Speedcrawler | Kategorie: PHP/ Shops
|
Anzeigen Markt mit PayPal Bezahl System
Anzeigen Markt Script
mit PayPal Bezahl System
Der Benutzer hat die Möglichkeit sofort nach Bezahlung mit PayPal
seine Anzeigen zu schalten, je nach seinem Guthaben.
27.04.2022
Webace_de | Kategorie: PHP/ Anzeigenmarkt
|
Alle PHP Scripte anzeigen
|