von Ori |
Richtig, du musst noch die Datenbank auswählen. Meist benutzt man mit einer Verbindung nur eine einzige Datenbank, wähle sie mit dem vierten Parameter von mysqli_connect() aus:
1: | $verbindung = mysqli_connect($server, $benutzer, $password, 'datenbank'); |
Im Nachhinein lässt sich die Datenbank mit ändern.
Vermutlich willst du die Datenbank auch in eine Variable auslagern, die in der Datei logindata.php gespeichert wird. Die solltest du übrigens logindata.inc taufen, damit sie nicht von außen aufgerufen werden kann. Außerdem sollten es keine Variablen sein, da deren Inhalte verändert werden könnten. Stattdessen bieten sich Konstanten an. Sie lassen sich mit define() festlegen und ihre Namen werden komplett in Großbuchstaben geschrieben (nicht notwendigerweise, ist aber Konvention).
1:
2:
3:
4:
5: | define('DB_SERVER', 'localhost');
define('DB_BENUTZER', 'userxyz');
// usw.
$verbindung = mysqli_connect(DB_SERVER, DB_BENUTZER, DB_PASSWORT, DB_DATENBANK); |
Wenn du UTF-8 statt ISO-8859-1 benutzt, musst du vermutlich auch die Einstellungen deines Editors ändern, damit es wirklich UTF-8 ist. Bei den Zeichen, die du im Moment verwendest, sind sie aber gleich.
Im Moment wird an HTML 5 gebrütet, der Doctype sieht dann so aus:
Wenn dir das zu experimentell ist, nimm HTML 4.01 Strict (<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">), XHTML 1.0 Strict oder XHTML 1.1. Deren Doctype kannst du im Zweifelsfall einfach googlen. Auf diese Weise erzeugt Dokumente (also das, was im Browser ankommt) kannst du dann durch den W3C Validator jagen; der sagt dir dann, ob alles in Ordnung ist. Solltest du dich für XHTML entscheiden, achte auf die XML-Präambel und das Schließen von Tags ohne Endtag, wie <img> und <input>. |
von SuperMarioTM |
datei online
Ich habe jetzt folgende Änderungen vorgenommen:
-1. Den Error eingebaut der mir jetzt sagt no database selected
-2. Die Abfrage so geändert wie du es gesagt hast (string)
-3. UTF-8 hab ich auch gemacht
-4. Was sollte ich statt HTML 4.01 Sonst nehmen oder einfach nur noch HTML?
Mein Problem ist:
Ich habe zwei Bücher vor mir und ein galileo tut.
Überall wird es anders gemacht bzw. wird ein formular mit anschliessender auswertung garnicht behandelt
<?php
include 'logindata.php'; # Die Verbindung wird hergestellt bekomme auch das echo OK!
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Abfrage</title>
</head>
<body>
<hr>
<form action ="abfragedieerste.php" method="GET">
<select name="instrument">
<option value="gitarre">Gitarre</option>
<option value="schlagzeug">Schlagzeug</option>
<option value="bass">Bass</option>
<option value="gesang">Gesang</option>
<option value="piano">Piano</option>
<option value="geige">Geige</option>
<option value="trompete">Trompete</option>
<option value="perkussion">Perkussion</option>
</select>
<button type="submit">finden</button>
</form>
</body>
</html>
<?php
$verbindung = @mysqli_connect($server, $benutzer, $passwort);
if (isset($_GET["instrument"])){
$abfrage = mysqli_query($verbindung, sprintf("SELECT * FROM musiker WHERE instrument = '(%s)'", mysqli_real_escape_string($_GET['instrument'])));
echo mysqli_error($verbindung);
echo '<h1><i>' . mysqli_num_rows($abfrage) . '</i> Musiker gefunden</b></h1>';#LINE 39
}else{
echo 'Auswahl ';
}
?> |
von Ori |
Zu deinem Problem:
Die Syntax sieht korrekt aus. Aber die Abfrage gibt wohl false zurück, d.h. es ist ein Fehler aufgetreten. Den kannst du dir mit $verbindung->error oder mysqli_error($verbindung) ansehen. Rufe es direkt nach der Abfrage auf und gib es mit echo aus.
Ich finde die Klammern um das Instrument übrigens seltsam - die würde ich gar nicht erst in der Datenbank speichern.
Und ein paar generelle Dinge:
- Den echten Vorteil bringt mysqli, wenn du es objekt-orientiert verwendest. Es ist kürzer und lässt dich neue Methoden für die Datenbankbehandlung direkt in die Klasse schreiben, wo sie hingehören.
- Benutz kein ISO-8859-1, sondern UTF-8. Dann kannst du alle Zeichen benutzen, quasi alle können es verarbeiten und
- HTML 4.01 Transitional ist auch von gestern.
- <input type="submit"> ist auch doof. (Das Attribut name ist in deinem Fall übrigens überflüssig.) Nimm lieber <button type="submit">finden</button>.
- NIEMALS Parameter DIREKT an MySQL füttern! (oder was passiert beim Aufruf von abfrage.php?instrument='; DROP TABLE musiker; # ? Kleiner Tipp: Nicht ausprobieren.) Stattdessen sollten alle Strings, die nicht sicher sind (also von außen kommen), vorher durch mysqli_real_escape_string gejagt werden, damit sowas nicht passieren kann. Etwa so:
$abfrage = mysqli_query($verbindung, sprintf("SELECT * FROM musiker WHERE instrument = '(%s)'", mysqli_real_escape_string($_GET['instrument'])));
Es gibt noch weitere Möglichkeiten (z.B. Prepared Statements). |
von SuperMarioTM |
Hallo liebes Forum,
Da ich niemanden persöhnlich fragen kann poste ich mal meinen code hier:
<?php
include 'logindata.php'; # Die Verbindung wird hergestellt bekomme auch das echo OK!
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Abfrage</title>
</head>
<body>
<hr>
<form action ="abfrage.php" method="GET">
<select name="instrument">
<option value="gitarre">Gitarre</option>
<option value="schlagzeug">Schlagzeug</option>
<option value="bass">Bass</option>
<option value="gesang">Gesang</option>
<option value="piano">Piano</option>
<option value="geige">Geige</option>
<option value="trompete">Trompete</option>
<option value="perkussion">Perkussion</option>
</select>
<input type="submit" value="finden" name="finden" />
</form>
</body>
</html>
<?php
$verbindung = @mysqli_connect($server, $benutzer, $passwort);
if (isset($_GET["instrument"])){
$sql = "SELECT * FROM musiker WHERE instrument = '({$_GET['instrument']})' " ;
$abfrage = mysqli_query($verbindung, $sql);
echo '<h1><i>' . mysqli_num_rows($abfrage) . '</i> Musiker gefunden</b></h1>';#LINE 39
}else{
echo 'Verbindungsfehler: '.mysqli_connect_error($verbindung);
}
?>
Fehlermeldung:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /home/.sites/41/site1524/web/mysql/abfrage/abfrage.php on line 39
Es wird hier sicherlich an was grundlegendem liegen was ich noch nicht verstanden habe!
Bitte nimm nicht an das ich das recht gut kann ich bin gerade mitten im lernen, habe 2 Bücher vor mir liegen und ein Galileo computing tut offen.
Wie gesagt für kleinere Erklärungen wie zbsp.:
Lass dir die Fehlermeldung ausgeben mit zbsp. ......... weil so macht man das, wäre ich sehr dankbar!
Dankeschön |
|