Vergebenne ID im selben Formular nicht mehr anzeigen

DaveThuet

Erfahrenes Mitglied
Hey Leute...

wiedermal ich mit einem kleinem Problem... :(

Wie schaffe ich es in einem Formular das Daten aus der DB ausgibt die bereits vergebenne ID-Nummer (wird in einem Imputfeld übergeben) nicht mehr anzuzeigen in einer Selectbox-Auswahl?

Hier verständnishalber das genannte Formular:
HTML:
<div class="formmaileralles">
<form action="./anmeldung-send.php" method="post" enctype="multipart/form-data" name="anmeldung" id="anmeldung" onsubmit="return checkAnmeldungForm(this)">

<div class="formmailertext">
Anrede:<span class="formularpflicht">*</span><br />
<select name="Anrede" class="formmailertextfeld" id="Anrede">
<option selected="selected" value="---">---</option>
<option value="Frau">Frau</option>
<option value="Herr">Herr</option>
</select>
<br />
Vorname und Nachname:<span class="formularpflicht">*</span><br />
<input name="Name" class="formmailertextfeld" id="Name" />
<br />
Email:<span class="formularpflicht">*</span><br />
<input name="Email" class="formmailertextfeld" id="Email" />
<br /> 
Gewählte Schulung:<br />
<input name="Schulung" class="formmailertextfeld" id="Schulung" value="<?php echo $schulungsname[$_GET['id']]; ?> (<?php echo $kundenart[$_GET['id']]; ?>) CHF <?php echo $totalkurskosten[$_GET['id']]; ?>" readonly="readonly" />
</div>

<div class="formmailertextrechts">
Firma:<br />
<input name="Firma" class="formmailertextfeld" id="Firma" />
<br />
PLZ und Orschaft:<span class="formularpflicht">*</span><br />
<input name="Ortschaft" class="formmailertextfeld" id="Ortschaft" />
<br />
Abkürzung Kanton:<br />
<input name="Kanton" class="formmailertextfeld" id="Kanton" />
<br />
Bei zweiter Buchung 10% auf Gesamtpreis:<br />
<?php $ergebnis = mysql_query($sql);
echo "<select name='Zweite Schulung' class='formmailertextfeld' id='Zweite_Schulung'>";
while ($row = mysql_fetch_row($ergebnis))
{
  echo "<option value='".$row[0]."'>$row[0]".$row[3]."</option>";
}
echo "</select>"; ?>
</div>

<div class="formailertextlinks">
Mitteilung:<span class="formularpflicht">*</span><br />
<textarea name="Mitteilung" rows="5" cols="5" class="formmailertextarea" id="Mitteilung"></textarea><br />
<div class="small"><span class="formularpflicht">*</span> = Pflichtfelder / kein HTML-Code / kein BBCode</div>
<br />	
<input name="Submit" type="submit" class="formmailerbutton" id="Submit" value="Senden..." />
<input name="loeschen" type="reset" class="formmailerbutton" id="loeschen" value="Löschen!" /><br />
</div>
</form>
</div>

Ich hoffe Ihr versteht was ich meine? :confused:
Es geht mir darum das die gewählte Schulung nicht mehr verfügbar sein darf in der Selectbox-Auswahl.
Besten dank für jegliche Hilfe...
 
Also die ID, die in "Schulung" schon steht, darf nicht mehr im Select zur Auswahl stehen?

Ist das die ID, die in $_GET['id'] steht? und in $row[0] steht die jeweilige ID der Schulungen, die noch zur Verfügung stehen? Dann prüfe doch einfach, ob $_GET['id'] == $row[0] (bzw !=) ist.
PHP:
while ($row = mysql_fetch_row($ergebnis))
{
  if($_GET['id'] != $row[0])
  {
    echo "<option value='".$row[0]."'>".$row[0] . $row[3]."</option>";
  }
}
 
Abend "_Grubi",

ja genau die ID die im Inputfeld "Schulung" vergeben ist sollte nicht mehr in der Select auftauchen.

Habe es nun eingebaut aber es kommt immer noch die identische Schulung auch zur Auswahl?

Inputfeld:
PHP:
<input name="Schulung" class="formmailertextfeld" id="Schulung" value="<?php echo $schulungsname[$_GET['id']]; ?> (<?php echo $kundenart[$_GET['id']]; ?>) CHF <?php echo $totalkurskosten[$_GET['id']]; ?>" readonly="readonly" />

Selectfeld:
PHP:
<?php $ergebnis = mysql_query($sql);
echo "<select name='Zweite Schulung' class='formmailertextfeld' id='Zweite_Schulung'>";
while ($row = mysql_fetch_row($ergebnis))
{
  if($_GET['id'] != $row[0])
  {
    echo "<option value='".$row[0]."'>".$row[0] . $row[3]."</option>";
  }
}  
echo "</select>"; ?>

Danke dir vielmals für deine Hilfe...
 
Stimmen meine Annahmen denn bzgl der Werte von $_GET['id'] und $row[0]? Oder anders gefragt: Woran erkenn ich, dass die Schulung im Select die gleiche Schulung ist, wie die im input-Schulungen? Du musst dann nur prüfen, ob "ID_der_gewählten_Schulung ungleich (!=) ID_der_aktuellen_Schulung_aus_der_Datenbank" ist.
 
Hey,

ich bringe es einfach nicht hin... :(
Die identische Schulung taucht trotz PHP-Code immer wieder auf.

Hier die gesamten MySql-Abfragen oder wie man denen sagt:

PHP:
// Tabellen in schulungen
$query = "SELECT * FROM schulungen";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{ 
$kundenart[$row[id]] = $row[kundenart];
$schulungsname[$row[id]] = $row[schulungsname]; 
$materialkosten[$row[id]] = $row[materialkosten]; 
$anfahrtskosten[$row[id]] = $row[anfahrtskosten]; 
$kurskosten[$row[id]] = $row[kurskosten]; 
$totalkosten[$row[id]] = $row[totalkosten];
$rabatt[$row[id]] = $row[rabatt];
$totalkurskosten[$row[id]] = $row[totalkurskosten];
}

// ** selectmenü beim anmeldformular
$sql = "SELECT schulungsname FROM schulungen ORDER BY id ASC";
Nochmals folgend die PHP-Codes des Anmeldeformulars...
Die id übergabe aus den diversen Schulungen auf Weinschulung:
PHP:
Gewählte Schulung:<br />
<input name="Schulung" class="formmailertextfeld" id="Schulung" 
value="<?php echo $schulungsname[$_GET['id']]; ?> 
(<?php echo $kundenart[$_GET['id']]; ?>) 
CHF <?php echo $totalkurskosten[$_GET['id']]; ?>" readonly="readonly" />
Die Select-Auswahl im Anmeldeformular für die zweite Schulung:
PHP:
Bei zweiter Buchung 10% auf Gesamtpreis:<br />
<?php $result = mysql_query($sql);
echo "<select name='Zweite Schulung' class='formmailertextfeld' id='Zweite_Schulung'>";
while ($row = mysql_fetch_row($result))
{
  if ($_GET['id'] != $row[0])
  {
    echo "<option value='".$row[0]."'>".$row[0] . $row[3]."</option>";
  }
}  
echo "</select>"; ?>
Evtl. findest du nun meinen Fehler, dass trotz dem "if ($_GET['id'] != $row[0])" Trick die bereits gewählte Schulung immer noch auftaucht in der Select-Auswahl?
Liegt es möglicherweise an der Sortierungsart "ORDER BY id ASC" bei der Abfrage aus der DB für die Select-Auswahl?
 
Ist das
PHP:
// ** selectmenü beim anmeldformular
$sql = "SELECT schulungsname FROM schulungen ORDER BY id ASC";
der Query, der im 3. Codeblock bei der Erstellung des Selects verwendet wird? Du rufst dabei nämlich nur das Feld "schulungsname" aus der Datenbank ab, also 1 Feld. Du greifst in der Schleife mit $row[3] jedoch auf das 4. Feld der Abfrage zu, das gar nicht existiert ?!
Setze mal ein für die Zeit der Entwicklung
PHP:
error_reporting(E_ALL);
direkt an den Anfang der Datei, damit wir alle Fehlermeldungen von PHP erhalten. Das dürfte eine ganze Menge sein ;)
Die ersten kannst du dadurch beheben, dass du in der ersten while-Schleife, wo du die Arrays wie $kundenart, $schulungsname, etc füllst, die Feldnamen aus der Datenbank, also $row[kundenart], $row[schulungsname], etc in Anführungszeichen / Hochkommata packst, also $row['kundenart'], $row['schulungsname'], etc

Wenn es der Query ist, dann sollte es so funktionieren.
PHP:
Bei zweiter Buchung 10% auf Gesamtpreis:<br />
<?php $result = mysql_query($sql);
echo "<select name='Zweite Schulung' class='formmailertextfeld' id='Zweite_Schulung'>";
while ($row = mysql_fetch_row($result))
{
  if ($schulungsname[$_GET['id']] != $row[0])
  {
    echo "<option value='".$row[0]."'>".$row[0] . $row[3]."</option>";
  }
}  
echo "</select>"; ?>
 
Abend,

also mit der Ausgabe "if ($schulungsname[$_GET['id']] != $row[0])" hat es Funktioniert!

Allerdings weiss ich nicht wo ich das
PHP:
error_reporting(E_ALL);
einbauen muss um alle Fehler zu sehen? :(

Meinst du ich sollte alle
PHP:
// Tabellen in schulungen
$query = "SELECT * FROM schulungen";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{ 
$kundenart[$row[id]] = $row[kundenart];
$schulungsname[$row[id]] = $row[schulungsname]; 
$materialkosten[$row[id]] = $row[materialkosten]; 
$anfahrtskosten[$row[id]] = $row[anfahrtskosten]; 
$kurskosten[$row[id]] = $row[kurskosten]; 
$totalkosten[$row[id]] = $row[totalkosten];
$rabatt[$row[id]] = $row[rabatt];
$totalkurskosten[$row[id]] = $row[totalkurskosten];
}
nun folgendermassen Schreiben:
PHP:
// Tabellen in schulungen
$query = "SELECT * FROM schulungen";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result))
{ 
$kundenart[$row['id']] = $row['kundenart'];
$schulungsname[$row['id']] = $row['schulungsname']; 
$materialkosten[$row['id']] = $row['materialkosten']; 
$anfahrtskosten[$row['id']] = $row['anfahrtskosten']; 
$kurskosten[$row['id']] = $row['kurskosten']; 
$totalkosten[$row['id']] = $row['totalkosten'];
$rabatt[$row['id']] = $row['rabatt'];
$totalkurskosten[$row['id']] = $row['totalkurskosten'];
}
muss ich danach auch die Abfragen in den diversen Seiten dementsprechend anpassen?
Ich habe nun auch noch die "ids" in Hochkommatas gepackt, hoffe dies ist richtig?
Ich habe dies nun so wie oben gemacht und sehe das es so Funktioniert, also ohne die Abfragen in den einzelnen Seiten zu verändern.
 
