• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

php + html-Formular input type submit + mysql

A

Anonymous

Gast
Hallo,
ich habe da folgendes Problem(chen).
In einem HTML- Formular wird ein Wert eingegeben und mit diesem über php/mysql in der Datenbank ein Datensatz gesucht und auch gefunden.
Für die Suche wird auf einen Button gedrückt input type submit. dadurch werden die Eingabefelder geleert. Es gelingt mir nicht, diesen dort eingetragenen Wert für weitere Datenbankoperationen zu merken.
Code:
<html>
<head>
<title>Test 4x</title>
</head>
<body>
<h1>Test 4x</h1>
<form  method ="POST" >
<p> Buchnummer: <input type="text" name="Buchnummer" size="12" > </p>
   <p>
    <input type="submit" name="Suche" value="Suche" >
    <input type="submit" name="Eintragen" value="Ausleihen" >
    <input type="submit" name="Abgabe" value="Buchabgabe" >
  </p>
</form>

<table border ="1">
<tr>
	<th>Titel</th>
	<th>Autor</th>
	<th>Verlag</th>
	<th>Buch-ID</th>
</tr>
<?php
$su = $_POST['Suche'];
$ein = $_POST['Eintragen'];
$ab =  $_POST['Abgabe'];
$x = $_POST['Buchnummer'];

if ($su == 'Suche')
{
	mysql_connect("localhost","root","");
	mysql_select_db("Bibliothelk");

	$query = "SELECT * FROM Buch where B_ID = '$x'";
	$result = mysql_query($query);

	while ($row = mysql_fetch_array ($result))
	{
	echo "<tr>";
	echo "<td>".$row['Titel']."</td>";
	echo "<td>".$row['Autor']."</td>";
	echo "<td>".$row['Verlag']."</td>";
	echo "<td>".$row['B_ID']."</td>";
	echo "<tr>";
	}
}
	
if ($ein == 'Ausleihen')
	{
	// Hier soll ein Datensatz in die Ausleihtabelle eingetragen werden.
	// Dazu wird die B_ID benötigt	
       // Insert into ausleihe .....
	}
if ($ab == 'Buchabgabe')
	{
	// Hier soll der enstprechende Datensatz in der Ausleihtabelle geändert werden.
	// Dazu wird die B_ID benötigt
       // update ausleihe set ... where  B_ID = .....
	}
?>
</body>
</html>

Wie greife ich auf die B_ID in den beiden if-Abfragen zu?

cu
 

Dr. Glastonbury

Advanced Hacker
Hi,
ich hoffe ich versteh dich recht:

Du willst die Suchergebnisse verwenden, wenn jemand auf Ausleihen oder auf Abgeben drückt.
Dazu würde ich das Formular ein wenig abändern. Weil das ganze meiner Meinung nach etwas schwer zu erklären ist, werd ich dir mal ein Beispiel schreiben:
Code:
<html>
<head>
<title>Test 4x</title>
</head>
<body>
<h1>Test 4x</h1>
<?php
   mysql_connect("localhost","root","");
   mysql_select_db("Bibliothelk");

  $submit = $_POST['submit'];
  $buch_nr = $_POST['buchnummer'];

if( $submit == "Suche" )
{
?><form action="index.php" method="post" >
<table>
<tr>
   <th>Titel</th>
   <th>Autor</th>
   <th>Verlag</th>
   <th>Buch-ID</th>
   <th></th>
   <th></th>
</tr>
<?php
   $query = mysql_query( "SELECT Titel, Autor, Verlag, B_ID FROM Buch WHERE B_ID = '$buch_nr'" );

   while( $row = mysql_fetch_array( $query ) )
   {
   echo '  <tr>
  <td>'.$row['Titel'].'</td>
  <td>'.$row['Autor'].'</td>
  <td>'.$row['Verlag'].'</td>
  <td>'.$row['B_ID'].'<input type="hidden" name="buch_id" value="'.$row['B_ID'].'" /></td>
  <td><input type="submit" name="submit" value="Ausleihen" /></td>
  <td><input type="submit" name="submit" value="Buchabgabe" /></td>
  <tr>
';
   }
?></table>
</form>
<?php
}
else if( $submit == 'Buchabgabe')
{
   $buch_id = $_POST['buch_id'];
   // Hier soll der enstprechende Datensatz in der Ausleihtabelle geändert werden.
   // Dazu wird die B_ID benötigt
       // update ausleihe set ... where  B_ID = .....
}
else if( $submit == "Ausleihen" )
{
   $buch_id = $_POST['buch_id'];
   // Hier soll ein Datensatz in die Ausleihtabelle eingetragen werden.
   // Dazu wird die B_ID benötigt   
       // Insert into ausleihe .....
}
else
{
?>
<form action="index.php" method ="POST" >
<p> Buchnummer: <input type="text" name="buchnummer" size="12" > </p>
   <p>
    <input type="submit" name="submit" value="Suche" >
  </p>
</form>
<?php
}
?>
</body>
</html>

