| 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! Post your PHP questions here! |
 |

15-07-2005, 07:35
|
|
computiger
Newbie
|
|
Registriert seit: Nov 2002
Beiträge: 14
|
|
Inputfeld verarbeiten
Hallo
ich möchte gern, die mit mysql_fetch_array ausgegebenen, MySQL-Daten über INPUT Felder in der Datenbank ändern, und wieder ins INPUT Feld übergeben.
Irgendwie scheine ich aber dabei nicht so ganz klar zu kommen.
hier ein Beispiel:
PHP-Code:
<?php
while ($myrow = mysql_fetch_array($result)){
?>
<tr>
<td><?php echo $myrow["MATCHCODE"]; ?></td>
<td><input type='Text' name='anzahl<?php echo $myrow['tid']; ?>' value='<?php echo $myrow['anzahl']; ?>' size='1' ></td>
</tr>
<?php
}
?>
Ich habe versucht eine Variable zu setzen, die sich aus anzahl und der eindeutigen TabellenID zusammensetzt.
Das hat auch wunderbar funktioniert. Die Probleme habe ich, die Daten weiterzuverarbeiten.
PHP-Code:
$id=$myrow1['tid'];
if(isset($_REQUEST['anzahl'.$id]))
{
if ($_REQUEST['anzahl'].$id != $myrow1['anzahl']){
$aenderung=$_REQUEST['anzahl'.$id];
$updatesql="UPDATE temp SET anzahl='$aenderung' WHERE tid='$id'";
$resultupdatesql= mysql_query($updatesql) or die( sprintf($error,'SQL-ERROR: ').mysql_error() );
}
Hat jemand eine Idee bzw. einen Vorschlag, wie es besser zu realisieren ist?
|

15-07-2005, 08:20
|
|
hhcm
PHP Senior
|
|
Registriert seit: Jun 2005
Ort: Viersen, NRW
Beiträge: 1.829
|
|
Versuch doch mal anstatt name='anzahl<?php echo $myrow['tid']; ?>' einfach name="anzahl[]"
Damit hast du nach dem senden des Formlulars in $_POST["anzahl"] ein Array das du weiterverarbeiten kannst.
Geändert von hhcm (15-07-2005 um 09:44 Uhr)
|

15-07-2005, 20:45
|
|
computiger
Newbie
|
|
Registriert seit: Nov 2002
Beiträge: 14
|
|
klingt gut.
Ich werde es nachher gleich einmal probieren.
Danke
|

15-07-2005, 23:45
|
|
computiger
Newbie
|
|
Registriert seit: Nov 2002
Beiträge: 14
|
|
Irgendwie komme ich nicht weiter.
Die Übergabe in ein Array klappt, das Positionieren des Arrayzeigers funktioniert nicht.
Ich habs wie folgt probiert:
PHP-Code:
<?php
$query = "SELECT tid FROM temp";
$result = mysql_query( $query ) or die( sprintf($error,'SQL-ERROR: ').mysql_error() );
$gesamt = mysql_num_rows( $result );
$zaehler = 0;
while ($myrow = mysql_fetch_array($result))
{
$wert = $anzahl[$zaehler];
if ($wert != $myrow['anzahl'])
{
$updatesql="UPDATE temp SET anzahl='$wert' WHERE tid='$id'";
$resultupdatesql= mysql_query($updatesql) or die(sprintf($error,'SQL-ERROR: ').mysql_error() );
}
?>
<tr>
<td><?php echo $myrow["MATCHCODE"]; ?></td>
<td><input type='Text' name='anzahl<?php echo $myrow['tid']; ?>' value='<?php echo $myrow['anzahl']; ?>' size='1' ></td>
</tr>
<?php
$zaehler++;
}
?>
Da das MySQL_FETCH_ARRAY die gleiche Größe wie das Array Anzahl[] aus dem InputFeld hat, sollte es doch so funktionieren?
Aber es funktioniert nur, wenn nur ein Datensatz vorhanden ist, und auch nur, wenn das Formular zweimal aufgerufen wurde.
Das heisst, im Prinzip das gleiche Problem, wie vorher auch.
Weiss jemand eine Lösung?
|

15-07-2005, 23:58
|
|
prego
PHP Senior
|
|
Registriert seit: May 2005
Ort: Hey ropp, hinne riwwer unn wirrer zuricke!
Beiträge: 1.602
|
|
Ich versuch mal kurz nachzuvollziehen was du machst - korrigier mich wenn ich falsch liege
Du selectest nur die Spalte "tid" aus deiner Datenbank.
...
Du greifst per $myrow auf die Spalte "anzahl" zu die nicht existiert.
...
Du greifst per $myrow auf die Spalte "MATCHROW" zu die nicht existiert.
...
Du erstellst ein neues Imput-Element mit Namen "anzahl{tid}" und nicht anzahl[{tid}] (fals du das machen wolltest)
...
Du setzt in value eine leere Variable ($myrow['anzahl'])
So ganz stimmig ist es nicht....
---
PS: benutz bitte mysql_fetch_array($result, MYSQL_ASSOC) um speicher zu sparen, wenn du die numerischen zeiger nicht brauchst...
PSS: Schreib bitte $array['key'] und nicht $array[key] - weil sonst php versucht eine Konstante namens key zu benutzen und dann im Fehlerfall den String 'key' benutzt
__________________
so long, der-p | 72dpi-club
Microsoft IE-Manager Dean Hachamovitch bei der Vorführung des IE7 Beta Preview 2 am 20.3.2006:
"Wir hatten mit IE ganz offensichtlich was verschlafen."
|

16-07-2005, 09:07
|
|
computiger
Newbie
|
|
Registriert seit: Nov 2002
Beiträge: 14
|
|
Ok, ich hatte den Code etwas abgekürzt.
Ich selektiere die Spalte tid und anzahl aus der Tabelle temp.
Dann suche ich in einer anderen Tabelle tab_art nach id, welche den Wert von tid haben soll, um diese Zeilen auszugeben.
In den ausgegebenen Zeilen möchte ich, über ein INPUT-Feld, die Werte für Anzahl, in der Tabelle temp, ändern.
PHP-Code:
<?php
$sql1="SELECT tid,anzahl from temp where 1";
$result1 = mysql_query($sql1);
$gesamt = mysql_num_rows( $result1);
$zaehler = 0;
while ($myrow1 = mysql_fetch_array($result1, MYSQL_ASSOC))
{
$IDD=$myrow1["tid"];
$sql="SELECT id,MATCHCODE,BEZEICHNUN,BILD FROM tab_art WHERE id = '$IDD'";
$result = mysql_query($sql) or die( sprintf($error,'SQL-ERROR: ').mysql_error() );
while ($myrow = mysql_fetch_array($result, MYSQL_ASSOC))
{
$wert = $anzahl[$zaehler];
if ($wert != $myrow1['anzahl'])
{
$updatesql="UPDATE temp SET anzahl='$wert' WHERE tid='$id'";
$resultupdatesql= mysql_query($updatesql) or die(sprintf($error,'SQL-ERROR: ').mysql_error() );
}
?>
<tr>
<td><?php echo $myrow["MATCHCODE"]; ?></td>
<td><input type='Text' name='anzahl[]' value='<?php echo $myrow1['anzahl']; ?>' size='1' ></td>
</tr>
<?php
$zaehler++;
}
}
?>
Zitat:
|
Du erstellst ein neues Imput-Element mit Namen "anzahl{tid}" und nicht anzahl[{tid}] (fals du das machen wolltest)
|
ich bin dem Rat von hhcm gefolgt und habe für das das Inputfeld ein Array erstellt.
Das auslesen des Arrays über
PHP-Code:
if (isset($_REQUEST["anzahl"]))
{
foreach($_REQUEST["anzahl"] as $wert)
{
echo $wert."<br>";
}
}
klappt super.
Die schwierigkeiten habe ich, die Werte des Arrays,richtig positioniert, in die Datenbank zu bekommen.
Geändert von computiger (16-07-2005 um 17:02 Uhr)
|

16-07-2005, 12:58
|
|
newphp
Junior Member
|
|
Registriert seit: Jul 2005
Beiträge: 174
|
|
welche Reihnenfolge brauchst du denn? versteh dein Problm nicht so ganz
|

16-07-2005, 18:03
|
|
computiger
Newbie
|
|
Registriert seit: Nov 2002
Beiträge: 14
|
|
@newphp
Zitat:
|
welche Reihnenfolge brauchst du denn? versteh dein Problm nicht so ganz
|
OK, ich versuche mich besser auszudrücken.
Ich habe eine Tabelle tab_art und eine namens temp.
In der Tabelle temp speichere ich, in einem anderen Formular, bestimmte Zeilen (nur die ID der Zeilen) der Tabelle tab_art und eine Stückzahl Anzahl.
Jetzt gebe ich die Zeilen der Tabelle tab_art, mit der als Filter fungierenden Tabelle temp, aus, sowie die Stückzahl, welche ich evtl. über ein Input-Feld ändern und den geänderten Wert zurück in die Tabelle temp schreiben möchte.
|

16-07-2005, 19:19
|
|
computiger
Newbie
|
|
Registriert seit: Nov 2002
Beiträge: 14
|
|
OK, ich hatte einen Denkfehler.
Die Werte für Anzahl müssen geändert werden, bevor ich MYSQL_FETCH_ARRAY für die Listendarstellung aufrufe und nicht darin.
Das heisst, erst das Array des INPUT-Feldes verarbeiten
PHP-Code:
if (isset($_REQUEST["anzahl"]))
{
$sqlaendern="SELECT tid,anzahl from temp";
$resultaendern = mysql_query($sqlaendern);
while ($myrowaendern = mysql_fetch_array($resultaendern, MYSQL_ASSOC))
{
$id=$myrowaendern['tid'];
$wert = $anzahl[$zaehler];
echo $wert."<BR>";
$updatesql="UPDATE temp SET anzahl='$wert' WHERE tid='$id'";
$resultupdatesql= mysql_query($updatesql) or die( sprintf($error,'SQL-ERROR: ').mysql_error() );
$zaehler++;
}
}
und dann die Ausgabe generieren
PHP-Code:
<?php
$sql1="SELECT tid,anzahl from temp where 1";
$result1 = mysql_query($sql1);
$gesamt = mysql_num_rows( $result1);
$zaehler = 0;
while ($myrow1 = mysql_fetch_array($result1, MYSQL_ASSOC))
{
$IDD=$myrow1["tid"];
$sql="SELECT id,MATCHCODE,BEZEICHNUN,BILD FROM tab_art WHERE id = '$IDD'";
$result = mysql_query($sql) or die( sprintf($error,'SQL-ERROR: ').mysql_error() );
while ($myrow = mysql_fetch_array($result, MYSQL_ASSOC))
{
?>
<tr>
<td><?php echo $myrow["MATCHCODE"]; ?></td>
<td><input type='Text' name='anzahl[]' value='<?php echo $myrow1['anzahl']; ?>' size='1' ></td>
</tr>
<?php
}
}
?>
Jetzt werden die Daten korrekt angezeigt und auch in Die Tabelle temp übernommen.
 Gibt es jetzt noch eine Möglichkeit, per Link, ein INPUT-Feld zu übertragen?
|

16-07-2005, 19:24
|
|
penizillin
PHP Guru
|
|
Registriert seit: Feb 2004
Beiträge: 10.166
|
|
Zitat:
|
Gibt es jetzt noch eine Möglichkeit, per Link, ein INPUT-Feld zu übertragen?
|
ohne js - nur manuell:
Code:
<a href="foo.php?foo=bar">link</a>
|

16-07-2005, 20:39
|
|
computiger
Newbie
|
|
Registriert seit: Nov 2002
Beiträge: 14
|
|
@penizillin
den manuellen Weg kenne ich.
Wie funktioniert es in JavaScript?
 Auch, wenn die Frage nicht ins PHP Forum passt
|

17-07-2005, 13:52
|
|
penizillin
PHP Guru
|
|
Registriert seit: Feb 2004
Beiträge: 10.166
|
|
|

17-07-2005, 14:22
|
|
computiger
Newbie
|
|
Registriert seit: Nov 2002
Beiträge: 14
|
|
Habs jetzt so gelöst
PHP-Code:
<form action="<?php echo "{$_SERVER['PHP_SELF']}"; ?>" name="Form<?php echo $s; ?>" method="GET" >
<input type='Text' style='text-align:center;' name='anzahl' value='<?php echo $myrow1['anzahl']; ?>' size='1'>
<input type="hidden" name="anders" value="<?php echo $IDD; ?>">
<a target='_self' href='javascript:window.document.Form<?php echo $s; ?>.submit();'>aendern</a></form>
Für jede Ausgabezeile habe ich ein neues Formular, indem ich den Input ändern und per Link, einzeln, weiterverarbeiten kann.
|
|
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
|