Gegevens in Form terug plaasten

Status
Niet open voor verdere reacties.

rpost

Gebruiker
Lid geworden
17 dec 2005
Berichten
19
Hallo, ik gebruik een form om data naar de database te schrijven.

In eerste instantie kan ik dat uitlezen op een pagina met een tabel die alle entry's netjes onder elkaar zet en achter elke entry een button [show] laat zien.
Mijn bedoeling is nu als ik op [show] druk hij de gegevens van dat record ophaalt uit de database en deze weer in de form zet. Er zijn dan een paar velden die aangepast kunnen worden en kan het record geupdate worden.

Nu had ik met hier en daar lezen en stukjes code zien zelf wat geknutseld en "het werkte". Totdat de database nog een record kreeg, die ook netjes in de tabel te zien was en een [show] knop had. Toen ik daar op drukte kreeg ik wel een netjes ingevuld formulier maar met de data uit het eerste record, je raad het al al maak ik nog 50 entry's aan elke keer krijg ik alleen de data te zien van het eerste record.

Ik zal hieronder de code neerzetten die ik gebruik, misschien kan iemand mij een idee geven?


Check.php: Dit haalt de data uit de database en geeft het weer in een tabel

PHP:
<title>Check</title>
<table width="1200" hight="115" border="4" cellpadding="2"
 
</table>
<?php
 
include ('config.php'); //Het verbindingsscript ophalen 
 
  $result = mysql_query("SELECT * FROM invoer");
  
  $data2 = mysql_fetch_array($result);

$result = mysql_query( "SELECT ticketnr,datum,begin,categorie,plaats,netwerk,kort,aansturing FROM invoer WHERE eind =''" )
or die("SELECT Error: ".mysql_error());

print "<table width=1200 border=4>\n";
while ($get_info = mysql_fetch_row($result)){ 
print "<tr>\n";
foreach ($get_info as $field) 
print "\t<td><font face=arial size=1/>$field</font></td>\n";
print "<td><form method='post' action='output.php'><input type='hidden' name='show' value='$data2[0]' /><INPUT TYPE='submit' height='2'  NAME ='test' VALUE='open'></form></td>";

print "</tr>\n";
}
print "</table>\n";

mysql_close($link);
?>
<p>&nbsp;</p>
<form action="invoer.php" method="post"> 
<input type="submit" value="Nieuw Log" > </form>


Update.php: Met dit script wil ik de aangepaste velden weer wegschrijven naar de database

