Code vereinfachen?!

Stiff

Mitglied
Hallo Leute,
nach vielen Anläufen mir PHP irgendwie in den Kopf zu hämmern, habe ich gestern endlich mal was alleine geschafft. Also ganz alleine nun auch nicht, aber dazu gibt es ja Manuals.

Jetzt hab ich aber das Problem, dass das Script sehr lang wird. Ich bin mir sicher, dass es auch besser geht. Nur komme ich jetzt nicht mehr weiter. Ich poste mal das Formular und das Script.

PHP:
<?
 /*ICH LASS JETZT DEN QUATSCH MIT MYSQL CONNECT EINFACH MAL WEG */  

if($_POST['semester'] == 1)
  {   
	    $res=mysql_query("SELECT * FROM diplom WHERE semester = ''");
		if (!$res) {
   		echo 'Abfrage konnte nicht ausgeführt werden: ' . mysql_error();
   		exit;
		}
		while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
   		printf ("Name: %s  Thema: %s Semester: %s FG: %s<br>", $row[0], $row[1], $row[2], $row[3]); 
		}
  }
if($_POST['semester'] == 2)
  {   
	    $res=mysql_query("SELECT * FROM diplom WHERE semester = 'ss 97'");
		if (!$res) {
   		echo 'Abfrage konnte nicht ausgeführt werden: ' . mysql_error();
   		exit;
		}
		while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
   		printf ("Name: %s  Thema: %s Semester: %s FG: %s<br>", $row[0], $row[1], $row[2], $row[3]); 
		}
  }
if($_POST['semester'] == 3)
  {   
	    $res=mysql_query("SELECT * FROM diplom WHERE semester = 'ws 97/98'");
		if (!$res) {
   		echo 'Abfrage konnte nicht ausgeführt werden: ' . mysql_error();
   		exit;
		}
		while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
   		printf ("Name: %s  Thema: %s Semester: %s FG: %s<br>", $row[0], $row[1], $row[2], $row[3]); 
		} 
  }
		
		?>

So und nun das Formular:

Code:
<html> 
<head> 
  <title>Abfrage</title> 
</head> 
<body> 
  <form action="ausgabe.php" method="post"> 
    W&auml;hlen sie etwas aus
    <select name="semester" style="width:100px">
	  <option value="1"></option>
      <option value="2">SS 1997</option>
      <option value="3">WS 97/98</option>
      <option value="4">SS 1998</option>
      <option value="5">WS 98/99</option>      
	  <option value="6">SS 1999</option>
      <option value="7">WS 99/00</option>      
	  <option value="8">SS 2000</option>
      <option value="9">WS 00/01</option>
	  <option value="10">SS 2001</option>
      <option value="11">WS 01/02</option>
	  <option value="12">SS 2002</option>
      <option value="13">WS 02/03</option>
	  <option value="14">SS 2003</option>
      <option value="15">WS 03/04</option>
	  <option value="16">SS 2004</option>
      <option value="17">WS 04/05</option>
	  <option value="18">SS 2005</option>
      <option value="19">WS 05/06</option>
    </select>
    <input type="submit" value="Senden"> 
  </form> 
</body> 
</html>

So, was ich weiß ist, dass jeweils der Value des Select Feldes übergeben wird. daraus kann ich dann meine abfrage an die datenbank stellen. ich würde jetzt aber gerne nicht für jeden value eine eine abfrage schreiben, sondern alles unter einen hut bringen. Ich dacht da an sowas wie:

PHP:
$res=mysql_query("SELECT * FROM diplom WHERE semester = ''$_POST['semester']");

Nur habe ich damit immer einen Fehler bekommen. Ich hoffe mir hilft jemand. Achja die Datenbank sieht so aus:

name thema semester fg

name1 thema1 ws 97/98 3 und 7
name2 thema2 ss 98 3 und 6
... ... ... ...

Das Formular soll am ende 2 pulldwon Menüs haben, und die werte aus semester und fg abfragen.

Viele Grüße
Roman
 
Hallo!

1.) Wenn du unbedingt immer ausgeben willst, wenn ein Query nicht geklappt hat: Bau dafür eine eigene Funktion.

2.) Gestalte dein Formular oder deine Datenbank so um, dass die Werte direkt verglichen werden könne. Schreibe ins Formular also entweder "ss 97" statt "2" oder in die Datenbank eine "2" statt "ss 97". Das vereinfach die Sache ungemein und du brauchst nicht für jede Möglichkeit eine eigene Abfrage. Du solltest die Werte aber vor dem Einfügen in den Query duch die Funktion mysql_real_escape_string() jagen...

Mamphil
 
Skript wäre so möglich:
PHP:
<?php
/*ICH LASS JETZT DEN QUATSCH MIT MYSQL CONNECT EINFACH MAL WEG */  
    switch($_POST['semester']) {
    case 2:	$where = 'ss 97';	break;
    case 3:	$where = 'ws 97/98';	break;
    default:	$where = '';
    }

    $q=mysql_query('SELECT * FROM diplom WHERE semester = "'.$where.'";');
    echo(mysql_error());
    while ($row = mysql_fetch_array($res, MYSQL_NUM)) {
	printf ("Name: %s  Thema: %s Semester: %s FG: %s<br>", $row[0], $row[1], $row[2], $row[3]);
    }
?>
Aber wie mein Vorredner schon sagte, sinnvoller wäre es die options so zu gestalten:
HTML:
<option value="ss 97">SS 1997</option>
und dann ohne switch abfragen wie du es vorhattest.