Soo - und jetzt zur Erläuterung:
Ich gebe solange die Variable $submit nicht gesetzt ist dein Standard-Suchformular aus. In dem Moment, wo du auf "Suche" klixt, kommt er in die erste if-Abfrage, wo er dann das passende Buch sucht (hier müsstest du natürlich noch eine Klasel machen, wenn er kein Buch findet, dass dann nochmal ein Eingabeformular kommt).
Dann wird jedenfalls das Buch angezeigt mit zwei Buttons hinten: Ausleihen und Abgabe. Wenn man ausleihen angibt, kommt man durch die if-Abfrage an den Teil, wo du das Ausleihen programmieren willst, andernfalls zur Abgabe. Die ID vom Buch übergebe ich in der Tabelle mit dem "hidden"-Input. Dieses Feld wird einfach nicht angezeigt, übergibt seinen Wert aber schön brav an dein Script.

Soo, ich hoffe ich konnte dir weiterhelfen ;)

Achja - da fällt mir noch ein: Ein SELECT * macht man nicht - das ist 1. nicht schön und zweitens weißt du, wenn du das Script in n paar Jahren nochmal ansiehst nicht mehr, was du da eigentlich machst. Drum nur die Felder SELECTen, die du auch wirklich brauchst/haben willst...
 
OP
A

Anonymous

Gast
Danke für die schnelle Antwort.
Leider löst sie mein Problem nicht.

Ich habe dein Listing einmal probiert. Die von dir eingeführten elseif-Fälle werden niemals aufgerufen.

Ich möchte meine Idee noch einmal erläutern:

In dem Formular wird die Buchnummer (und später noch weitere Werte, denn dies ist zunächst ein Programmfragment) eingegeben.
Wenn auf den Button "Suchen" gedrückt wird, wird nachgesehen, ob so ein Buch überhaupt im Bestand vorhanden ist. Wenn ja, werden zusätzliche Daten tabellarisch angezeigt.
Wird auf den Button "Ausleihe" geklickt, so soll ein Eintrag in die Table ausleihe gemacht werden. Die Werte in den Eingabefeldern und in der ausgegebenen Tabelle sollen erhalten bleiben!!! Der Benutzer soll sie weiterhin sehen können (Das Zurücksetzen kann später noch über einen Button "Reset" erfolgen).

Woran es eigentlich nur hakt ist, dass die eingegebenen Werte in den if-Abfragen "if ($ein == 'Ausleihen')" nicht mehr verfügbar sind. In C würde ich globale Variablen definieren bzw mit Speicherklassen arbeiten.

Ich hoffe, ich konnte mich deutlicher ausdrücken.

Gruß
 

Dr. Glastonbury

Advanced Hacker
Hmmm - wundert mich jetzt^^ - denn den value-Wert, den die Buttons besitzen geben sie beim Aufruf der PHP direkt in die Variable $submit - somit müssten die if- und else if-Klauseln schon greifen.
edit: hab mir grad das Script nochmal angeschaut: vor dem ersten else if hat ein <?php gefehlt. Somit hat er die { nicht interpretiert ;) - kein Wunder, dass es nicht ging...

Aber zu deinem Problem: Du musst dich bei PHP von dem Gedanken frei machen, dass dieses Script in einer Tour, wie ein C-Programm durch läuft. Ein PHP-Script wird so lange ausgeführt, bis der User am anderen Ende alle Daten hat, die das Script ausgeben soll.
Im Klartext heißt das bei meinem Beispiel, dass das Script beim ersten Aufruf das Suchformular ausspuckt und das wars. Alle Variablen, die ich in dem Script setze sind danach wieder weg. Das Script läuft einmal für den User, der davor sitzt und Punkt. Denn stell dir mal vor 10 Leute führen das Script gleichzeitig aus und er würde immer die Variablen übernehmen.

Was du also machen müsstest, wäre immer die BuchID über ein Verstecktes Formular (oder besser Feld) mit zugeben und dann jedes Mal wieder die Tabelle auszulesen.

Und dann kannst du es entweder so, wie ich angehen; die verschiedenen Teile (also Ausleihen/Abgeben) in ein Script per if und else einzugeben, oder du schreibst für jede Option eine eigene PHP, auf die dann das Formular mit action="ausleihen.php" verweist.

In jedem Fall musst du dann aber ein

<input type="hidden" name="buch_id" value="<?php echo $buch_id ?>" />

machen. Dann kannst du mit dieser ID weiterarbeiten ;)
 
OP
A

Anonymous

Gast
Hi,
das fehlende <?php hatte ich auch mittlerweile gefunden und damit hatte es auch funktioniert. Danke soweit.

Nun hänge ich im Moment beim INSERT.
B_ID und A_ID sind vom Typ Integer, Ausleihdatum vom Typ date.
Variante 1 funktioniert:
Code:
mysql_query ("INSERT into Ausleihe (B_ID, A_ID, Ausleihdatum) values ('1007', '102', '2006-08-22');");
Variante 2 funktioniert nicht:
Code:
$buch_id = $_POST['buch_id'];
$ausleih_id='100';
$datum='2006-08-22';
mysql_query ("INSERT into Ausleihe ( B_ID, A_ID, Ausleihdatum) values ('$buch_id', '$ausleih_id', '$datum');");
Ich vermute, dass es irgendwie an den Anführundgszeichen liegt. Ich habe bereits reichlich Kombinationen zwischen einfachen und doppelten Anführungszeichen ausprobiert, aber ohne Erfolg.

Noch einen Tipp für mich??

Gruß
 
OP
A

Anonymous

Gast
Hallo,
ich habe doch noch eine Lösung gefunden:

Code:
$q="INSERT into Ausleihe (B_ID, A_ID, Ausleihdatum) values ('$buch_id', '$ausleih_id', '$datum');";
$query = mysql_query ($q);

Der Datensatz wurde eingefügt.
Vielleicht nicht elegant, aber es funktioniert erst einmal.
Jetzt kann ich mich an die Feinheiten machen.

Gruß
 

Dr. Glastonbury

Advanced Hacker
Ok,
erst wollte ich dir noch den kleinen Tip geben, dass du bei Integer und der BuchID aufpassen musst: Ich hatte mal die PLZ als Integer festgelegt und mich gewundert, dass PLZs hier aus dem Münchner Raum (gehen mit 8 los) nicht richtig eingetragen wurden -> Integer gehen ja nur bis ~32.000.

Soo, dann zu deinem Problem. Genau dasselbe hatte ich auch schon. Weil ich damals zu faul zum frickeln war verwende ich seither nicht mehr INSERT mit VALUES, sondern folgendermaßen:

"INSERT INTO tabelle SET wert1='$wert1', wert2='$wert2', ... "

Was du allerdings noch probieren könntest wäre das ganze wieder umständlich mit
VALUES ( '".$buch_id."', '".$ausleih_id."', '".$datum."' )
zu machen. Dein Denkansatz ist auf jeden Fall richtig und ich bin gerade selber überfragt, warum das nicht gehen will.

Achja, was du auch noch machen könntest, wäre anstatt gleich die Query zu machen mal ein

echo "INSERT into Ausleihe ( B_ID, A_ID, Ausleihdatum) values ('$buch_id', '$ausleih_id', '$datum');";

Dann kannst du überprüfen, ob deine Query soweit i.O. ist, oder ob sich da noch ein Fehler eingeschlichen hat ;)
 
Oben