PHP:
<?php
include ("config.php");

        $Ticketnr = mysql_real_escape_string($_POST['ticketnr']);
	$Datum = mysql_real_escape_string($_POST['datum']);
	$Begintijd= mysql_real_escape_string($_POST['begin']);
	$Categorie= mysql_real_escape_string($_POST['categorie']);
	$Plaats= mysql_real_escape_string($_POST['plaats']);
	$Netwerk= mysql_real_escape_string($_POST['netwerk']);
	$Kort= mysql_real_escape_string($_POST['kort']);
	$Log= mysql_real_escape_string($_POST['log']);
	$Aansturing= mysql_real_escape_string($_POST['aansturing']);
	$Eind= mysql_real_escape_string($_POST['eind']);
	
	
	

	mysql_query ("UPDATE invoer SET 
			'log' = '$Log', 
			'aansturing' = '$Aansturing',
			'eind'= '$Eind' WHERE 'ticketnr' = '$Ticketnr'


") or die (mysql_error());  
		echo 'De gegevens zijn aangepast';
		
?>		
<A HREF="invoer.php">Terug</A>
 
Niemand enig idee om mij verder te helpen?
Een hele andere insteek mag ook, als ik maar vanuit een lijst iets kan aanklikken en dit getoond word in een formulier.
 
Laatst bewerkt:
Jammer had er op gehoopt dat hier iemand wel eens zoiets in elkaar geknutseld had.
 
Als ik je eerst post zo lees, dan lijkt het er op dat je niet de juiste id verstuurt als je naar je show form gaat.
Of in je show form vertel je de query niet welke id hij moet pakken
Iets als WHERE id = $_POST['id']
 
Ik gebruik het volgende script om data2[0] in te lezen.



PHP:
<form method="post" action="update.php"  onsubmit="return confirm('Wil je de gegevens aanpassen ?');">
<?php
include ("config.php");
$show = $_POST['show'];
$query="SELECT * FROM invoer where ticketnr = '$show'";

  $data = "select * from invoer where ticketnr = '$show'";

  $query = mysql_query($data);
  
  $data2 = mysql_fetch_array($query);
  mysql_real_escape_string($show);

 $result = mysql_query("SELECT * FROM invoer");
  
 

?>

<p>&nbsp;</p>
          <p align="left">
				  
		  Ticketnummer :
          <input type="text" name="ticketnr" size="10" value="<?php echo $data2[ticketnr]?>" readonly />
                                 
          Datum:   
          <input type="text" name="datum" size="10" value="<?php echo $data2[datum]?>" readonly />
<br><br>
          
          Begintijd:
          <input type="text" name="begin" size="10" value="<?php echo $data2[begin]?>" readonly /> 
<br><br>
                               
          Categorie : 
          <input type="text" name="categorie" size="20" value="<?php echo $data2[categorie]?>" readonly />
								 
<br><br>
          Plaats/Regio :
          <input type="text" name="plaats" size="20" value="<?php echo $data2[plaats]?>" readonly />
          
          
          Netwerk: 
		  <input type="text" name="netwerk" size="20" value="<?php echo $data2[netwerk]?>" readonly />
		  
<br><br>

          Korte Omschrijving :
          <input type="text" name="kort" size="50" value="<?php echo $data2[kort]?>" readonly />
          </p>
          <p align="left">
       
          Log: </p>
          <p align="left">
          <textarea name="log" id="log" cols="100" rows="10"><?php echo $data2[log]?></textarea>
           </p>

          <p align="left">&nbsp;</p>
          <p align="left">
           
		   Aansturing:
          <input type="text" name="aansturing" size="25" value="<?php echo $data2[aansturing]?>">
		  
           Eindtijd:
           <input type="text" name="eind" size="10" value="<?php echo $data2[eind]?>">
           <br>
           <input type="submit" value="Update" />
           </p>
</form>


Probleem is echter dat in mijn check.php (hierboven te zien) de knop "open" eenmalig aanroep voor elk nieuw record. Daar gaat het volgens mij fout. Door de foreach die ik aanroep krijg ik die button bij elk record. Maar hij ziet de klik op de button dus als het allereerste record alleen. Ik heb ook al geprobeerd om in die foreach iets te zetten wat je net voorstelt, maar dat lukt niet.
 
$show = $_POST['show'];
$query="SELECT * FROM invoer where ticketnr = '$show'";

$data = "select * from invoer where ticketnr = '$show'";

$query = mysql_query($data);

$data2 = mysql_fetch_array($query);
mysql_real_escape_string($show);

$result = mysql_query("SELECT * FROM invoer");

$query en $data daar voer je 2x een zelfde query uit naar je database, overkill.
1x dan heb je al je info al
$show = mysql_real_escape_string($show); ander heeft dat geen nu. en ik zou het zo doen.
de $show = $_POST['show']; vervngen voor.
$show = mysql_real_escape_string($_POST['show']);

en gebruik een print_r en echo om te zien welke data je uit de database haald.
dus
echo "<pre>";
print_r($result);
 
de value='$data2[0]' geeft altijd de data van het eerste record. Dit gebruik je vervolgens bij alle andere records ook.

dit mag je sowieso niet combineren omdat het 2 verschillende query's zijn. met dus elk een ander resultaat.

Hoe ziet je tabel er uit?
 
De tabel is:


CREATE TABLE `invoer` (
`ticketnr` blob NOT NULL,
`datum` text,
`begin` text,
`categorie` text NOT NULL,
`plaats` text NOT NULL,
`netwerk` text NOT NULL,
`kort` text NOT NULL,
`log` longtext NOT NULL,
`aansturing` text NOT NULL,
`eind` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
 
Ik verwacht ook dat de fout zit in:

print "<td><form method='post' action='output.php'><input type='hidden' name='show' value='$data2[0]' /><INPUT TYPE='submit' height='2' NAME ='test' VALUE='open'></form></td>";

Ik doe in het script eigenlijk 2 dingen tegelijk, 1. ik laat alles zien en plaats er een button genaamd SHOW achter. 2. Als ik op SHOW druk wil ik van die regel de gegevens in het formulier terug plaatsen.

Met 15 records in de database zie ik dus 15 regels met 15 x een button SHOW. NU is de truuk om elke button toch iets unieks mee te geven zodat als ik er op druk hij de gegevens van die regel laat zien.

$data2[0] als value zou ik dus moeten vervangen. Wat ik wil is dat de button SHOW weet achter welke regel hij staat. Dit word getoond aan de hand van het ticketnr, dus zou elke SHOW button moeten weten welk ticketnr het record heeft waar hij achter staat.


Zie als voorbeeld: (de eerste kolom is het ticketnr welke dus uniek is en waar ik op zoek)
voorbeeld.jpg
 
Laatst bewerkt:
waaom doe je niet om te debuggen in plaats van type="hidden" ff type="text" dan kun je tenminste zien welke value je mee geeft!
 
Ok, ik ben er uit.

Script is nu geworden:

PHP:
<?php 
  
include ('config.php'); //Het verbindingsscript ophalen  
  
[B]$result2 = mysql_query("SELECT ticketnr FROM invoer WHERE eind =''"); [/B]
$result = mysql_query( "SELECT ticketnr,datum,begin,categorie,plaats,netwerk,kort,aansturing FROM invoer WHERE eind =''" ) 
or die("SELECT Error: ".mysql_error()); 
 
print "<table width=1200 border=4>\n"; 
while ($get_info = mysql_fetch_row($result)){  
[B]$data2 = mysql_fetch_array($result2);[/B]
print "<tr>\n"; 
foreach ($get_info as $field)  
print "\t<td><font face=arial size=1/>$field</font></td>\n"; 
print "<td><form method='post' action='output.php'><input type='text' name='show' value='$data2[0]' /><INPUT TYPE='submit' height='2'  NAME ='test' VALUE='open'></form></td>"; 
 
print "</tr>\n"; 
} 
print "</table>\n"; 
 
mysql_close($link); 
?> 
<p>&nbsp;</p> 
<form action="invoer.php" method="post">  
<input type="submit" value="Nieuw Log" > </form>


Allereerst was de positie van $data2 van belang (binnen de while statement dus).
Omdat ik ook niet alles toonde kreeg ik hier door wel verschoven nummers. Dit is opgelost door ook $result2 aan te geven dat hij niet alles laat zien.


Bedankt voor alle tips!
 
heb ff gekeken.
Maar je moet in je loop een teller mee laten lopen
buiten de foreach maak je $x = 0; aan.
die $data2[0] maak je $data[$x]
en aan het einde nod binnen de } doe je $x++

Je moet namelijk wel door je array wandelen om de index te veranderen.
 
inderdaad het ligt bij die index

Maar waarom gebruik je dat ding?

PHP:
$result2 = mysql_query("SELECT ticketnr FROM invoer WHERE eind =''");
$result = mysql_query( "SELECT ticketnr,datum,begin,categorie,plaats,netwerk,kort,aansturing FROM invoer WHERE eind =''" )

result2 zit ook in de andere want daar selecteer je ook het ticket nummer.
Als je nou een andere code gebruikt om je in de tabel te zetten dan kan je alle gegevens gebruiken uit je query wanneer je wil:


PHP:
while($row = mysql_fetch_array($result))
  {
<?

print "<tr>
<td>$row['ticketnr']</td>
<td>$row['datum']</td>
<td>$row['begin']</td>
<td>$row['categorie']</td>
<td><form method='post' action='output.php'><input type='text' name='show' value='$row['ticketnr']' /><INPUT TYPE='submit' height='2'  NAME ='test' VALUE='open'></form>
</tr>";
 ?>
  }

Het kost even iets meer tijd om die paar cellen te maken. Maar hierdoor hoef je maar 1 query uit te voeren.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan