Suche in Datensätzen


esta

Grünschnabel
Hallo Leute,

Ich mache derzeit eine Weiterbildung in einer Fernschule die Unterlagen sind jedoch in PHP 5 weshalb mein Browser vielleicht ständig Fehler anzeigt obwohl ich es genau abtippe.
Ich habe bereits das alte mysql in mysqli ersetzt. Vielleicht kann mir jemand sagen wie ich es anders schreiben kann. Am besten nicht Objektorientiert da es noch nicht das Thema ist. (Ich frage deshalb nicht meine Schule da sie keinen Fehler finden und nicht wissen woran es sonst liegen kann).

<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Suche in Datensätzen</title>
</head>
<body>
<?php
include("db_connect.inc.php");
if(!isset($_REQUEST['set'])) {
echo "<form action=\"" . $_SERVER['PHP_SELF'] . "\" method=\"post\">\n";
echo "<input type=\"hidden\" name=\"set\" value=\"TRUE\"/>\n";
echo "<p><b>Suche nach:</b>\n";
echo "<select size=\"1\" name=\"spalte\">\n";
echo "<option value=\"ID\">ID</option>\n";
echo "option value=\"Autor\">Autor</option>\n";
echo "option value=\"Titel\">Titel</option>\n";
echo "option value=\"Jahr\">Jahr</option>\n";
echo "option value=\"Kommentar\">Kommentar</option>\n";
echo "</select>\n";
echo "<b>Suchbegriff:</b>\n";
echo "<input type=\"text\" name=\"suche\" size=\"40\"/></p>\n";
echo "<p><input type=\"submit\" value=\"Suche starten...\"/></p>\n";
}
else {
if($_REQUEST['suche'] == "")
$sql = "SELECT * FROM Bücher;";
else
$sql = "SELECT * FROM Bücher WHERE " . $_REQUEST['spalte'] . "LIKE ' " . $_REQUEST['suche'] . "%';";
if(mysqli_connect($host, $user, $password)) {
if(mysqli_select_db('literatur')) {
$erg = mysqli_query($sql);
if($erg) {
if(mysqli_num_rows($erg) <= 0) {
echo "<p>Leider konnte kein Datensatz in der Kategorie </br><b>"
. strtoupper($_REQUEST['spalte']) . "</b> mit dem Suchbegriff <b>"
. strtoupper($_REQUEST['suche']) . "</b> gefunden werden!</p>\n";
unset($_REQUEST['set']);
echo "<p><a href=\"" . $_SERVER['PHP_SELF'] . "\">Zurück zum Formular</a></p>\n";
}
else {
echo "<table>\n";
echo "<tr>\n";
for($i=0; $i<mysqli_num_fields($erg); $i++) {
$feld = mysqli_field_name($erg, $i);
echo "<th>". ucfirst($feld) . "</th>\n";
}
echo "</tr>\n";
while($row = mysqli_fetch_row($erg)) {
echo "<tr>\n"
for($i=0; $i<mysqli_num_fields($erg); $i++)
echo "<td>" . $row[$i] . "</td>";
echo "</tr>\n";
}
echo "</table><p>\n";
unset($_REQUEST['set']);
echo "<p><a href="" . $_SERVER['PHP_SELF'] . "\">Zurück zum Formular</a></p>\n";
}
}
else
echo "<h5>Es konnten keine Datensätze gefunden werden</h5>\n";
}
else
echo "<h5>Verbindung zur Datenbank ist im Moment nicht möglich</h5>\n";
mysqli_close($erg);
}
else
echo "<h5>Der Server ist wegen Wartungsarbeiten vorrübergehend nicht erreichbar.</h5>\n";
}
?>
</div>
</body>
</html>

Folgendes wird im Browser angezeigt:

Parse error: syntax error, unexpected 'for' (T_FOR), expecting ';' or ','

Danke schon mal im Vorraus.
 

Sempervivum

Erfahrenes Mitglied
Die Fehlermeldung sagt doch ziemlich präzise, woran es fehlt: Ein "for" ist unerwartet, statt dessen wird ein ";" oder ein",". Das trifft auf dieses for zu:
Code:
echo "<tr>\n"
for($i=0; $i<mysqli_num_fields($erg); $i++)
Das Semikolon in der Zeile davor fehlt. Außerdem fehlt offenbar die öffnende geschweifte Klammer für das for.
 

basti1012

Erfahrenes Mitglied
In diesen fall ist das aber auch sehr verwirrend.
Man kann ja for und if auch ohne Geschweifte Klammern erstellen.
Aber hier sind die mal mit und mal ohne aufgeführt.
bei den for wahrscheinlich ohne , oder es fehlt die schließende Klammer von while ,ganz oben ist ein if mal wieder mit und mal wieder ohne Klammer.
Ganz unten die else Blöcke sehen auch verwirrend aus, weil auf den ersten Blick nicht klar ist von welchen if die kommen.

Du solltes dir eine Variante aussuchen , weil so kommst du durcheinander , und andere die dir helfen wollen erst recht
 

m.scatello

Erfahrenes Mitglied
Das Script bitte sofort entsorgen, da sind reichlich Macken drin!

$_SERVER['PHP_SELF']
Siehe PHP_SELF ist böse! Potentielles Cross Site Scripting (XSS)! | Technik, Gothic und Anderes

Select *
Siehe FAQ der Newsgroups de.comp.lang.php.* - 16.14. Warum soll ich nicht SELECT * schreiben?

$sql = "SELECT * FROM Bücher WHERE " . $_REQUEST['spalte'] . "LIKE ' " . $_REQUEST['suche'] . "%';";
Siehe SQL-Injection: Grundlagen und Schutzmaßnahmen

Dieser echo-Marathon mit der ganzen Escaperei von \" ist einfach nur grausam!
 

esta

Grünschnabel
Ups ja das Semikolon hat wirklich einfach gefehlt, jedoch hatte ich bereits in anderen Skripts ständig eine Fehlermeldung welche jetzt auch auftaucht.
Warning: mysqli_select_db() expects exactly 2 parameters, 1 given in /opt/lampp/htdocs/php/sucheindatensätzen.php on line 34

Welchen zweiten Parameter muss ich hier denn eintragen ?

if(mysqli_select_db('literatur')) {

Danke schon mal im Voraus.