Daten aus einer DB an ein Formular übergeben 1.

Alles, was PHP betrifft, kann hier besprochen werden.

Daten aus einer DB an ein Formular übergeben 1.

Postby hilfe » 31. August 2004 18:34

Erstmal dank an lain für die tips. Leider geht die Sache immer noch nicht. Zwar scheint der Link nun zu funktionieren. In der Adressleiste vom Browser ist nun folgendes zu sehen :

http://localhost/sbo/php_pages/aform.php?Array[id]

aber die Übernahme der Datensätze ins Formular klappt nicht.
Auszug aus dem Script:
Code: Select all
<form action="confmail.php" method="post">
Anmeldung zum Seminar:<textarea cols=46 rows=5 name=seminar value=""><?php echo $ergebnis[$i][id]; ?></textarea>
</form>

Textarea bleibt schlicht leer. Andere Schreibweisen zeigen die Ausgabe von "Array" in textarea oder es wird einfach nur [id] angezeigt. Nur meinen Datensatz kriege ich nicht zu sehen. Zefix, ist das wirklich so kompliziert? Muß nochmal um Hilfe bitten. Den auch in meinen schlauen Büchern habe ich nichts geeignetes gefunden. Sorry bin halt Anfänger.
Vielen Dank sagt Frank
Last edited by hilfe on 01. September 2004 21:21, edited 1 time in total.
hilfe
 
Posts: 27
Joined: 16. July 2004 19:44

Postby Wiedmann » 31. August 2004 19:02

Erstmal dank an lain für die tips. Leider geht die Sache immer noch nicht.

Was für Tips? Dies war der erste Post in diesem Thread...

http://localhost/sbo/php_pages/aform.php?Array[id]

Was bedeutet dieser Link? soll der das Script aufrufen aus dem der nachfolgende Auszug kommt?

In der Adresszeile sollte auch folgendes zu lesen sein:
http://localhost/sbo/php_pages/aform.php?Array%5Bid%5D
(einen Wert bekommt diese Variable nicht zugewiesen?)

<?php echo $ergebnis[$i][id]; ?>

Woher kommt die Variable $ergebnis.. Wahrscheinlich hat sie nicht den von dir erwarteten Inhalt. var_dump() ist hier dein Freund. Ist "id" eine Konstante?

Ansonsten (HTML):
textarea kennt kein Attribut "value". Attributwerte werden in Doublequotes (") eingeschlossen.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby hilfe » 31. August 2004 20:41

Hallo wiedmann,

Dank für Tips an lain bezog sich auf :
Daten aus einer DB an ein Formular übergeben
Anfrage vom 30.08.04 im Forum
weitere Fragen werde ich dann wohl hier stellen.

Das war die von mir gestellte Frage.

Auf der Seite wird jeder Datensatz in einer Tabelle angezeigt. Zu jedem Datensatz gibt es einen Link "zur Anmeldung". Dieser Link soll ein Formular aufrufen mit dem sich der Benutzer zu einem Seminar anmelden kann. Um die Eingabezeit für den Benutzer zu verkürzen sollen die Datenfelder "kurs","datum" und "preis bei Aufruf des Formulars in der Anmeldeseite schon passend zum angeklickten Link "zur Anmeldung" angezeigt werden. Der Benutzer muß nur noch Name,Adresse etc. angeben.Auszug aus dem Script:
Code: Select all
//Ausgeben der Einträge
for($i=0;$i<count($ergebnis);$i++)
{
echo "<table class=klein border=0 width=400 align=center>
<tr><td width=250><strong>".$ergebnis[$i][datum]."</strong></td>
<td width=150 ><strong>".$ergebnis[$i][kurs]."</strong></td></tr>";
echo "<tr><td>".$ergebnis[$i][beschreibung]."</td></tr>";
echo "<tr><td>Referent:<td>".$ergebnis[$i][referent]."</td></tr>";
echo "<tr><td><strong>".$ergebnis[$i][preis].",-&nbsp;€</strong></td></tr>";
echo "<tr><td>mind.&nbsp;".$ergebnis[$i][minteiln]."&nbsp;Teilnehmer</td><td>
<a href=aform.php>zur Anmeldung<a></td></tr></table>";
echo"<br>";
}

habe schon alles mögliche probiert. Woher "weiß" der Link bzw. das Formular welcher Datensatz angezeigt werden soll? Variable zB.$ergebnis usw. einfach an den Link dranhängen geht nicht.

lain`s Antwort hat mir nur bedingt weitergeholfen. Meine Frage bleibt also weiterhin bestehen. Hier die Antwort auf Deine Frage woher die $ergebnis kommt. [id] sollte ein Datenbankfeld sein?:
Code: Select all
<?php

$anzeigen=3;

if($vor){$start=$limit+$anzeigen;}
if($back){$start=$limit-$anzeigen;}
if(!$start){$start=0;}

//Auslesen der Datenbankeinträge
require('connect.php');
$sql="SELECT id, datum, kurs, beschreibung, referent, preis, minteiln FROM $tabellenname WHERE id ORDER BY id ASC LIMIT $start , $anzeigen";
$result = mysql_query($sql, $link);
for($i=0;$i<mysql_num_rows($result);$i++)
{
$ergebnis[$i]=mysql_fetch_array($result);
}

$sql1="SELECT id FROM $tabellenname WHERE id";
$result1=mysql_query($sql1, $link);
$max=mysql_num_rows($result1);

?>

<html>
<head>
   <title>Veranstaltungstermine</title>
   <link rel="STYLESHEET" href="http://localhost/sbo/css/blau.css" type="text/css">
</head>

<body class=body>
<table align="center">
<tr><td>
<img src="../pics/header1.gif" width="800" height="100" border="0">
</td></tr>
</table>
<br>

<?php

//Ausgeben der Einträge
for($i=0;$i<count($ergebnis);$i++)
{
echo "<table class=klein border=0 width=400 align=center>
<tr><td width=250><strong>".$ergebnis[$i][datum]."</strong></td>
<td width=150 ><strong>".$ergebnis[$i][kurs]."</strong></td></tr>";
echo "<tr><td>".$ergebnis[$i][beschreibung]."</td></tr>";
echo "<tr><td>Referent:<td>".$ergebnis[$i][referent]."</td></tr>";
echo "<tr><td><strong>".$ergebnis[$i][preis].",-&nbsp;€</strong></td></tr>";
echo "<tr><td>mind.&nbsp;".$ergebnis[$i][minteiln]."&nbsp;Teilnehmer</td><td>
<a href=aform.php?".$ergebnis[$i][id].">zur Anmeldung</a></td></tr></table>";
echo"<br>";
}
echo "<table class=klein border=0 width=400 align=center>
<tr><td align=left>";
if($start>=$anzeigen){echo "<a href='".$PHP_SELF."?limit=".$start."&back=1'>Zurück</a>";}
echo "</td><td align=right>";
if($start+$anzeigen<$max){echo "<a href='".$PHP_SELF."?limit=".$start."&vor=1'>Weiter</a>";}
echo "</td></tr></table>";
?>

Der Link "zur Anmeldung" ist schon so abgeändert wie ich lain`s Hinweis verstanden habe.
Gruß Frank
Last edited by hilfe on 01. September 2004 21:19, edited 1 time in total.
hilfe
 
Posts: 27
Joined: 16. July 2004 19:44

Postby DJ DHG » 01. September 2004 00:49

Moin Moin

bitte benutzt doch das code-tag.

Code: Select all
<HTML> e.t.c


kann man dann auch gleich besser lesen.

mfg DJ DHG
User avatar
DJ DHG
AF Moderator
 
Posts: 2455
Joined: 27. December 2002 13:50
Location: Kiel

Postby Wiedmann » 01. September 2004 14:43

Hallo Frank,

ich hab dein ursprüngliches Script mal neu formatiert (hoffe es tut so noch):

termine.php
Code: Select all
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Veranstaltungstermine</title>
<link rel="stylesheet" type="text/css" href="/sbo/css/blau.css" />
</head>

<body class="body">

<?php
$anzeigen = 3;

if ((!empty($_GET['vor'])) && (!empty($_GET['limit']))) {
   $start = $_GET['limit'] + $anzeigen;
}
if ((!empty($_GET['back'])) && (!empty($_GET['limit']))) {
   $start = $_GET['limit'] - $anzeigen;
}

if ((!isset($start)) || (0 > $start)) {
   $start = 0;
}

//Auslesen der Datenbankeinträge
require('connect.php');

$sql = "
SELECT SQL_CALC_FOUND_ROWS `id`, `datum`, `kurs`, `beschreibung`, `referent`, `preis`, `minteiln`
FROM `$tabellenname`
ORDER BY `id` ASC
LIMIT $start, $anzeigen
";

if (!$result = mysql_query($sql, $link)) {
   echo '
   <p>Fehler in der Abfrage: '.mysql_error().'</p>
   <p><a href="termine.php">zurück zur Liste</a></p>
   </body>
   </html>';
   exit;
}

for ($i = 0; mysql_num_rows($result) > $i; $i++) {
   $ergebnis[$i] = mysql_fetch_assoc($result);
}

$max = mysql_query("SELECT FOUND_ROWS()", $link);

mysql_close($link);
?>

<table align="center">
<tr>
<td><img src="../pics/header1.gif" width="800" height="100" border="0"></td>
</tr>
</table>
<br />

<?php
//Ausgeben der Einträge
for ($i = 0; count($ergebnis) > $i; $i++) {
   echo '
   <table class="klein" border="0" width="400" align="center">
   <tr>
   <td width="250"><strong>'.$ergebnis[$i]['datum'].'</strong></td>
   <td width="150"><strong>'.$ergebnis[$i]['kurs'].'</strong></td>
   </tr>
   <tr>
   <td colspan="2">'.$ergebnis[$i]['beschreibung'].'</td>
   </tr>
   <tr>
   <td>Referent:</td>
   <td>'.$ergebnis[$i]['referent'].'</td>
   </tr>
   <tr>
   <td colspan="2"><strong>'.$ergebnis[$i]['preis'].',- €</strong></td>
   </tr>
   <tr>
   <td>mind. '.$ergebnis[$i]['minteiln'].' Teilnehmer</td>
   <td><a href="aform.php?id='.$ergebnis[$i]['id'].'">zur Anmeldung</a></td>
   </tr>
   </table>
   <br/>'."\n";
}

echo '<table class="klein" border="0" width="400" align="center"><tr><td align="left">';

if ($start >= $anzeigen) {
   echo '<a href="termine.php?limit='.$start.'&amp;back=1">Zurück</a>';
}
echo '</td><td align="right">';

if (($start + $anzeigen) < $max) {
   echo '<a href="termine.php?limit='.$start.'&amp;vor=1">Weiter</a>';
}
echo '</td></tr></table>'."\n";
?>

</body>
</html>


Mir ist garnicht klar, wie dein PHP eingestellt ist. An einigen Stellen müssten doch immer mal wieder Fehler angezeigt werden.

1) Verlasse dich nicht auf "register_globals":
Benutze also bei der Parameterübergabe die superglobalen Arrays. Überprüfe vor der ersten Benutzung einer Variable in einem Vergleich auch ob sie schon existiert. Initialisiere deine Variablen wenn nötig.

3) Überprüfe dein HTML:
- Attributwerte werden in Hochkommas eingeschlossen.
- Tabellen sauber aufbauen

4) ich denke mir jetzt mal, dass die Variable "$tabellenname" in connect.php festgelegt wird

5) Beim aufrufen der Datei "aform.php" übergeben wir jetzt die ID vom ausgewähltem Datensatz als Parameter

aform.php
Code: Select all
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Anmeldung</title>
<link rel="stylesheet" type="text/css" href="/sbo/css/blau.css" />
</head>

<body class="body">

<?php

if (!empty($_GET['id'])) {
   $id = $_GET['id'];
} else {
   echo '
   <p>Kein Kurs ausgewählt!</p>
   <p><a href="termine.php">zurück zur Liste</a></p>
   </body>
   </html>';
   exit;
}

//Auslesen der Datenbankeinträge
require('connect.php');

$sql = "
SELECT `datum`, `kurs`, `preis`
FROM `$tabellenname`
WHERE `id` = $id
LIMIT 1
";

if (!$result = mysql_query($sql, $link)) {
   echo '
   <p>Fehler in der Abfrage: '.mysql_error().'</p>
   <p><a href="termine.php">zurück zur Liste</a></p>
   </body>
   </html>';
   exit;
}

$ergebnis = mysql_fetch_assoc($result);