Zuletzt bearbeitet:
Den Befehl musst du direkt am Anfang unter "<?php" bzw "<?" (je nachdem, was du benutzt) setzten.

Den Sinn der Anführungszeichen kann man schnell erklären:
Du hast jetzt z.B. noch $row[id] ohne Anführungszeichen dastehen. PHP nimmt nun an, dass es sich bei id um eine Konstante (z.B. durch define() definiert) handelt. Der Parser kann diese Konstante aber nicht finden und wirft eine "Notice Meldung". Erst danach wird id als Text angenommen. Wenn du nun id in Anführungszeichen packst, nimmt er es direkt als Text und lässt den Umweg über die Konstantenprüfung weg. In der Regel sollte das auch das Skript twas beschleunigen. Bei Zahlen als Key braucht man das nicht, es bezieht sich nur auf Arrays, die Text-Keys haben.
Du solltest also alle Arrays anpassen, wo du statt z.B. $row['id'] nur $row[id] geschrieben hast. Ist der Key in einer Variable, wie es z.B. bei $_GET['id'] der Fall ist, dann ist $arr[$_GET['id']] völlig in Ordnung. Anführungszeichen können in diesem Fall, je nachdem, welche man nutzt, fehlerhaft sein.

In der while-Schleife, welche das Select erstellt kannst du noch ". $row[3]" entfernen. Das dürfte dir auch einige Fehler bringen, weil das 4. Element (Zählung beginnt ja bei 0) nicht existiert (du frägst aus der Datenbank ja nur eine Spalte ab).

