boma, zunächst einmal: wenn du wieder Code postest, dann benutz die
[ CODE ]...
[ /CODE ]-Formatierung - ansonsten werden Leerzeichen geschluckt.
Dann: verwendest du als Tabellenspalten Namen in Groß- und Kleinschreibung - sind diese wirklich exakt so definiert? Wenn du später auf
$row zugreifst, dann arbeitest du mit einem Feld. Ein Feld hat Elemente. Auf diese Elemente wird per Index zugegriffen - und ein Index
'eins' ist ein anderer als Index
'EiNs'. Sind deine Tabellenspalten also gar nicht exakt so definiert, sondern z.B. als
'job_name' oder
'JOB_NAME', dann greifst du auf ein nicht vorhandenes Feldelement zu. Dementsprechend hab ich nun
error_reporting( E_ALL ); - damit sollte es jeweils eine Fehlermeldung geben, wenn wir auf nicht existierende Feldelemente zugreifen wollen (und ansonsten auch Unfug machen).
Ein Beispiel zu einer Vermeidung von SQL-Injection hab ich auch implementiert.
Der Rest ist kommentiert.
<html><head>
<title>ICC EMEA Runbook for SAP</title>
<link href="styles.css" rel="stylesheet" type="text/css" />
</head><body>
<form method="post" action="saprunbookquery.php">
<input name="jnquery" type="text" size="50" maxlength="50">
<input type="submit" class="button1" value="Go!" name="button1" />
</form><?php
// Zeige alles, was wir unter PHP falsch machen
error_reporting( E_ALL );
// Mit DBMS verbinden; bei Fehlschlag Meldung
$con= mysql_connect( 'localhost', 'root', 'utopia' ) or die( 'Keine Verbindung: '. mysql_error() );
// DB auswählen; bei Fehlschlag Meldung
mysql_select_db( 'icc_db', $con ) or die( 'Konnte DB nicht wählen: '. mysql_error() );
// Eine SQL-Injection ist z.B., wenn folgender Text übergeben werden würde:
// '; DROP DATABASE; SELECT 1 FROM DUAL WHERE ''= '
// Würden wir das einfach an unsere SQL-Abfrage anhängen, würden drei syntaktisch korrekte
// Komanndos ausgeführt werden, wovon eins tödlich wäre. Deshalb ersetzen wir in der
// Übergabe alle ' mit einem '', was unter MySQL dann kein Textbegrenzer, sondern ein
// Hochkomma im Text selbst darstellt.
$where= str_replace( '\'', '\'\'', $_POST['jnquery'] );
// Wurde überhaupt etwas übergeben? Dann komplett zur WHERE-Bedingung ausbauen...
if( strlen( $where )> 0 ) $where= ' WHERE Job_Name LIKE \''. $where. '\'';
// ...ansonsten würden wir den kompletten Tabelleninhalt ausgeben
$sql= 'SELECT * FROM saprunbook'. $where;
// Abfrage ausführen; bei Fehlschlag Meldung samt SQL-Kommando
$result= mysql_query( $sql ) or die( 'Abfragefehler für >>'. $sql. '<<: '. mysql_error() );
// Tabellenkopf ausgeben
echo '
<table align="center" cellspacing="0" cellpadding="0"><tr>
<th>Job Name</th>
<th>Job Title</th>
<th>Contact</th>
<th>Phone</th>
<th>Schedule</th>
<th>Est</th>
<th>Frequency</th>
<th>Action</th>
</tr>';
// Jeden Datensatz als Tabellenzeile ausgeben.
// VORSICHT! Bei den Spaltennamen wird zwischen Groß- und Kleinschreibung
// unterschieden - existieren diese also nicht wirklich exakt in dieser Schreibweise
// in der Tabelle, so werden wir im folgenden immer auf leere Feldelemente zugreifen!
while( $row= mysql_fetch_object( $result ) ) echo '<tr>
<td>'. $row['Job_Name']. '</td>
<td>'. $row['Job_Title']. '</td>
<td>'. $row['Contact']. '</td>
<td>'. $row['Phone']. '</td>
<td>'. $row['Schedule']. '</td>
<td>'. $row['Est']. '</td>
<td>'. $row['Freq']. '</td>
<td>'. $row['Operations']. '</td>
</tr>';
// Tabelle schließen
echo "</table>";
// Abfrageergebnis freigeben
mysql_free_result( $result );
// DBMS-Verbindung freigeben
mysql_close( $con );
?></body></html>