mysql_close($link);
?>

<table align="center">
<tr>
<td><img src="../pics/header1.gif" width="800" height="100" border="0"></td>
</tr>
</table>
<br />

<?php
//Ausgeben der Einträge
echo '
<form action="formmail.php" method="post">
<p>
Kurs: <input type="text" name="kurs" readonly="readonly" value="'.$ergebnis['kurs'].'" /><br />
Datum: <input type="text" name="datum" readonly="readonly" value="'.$ergebnis['datum'].'" /><br />
Preis [EUR]: <input type="text" name="preis" readonly="readonly" value="'.$ergebnis['preis'].'" /><br />
Name: <input type="text" name="name" /><br />
EMail: <input type="text" name="email" /><br />
<input type="submit" name="submit" value="Abschicken" />
<input type="reset" value="Zurücksetzen" />
</p>
</form>
<p><a href="termine.php">zurück zur Liste</a></p>'."\n"
?>

</body>
</html>

Funktion ohne Gewähr...

1) Anhand der übergeben ID lesen wird diesen Datensatz aus der Datenbank aus und tragen die gewünschten Felder an gewünschter Stelle ins Formular ein.

2) Beim Abschicken des Formulars, werden dann die Daten an einen Formmailer übergeben. Du kannst die Daten natürlich auch selbst in dem Script verschicken oder du machst halt was anderes damit.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Daten aus einer DB an ein Formular übergeben 1.

Postby hilfe » 01. September 2004 21:10

Hallo Wiedmann,

vielen Dank für Deine Mühe. Das von Dir geschriebene Script funktioniert so wie ich mir das vorgestellt hatte. Die Daten erscheinen im Formular.
Nur der Link "Weiter" der die nächsten drei Datensätze anzeigen sollte will nicht funktionieren. In der Statusleiste wird beim anklicken der Pfad zur Datei angezeigt mit ..../termine.php?limit=0&vor=1. Aber die folgenden Datensätze werden nicht angezeigt es passiert augenscheinlich gar nichts. In meinem zugegeben etwas chaotischem Script funktioniert diese Anzeige, dafür aber die Übertragung ins Formular nicht. Mein Versuch die beiden Scripte irgendwie zu verquicken mißlang. Mußte wahrscheinlich mißlingen da mein geballtes Halbwissen über HTML,PHP und SQL aus Taschenbüchern und Zeitschriften stammt.

Mein PHP ist gar nicht eingestellt. Habe einfach nur das XAMPP-Teil runtergeladen und installiert. Sollte ich da etwas einstellen??
(Anmerkung: das gesamte OS WINXP scheint teilweise aus Fehlermeldungen zu bestehen)

Richtig die $tabellenname stammt aus der connect.php. Die Verbindung zur Datenbank auf diese Weise klappt auch.

Variablen zwischen Dateien übergeben (GET) habe ich auch in einem der besagten Taschenbücher gefunden. Aber ehrlich gesagt noch nicht so ganz geblickt wie das nun geht.

Weiß mir nun aber gar keinen Rat mehr wie ich den Link "Weiter" zum funktionieren bewegen kann.

Muß mir jetzt Dein Script nochmal zu Gemüte führen. Es sieht doch ganz anders aus als mein erster Versuch eine Site mit PHP und DB zu schreiben.

Vielen Dank sagt Frank
hilfe
 
Posts: 27
Joined: 16. July 2004 19:44

Postby Wiedmann » 02. September 2004 01:48

Nur der Link "Weiter" der die nächsten drei Datensätze anzeigen sollte will nicht funktionieren.

Hmm, stimmt. Da hat sich ein Bug eingeschlichen...

Ändere mal die Zeile:
Code: Select all
$max = mysql_query("SELECT FOUND_ROWS()", $link);
in:
$max = mysql_result(mysql_query("SELECT FOUND_ROWS()", $link), 0);


und am Anfang die if-Abfragen änderst du in:
Code: Select all
if (isset($_GET['vor']) && isset($_GET['limit'])) {
   $start = $_GET['limit'] + $anzeigen;
}
if (isset($_GET['back']) && isset($_GET['limit'])) {
   $start = $_GET['limit'] - $anzeigen;
}

if (!isset($start) || (0 > $start)) {
   $start = 0;
}


Mein PHP ist gar nicht eingestellt. Habe einfach nur das XAMPP-Teil runtergeladen und installiert. Sollte ich da etwas einstellen??

Müssen nicht. Ist eher eine persönliche Haltung. Gerade wenn du den XAMPP zum Entwickeln benutzt.

Folgende Werte kannst du ja mal dementsprechend in der "php.ini" anpassen (heruntergeladene Scripte könnten dann aber Probleme haben. Insbesondere mit dem Ersten und Letzten):
short_open_tag = Off
asp_tags = Off
output_buffering = Off
error_reporting = E_ALL
html_errors = On
docref_root = "http://de.php.net/manual/de/"
docref_ext = .php
arg_separator.output = "&amp;"
register_globals = Off
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Daten aus einer DB an ein Formular übergeben 1.

Postby hilfe » 03. September 2004 12:57

Tausend Dank Wiedmann,

mit den von Dir vogeschlagenen Änderungen im Script funktioniert die Seite jetzt. Um an meinem PHP herumzuexperimentiern fehlt mir momentan die Zeit da ich mich wieder um meinen "Brotjob" kümmern muß. Der hat, wie Du vielleicht ahnst, nichts mit programmieren zu tun.
Da ich aber diese PHP-Seite unbedingt machen will werde ich sicher bald wieder hier im Forum auftauchen.
Daten per Formular in eine DB einzutragen hat gleich geklappt.
Hier mein sicher verbesserungswürdiges Script dazu:
Code: Select all
<html>
<head>
   <title>Eingabe Seminar Termine</title>
   <link rel="STYLESHEET" href="http://localhost/sbo/css/blau.css" type="text/css">
</head>

<body>


<?php

//$flag==1,wenn das Formular abgeschickt wurde
if($flag==1)
{
//Leerstellen entfernen
$datum=trim($datum);
$kurs=trim($kurs);
$referent=trim($referent);
$preis=trim($preis);
$minteiln=trim($minteiln);

//evt. vorhandenen HTML-Code entfernen
$datum=strip_tags($datum);
$kurs=strip_tags($kurs);
$referent=strip_tags($referent);
$preis=strip_tags($preis);
$minteiln=strip_tags($minteiln);

//testen,ob Felder ausgefüllt sind (keine Eingabe im Feld wird als Fehler gewertet)
if(!$datum){$fehler="Keine gültige Eingabe im Feld DATUM. <br>";}
if(!$kurs){$fehler.="Keine gültige Eingabe im Feld SEMINAR-BEZEICHNUNG. <br>";}
if(!$referent){$fehler.="Keine gültige Eingabe im Feld NAME DES REFERENTEN. <br>";}
if(!$preis){$fehler.="Keine gültige Eingabe im Feld PREIS. <br>";}


//Wenn Fehler vorhanden, die Textausgabe formatieren und $flag zurücksetzen,damit das Formular erneut angezeigt wird
if($fehler)
{
$meldung="<br><table class=mittel border=0 width=400 align=center cellpadding=5 cellspacing=5><tr><td>".$fehler."</tr></td></table>";
unset($flag);
}
else//Es liegt kein Fehler vor, also speichern der Information in der Datenbank
{

//Verbinden zur Datenbank
//SQL-String zusammensetzen
require('connect.php');
$sql="INSERT INTO $tabellenname (datum, kurs, beschreibung, referent, preis, minteiln)
values('$datum', '$kurs', '$beschreibung', '$referent', '$preis','$minteiln')";
mysql_query($sql, $link);
$meldung="<table class=mittel border=0 width=400 align=center cellpadding=5 cellspacing=5><tr><td>Ihre Angaben wurden in die Datenbank aufgenommen.</td></tr><tr><td><a href='www.wohin auch immer/seite.php' class=mittel>weiter</a></td></tr></table>";
}

//Ausgeben der Meldung
echo $meldung;
}//Ende $flag==1
if(!$flag)
{
?>

<br>
<table class=klein border=0 width=400 align=center cellpadding=5 cellspacing=5>
<tr>
    <td>Eingabe:</td><td> Seminar-Termine</td>
</tr>
</table>

<br>
<form action='<?php echo $_SERVER['PHP_SELF'];?>' method=post>
<input type=hidden name=flag value=1>
<table class=klein border=0 width=400 align=center cellpadding=5 cellspacing=5>
<tr><td width=50>Datum</td></tr><tr>
 <td width=350><input type=text size="14" maxlength="14"  name=datum value='<?php echo $datum; ?>'></td>
</tr>
<tr><td>Seminar-Bezeichnung</td></tr><tr>
 <td ><input type=text size="61" maxlength="160"  name=kurs value='<?php echo $kurs; ?>'></td>
</tr>
<tr><td>Kurzbeschreibung</td></tr><tr>
 <td><textarea class=punkt10b cols=46 rows=5  name=beschreibung value='<?php echo $beschreibung;?>'></textarea></td>
</tr>
<tr><td>Name des Referenten</td></tr><tr>
 <td><input type=text size="61" maxlength="200"  name=referent value='<?php echo $referent; ?>'></td>
</tr>
<tr><td>Preis</td></tr><tr>
 <td><input type=text size="5" maxlength="5"  name=preis value='<?php echo $preis; ?>'></td>
</tr>
<tr><td>mind. Teilnehmer</td></tr><tr>
 <td><input type=text size="4" maxlength="200"  name=minteiln value='<?php echo $minteiln; ?>'></td></tr><tr>
 <td><br><input style="BORDER-TOP-WIDTH: 1px; BORDER-LEFT-WIDTH: 1px; BACKGROUND: #eeeeee; BORDER-BOTTOM-WIDTH: 1px; FONT: bold 10px Verdana, Geneva, Arial, Helvetica, sans-serif; COLOR: #000000; BORDER-RIGHT-WIDTH: 1px ;" type="submit" name="Submit" value="Abschicken"></td>
</tr>
 </table>
 </form>
 <?php
 }
 ?>
 
</body>
</html>

Die Daten wieder aus der DB zu bekommen und weiter zu verarbeiten war deutlich schwieriger.
Nochmals Dank sagt Frank
hilfe
 
Posts: 27
Joined: 16. July 2004 19:44


Return to PHP

Who is online

Users browsing this forum: No registered users and 8 guests