Was er sonst noch so bringt und du nicht behoben bekommst, kannst du dann einfach mal googln oder hier posten, falls du der Lösung nicht näher kommen solltest.

Edit:
Jetzt baue ich meinen Post auf dein übrig gelassenes $row[id] auf und du änderst es einfach in der Zeit, tststs :D
 
Zuletzt bearbeitet:
Danke für deine sehr ausführliche Erklärung!

Ich habe nun das error_reporting(E_ALL); eingebaut aber wo werden mir die Fehler nun angezeigt?

War es in diesem Falle aber auch richtig auch die
PHP:
$row[id]
in
PHP:
$row['id']
zu ändern?
Müssten dann diese auch Hochkommatas haben:
PHP:
<option value='".$row['0']."'>".$row['0']."</option>

Ich werde die jetzt noch die ". $row[3]" entfernen...

Besten dank für deinen tollen Support! :eek:
 
Zuletzt bearbeitet:
Ließ dir meinen Post noch einmal durch, dort bin ich auf auf nummerische Keys eingegangen (Zusammengefasst: Nein, dort sind kleine Anführungszeichen nötig ;) ) Deine Änderung bzgl $row['id'] ist richtig!

Die Fehlermeldungen sollten normalerweise im Browser ausgegeben werden, außer in der php.ini des Hosters wurde "display_errors" auf "Off" gestellt (prüfen per phpinfo). Du könntest dann versuchen über
PHP:
ini_set("display_errors", 'on');
das zu aktivieren (diese zeile noch vor error_reporting() setzten).
 
Zurück