Dein Query ohne Fehler geht so:
PHP:
 $res=mysql_query('SELECT * FROM diplom WHERE semester = "'.$_POST['semester'].'"');
 
Coole Sache,
bin erstmal froh, dass ich ne Antwort bekommen habe. Bin gerade dabei das umzubauen. Klappt auch schon ganz gut. Wie würde das denn laufen, wenn ich zwei verschiedene Slectboxen habe, die die Werte aus SEMESTER und FG abfragen.
Vielen Dank schonmal.
 
So jetzt hat sich ein Problem ergeben. Der erste Teil funktioniert schonmal wunderbar. Jetzt muss ich das Formular aber noch um eine Selectbox erweitern. Meine Versuche geben nix aus. Nicht mal ne Fehler Meldung:

Das Formular:
HTML:
<select name="semester" style="width:100px">
	  <option value="">alle</option>
      <option value="ss 97">SS 1997</option>
      <option value="ws 97/98">WS 97/98</option>
      <option value="ss 98">SS 1998</option>
      <option value="ws 98/99">WS 98/99</option>      
	  <option value="ss 99">SS 1999</option>
      <option value="ws 99/00">WS 99/00</option>      
	  <option value="ss 00">SS 2000</option>
      <option value="ws 00/01">WS 00/01</option>
	  <option value="ss 01">SS 2001</option>
      <option value="ws 01/02 ">WS 01/02</option>
	  <option value="ss 02">SS 2002</option>
      <option value="ws 02/03">WS 02/03</option>
	  <option value="ss 03">SS 2003</option>
      <option value="ws 03/04">WS 03/04</option>
	  <option value="ss 04">SS 2004</option>
      <option value="ws 04/05">WS 04/05</option>
	  <option value="ss 05">SS 2005</option>
      <option value="ws 05/06">WS 05/06</option>
    </select>
	<select name="fg" style="width:100px">
	  <option value="">alle</option>
      <option value="1">1</option>
      <option value="2">2</option>
      <option value="3">3</option>
      <option value="4">4</option>      
	  <option value="5">5</option>
      <option value="6">6</option>      
	  <option value="7">7</option>
      <option value="8">8</option>

    </select>
    <input type="submit" value="Senden">
Das Ergebnis
PHP:
<? // Wieder ohne MYSQL Connect
switch($_POST['semester']) {
    case 2:    $semester = 'ss 97';    break;
    case 3:    $semester = 'ws 97/98';    break;
    default:   $semester = '*';
    }
	
switch($_POST['fg']) {
    case 2:    $fg = '1';    break;
    case 3:    $fg = '2';    break;
    default:   $fg = '*';
    }

    $q=mysql_query('SELECT * FROM diplom WHERE semester = "'.$semester.'" AND fg LIKE "'.$fg.'";');
    echo(mysql_error());
    while ($row = mysql_fetch_array($q, MYSQL_NUM)) {
    printf ("Name: %s  Thema: %s Semester: %s FG: %s<br>", $row[0], $row[1], $row[2], $row[3]);
    }
?>

Da in dem Feld FG nicht immer nur "1" oder "2" usw. steht, sondern auch mal "3 und 6" oder "3 und 7" müßte die eigentliche Abfrage irgendwie so aussehen.

Code:
SELECT * FROM diplom WHERE semester = "'.$semester.'" AND fg LIKE "'.$fg.'";

Es darf also nicht überprüft werden, ob der Wert exakt überein stimmt. Leider ist die Ausgabe bisher immer leer geblieben. Auch das Zweite Problem, wenn ich als default einen * setze, um alle Ergebnisse abzufragen funktioniert nicht. Wäre nett, wenn nochmal einer drüber schaut.
Viele Grüße Roman
 
Hi!

Die Einträge im Feld "FG" würde ich mit festen Symbolen trennen - diese sollten auch am Anfang und Ende stehen. Also z. B. "|1|" oder "|3|6|".

Das Query sieht dann so aus:
Code:
... WHERE ... FG LIKE "%|1|%"
. Die "1" muss dann natürlich per PHP eingefügt werden. Die %-Zeichen bedeuten, dass an ihrer Stelle noch Text im Datenbankfeld stehen kann.

Mamphil
 
Hmm kann mir zwar vorstellen, was Du vor hast. Aber irgendwie verstehe ich nicht wo ich das machen soll. Die Abfrage ist klar. Aber müssen dann die Daten auch so in der Datenbank stehen. Das fände ich sehr unschön. Da muss es auch einen anderen Weg geben.

Ich glaub mein Problem liegt im Moment woanders.
PHP:
switch($_POST['semester']) {
    case 2:    $semester = 'ss 97';    break;
    case 3:    $semester = 'ws 97/98';    break;
    default:   $semester = '';
    }
echo $semester;

switch($_POST['fg']) {
    case 2:    $fg = '1';    break;
    case 3:    $fg = '2';    break;
    case 2:    $fg = '3';    break;
    case 3:    $fg = '4';    break;
	case 2:    $fg = '5';    break;
    case 3:    $fg = '6';    break;
	case 2:    $fg = '7';    break;
    case 3:    $fg = '8';    break;	
    default:   $fg = '';
    }

echo $fg;

Hier eralten ich nämlich schon keine Ausgabe. Das heißt für mich, dass die Werte irgendwie garnicht in der Abfrage ankommen.
 
Zuletzt bearbeitet:
Zurück