Aufrufen und Updaten

Erks

Erfahrenes Mitglied
Hier ist mein Problem....ich lass per SELECT * FROM aus einer Tabelle alle Daten übergeben und die ordne ich dann wieder in eine Tabelle in HTML und dieses ausgegebenen Zeilen/Segmente kann man wieder, weil sie in einem Textfeld sind, verädern und Updaten. So soll es zwar sein, aber das Updaten spielt da nicht mit.

Der HTML Code
PHP:
<table>
<td width="83">Kurs Nr.</td>
                    <td width="83">Tag</td>
                    <td width="83">Datum</td>
                    <td width="83">Zeit</td>
                    <td width="83">Dauer</td>
                    <td width="83">Preis</td>
                  </tr>
                  <tr>
                    <td><?php
	  require ('mysql.php');
$sqlselectpass= "SELECT * FROM tshelfer_dance4fans_Videoclipdancing_Kids WHERE `kurs-nr`!=''";				// SELECT
if(!$res_id = mysql_query($sqlselectpass)){
	die('Falscher SQL Befehl');
	}
	while($companyname1=mysql_fetch_array($res_id)){
	echo '<input name="dance4fansjugendlvideoclipdancingkids1" type="text" id="dance4fansjugendlvideoclipdancingkids1" size="5" value="'.$companyname1['kurs-nr'].'" />';
	}
      ?></td>
                    <td><?php
	  require ('mysql.php');
$sqlselectpass= "SELECT * FROM tshelfer_dance4fans_Videoclipdancing_Kids WHERE `kurs-nr`!=''";				// SELECT
if(!$res_id = mysql_query($sqlselectpass)){
	die('Falscher SQL Befehl');
	}
	while($companyname1=mysql_fetch_array($res_id)){
	echo '<input name="dance4fansjugendlvideoclipdancingkids2" type="text" id="dance4fansjugendlvideoclipdancingkids2" size="15" value="'.$companyname1['tag'].'" />';
	}
      ?></td>
                    <td><?php
	  require ('mysql.php');
$sqlselectpass= "SELECT * FROM tshelfer_dance4fans_Videoclipdancing_Kids WHERE `kurs-nr`!=''";				// SELECT
if(!$res_id = mysql_query($sqlselectpass)){
	die('Falscher SQL Befehl');
	}
	while($companyname1=mysql_fetch_array($res_id)){
	echo '<input name="dance4fansjugendlvideoclipdancingkids3" type="text" id="dance4fansjugendlvideoclipdancingkids3" size="15" value="'.$companyname1['datum'].'" />';
	}
      ?></td>
                    <td><?php
	  require ('mysql.php');
$sqlselectpass= "SELECT * FROM tshelfer_dance4fans_Videoclipdancing_Kids WHERE `kurs-nr`!=''";				// SELECT
if(!$res_id = mysql_query($sqlselectpass)){
	die('Falscher SQL Befehl');
	}
	while($companyname1=mysql_fetch_array($res_id)){
	echo '<input name="dance4fansjugendlvideoclipdancingkids4" type="text" id="dance4fansjugendlvideoclipdancingkids4" size="15" value="'.$companyname1['zeit'].'" />';
	}
      ?></td>
                    <td><?php
	  require ('mysql.php');
$sqlselectpass= "SELECT * FROM tshelfer_dance4fans_Videoclipdancing_Kids WHERE `kurs-nr`!=''";				// SELECT
if(!$res_id = mysql_query($sqlselectpass)){
	die('Falscher SQL Befehl');
	}
	while($companyname1=mysql_fetch_array($res_id)){
	echo '<input name="dance4fansjugendlvideoclipdancingkids5" type="text" id="dance4fansjugendlvideoclipdancingkids5" size="15" value="'.$companyname1['dauer'].'" />';
	}
      ?></td>
                    <td><?php
	  require ('mysql.php');
$sqlselectpass= "SELECT * FROM tshelfer_dance4fans_Videoclipdancing_Kids WHERE `kurs-nr`!=''";				// SELECT
if(!$res_id = mysql_query($sqlselectpass)){
	die('Falscher SQL Befehl');
	}
	while($companyname1=mysql_fetch_array($res_id)){
	echo '<input name="dance4fansjugendlvideoclipdancingkids6" type="text" id="dance4fansjugendlvideoclipdancingkids6" size="15" value="'.$companyname1['preis'].'" />';
	}
      ?></td>
</table>

Der UPDATE CODE
PHP:
<?php 
require ('mysql.php');
mysql_query("
UPDATE `tshelfer_dance4fans_Videoclipdancing_Kids` SET
   `kurs-nr` = '".$_POST['dance4fansjugendlvideoclipdancingkids1']."',
   `tag` = '".$_POST['dance4fansjugendlvideoclipdancingkids2']."',
   `datum` = '".$_POST['dance4fansjugendlvideoclipdancingkids3']."',
   `zeit` = '".$_POST['dance4fansjugendlvideoclipdancingkids4']."',
   `dauer` = '".$_POST['dance4fansjugendlvideoclipdancingkids5']."',
   `preis` = '".$_POST['dance4fansjugendlvideoclipdancingkids6']."'
   
   ;");?>

Und zwar kann man nur die letzte ausgegebene Zeile verändern und wenn man dann n Update macht sehen danach alle Zeilen so aus. Wie kann man dies beheben?

(Bitte auch Beispiel Script, wenns nötig und möglich ist)

Danke für Antworten
 
Hi,

Du machst nur ein einziges UPDATE ohne WHERE-Klausel, sprich: für alle Datensätze mit den selben Werten. Und die Felder in Deinem Formular heissen auch für jeden Datensatz gleich. So wird jeweils der letzte übertragen.
Benenne erstmal die Felder eindeutig, idealerweise mit feldname[datensatzid]. Erstens bekommst Du dann in $_POST['feldname'] ein Array mit allen Werten, zweitens kannst Du über den Key auch noch den betreffenden Datensatz zuordnen ;) Dann machst Du eine Schleife über eines dieser Felder und machst für jeden Durchlauf ein UPDATE nur für den jeweiligen Datensatz.

Nachtrag: Du füllst Deine Tabelle sehr ungeschickt, nämlich für jedes Feld ein Query (immer der gleiche) und eine Schleife. Mach ein Query und eine Schleife und fülle pro Durchlauf alle Felder.

LG
 
Zuletzt bearbeitet:
Hi,

kleines Beispiel (ungetestet):

Tabelle ausgeben:
PHP:
<table>
   <tr>
      <td>Feld1</td>
      <td>Feld2</td>
   </tr>
<?php
   $sql = "select * from tabelle";
   $result = mysql_query($sql, $connectionID) or die(mysql_error() . "<br/>" . $sql);
   while($row = mysql_fetch_assoc($result)) {
      echo "<tr>\n";
      echo "<td><input type=\"text\" name=\"feld1[$row['id']]\" value=\"" . htmlspecialchars($row['feld1']) . "\"></td>\n";
      echo "<td><input type=\"text\" name=\"feld2[$row['id']]\" value=\"" . htmlspecialchars($row['feld2']) . "\"></td>\n";
      echo "</tr>\n";
   }      
?>
</table>

Formulardaten verarbeiten:
PHP:
<?php
   if(isset($_POST['feld1'])) {
      foreach($_POST['feld1'] as $key => $value) {
	 // für die Ausgabe erforderlichen htmlspecialchars wieder umwandeln,
	 // falls PHP < 5.1.0, html_entity_decode oder strtr verwenden
	 $feld1 = htmlspecialchars_decode($_POST['feld1'][$key]);
	 $feld2 = htmlspecialchars_decode($_POST['feld2'][$key]);
	 // mysql_real_escape_string gegebenenfalls durch <type>val-Funktion o.a. je nach Feldtyp ersetzen
	 $sql = "update tabelle set feld1 = '" . mysql_real_escape_string($feld1) . "', feld2 = '" . mysql_real_escape_string($feld2) . "' where id = " intval($key);
	 mysql_query($sql, $connectionID) or die(mysql_error() . "<br/>" . $sql);
      }
   }
?>

Nach Deinem Konzept würden allerdings immer alle Datensätze aktualisiert, ob nun etwas geändert wurde, oder nicht. Ich weiß ja nicht wofür das ist und wieviele Datensätze so in der Tabelle sind...

LG
 
Zurück