PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks. |
 |
|

22-03-2017, 17:19
|
hippo21
Registrierter Benutzer
|
|
Registriert seit: Jun 2016
Beiträge: 14
|
|
Suchscript funktioniert nicht
Hallo
Ich arbeite als absoluter Anfänger an einem kleinen Suchscript das ein feld in einer sql datenbank durchsuchen soll.
Habe schon einige fehler beseidigen können aber dieser bleibt hartnäckig.
also hier mal der Code
PHP-Code:
<html> <head> <titel>PHP Suche</titel> <link rel="stylsheet"type="type=text/css" href=2design.css"/> </head> <body> <header>HTMLworld</header> <section> <form method="get"> <input type="text" class="suchfeld" name= "search" /> <input type="submit" class="suchbutton" name= "Suche" /> <form> <p> <?php if (isset($_GET["search"])){ $suchwort =$_GET["search"]; $abfrage = "";
echo "$suchwort";
$suchwort =explode(" ", $suchwort); for ($i = 0 ; $i < sizeof($suchwort) ; $i++)
{ $abfrage .= "'keywort' like '%" . $suchwort[$i] ."%'";
if($i < (sizeof($suchwort) - 1)) { $abfrage .="or";
} }
$db = @new mysqli ( 'localhost', 'root1', '####', 'suche1'); if (mysqli_connect_errno() == 0) echo "Die datenbank verbindung hat geklappt"; { $sql = " SELECT * FROM 'linkliste' WHERE " .abfrage ; $ergebniss = $db->query($sql);
while ($zeile = $ergebnis->fetch_object()) { echo "<p>"; echo $zeile->linknr; echo "<nbsp;nbsp>"; echo $zeile->keywort; echo "nbsp;nbsp;<b>"; echo $zeile->link; echo "</b></p>"; } } $db->close;
}
?> </p> </section> </body>
und hier die fehlermeldung.
Fatal error: Uncaught Error: Call to a member function fetch_object() on null in C:\WTServer\WWW\suche\test3.php:43 Stack trace: #0 {main} thrown in C:\WTServer\WWW\suche\test3.php on line 43
Ich denke es liegt daran das halt nur null in der Abfrage produziert wird.
oder halt bei der $db. Aber das sind nur Vermutungen. Das ist das erstemal mit PHP7 und ich bräuchte eure hilfe.
Gruss aus Kaiserslautern
micha
|

22-03-2017, 18:14
|
hippo21
Registrierter Benutzer
|
|
Registriert seit: Jun 2016
Beiträge: 14
|
|
Hallo
Welche Anführungszeichen meinst du genau. oder
PHP-Code:
'%" . $suchwort[$i] ."%'"
wenn ich bei
PHP-Code:
$sql = " SELECT * FROM 'linkliste' WHERE " .abfrage ;
linkliste ohne anführungszeichen setze er halte ich noch eine weitere Fehlermeldung.
Warning: mysqli::query(): Couldn't fetch mysqli in C:\WTServer\WWW\suche\test3.php on line 41
|

23-03-2017, 01:41
|
 |
mermshaus
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 452
|
|
Um den Tabellennamen (linkliste) und um die bzw. den Feldname(n) (keywort) gehören keine Anführungszeichen (im Sinne von '…' oder "…").
Du schreibst auch einmal $ergebniss und einmal $ergebnis, sehe ich gerade noch.
Und bei $abfrage fehlt einmal das Dollarzeichen.
|

23-03-2017, 08:33
|
bandit600
Registrierter Benutzer
|
|
Registriert seit: Jan 2010
Beiträge: 192
|
|
Und bei
PHP-Code:
$abfrage .="or";
fehlen 2 Blanks
|

23-03-2017, 13:43
|
hippo21
Registrierter Benutzer
|
|
Registriert seit: Jun 2016
Beiträge: 14
|
|
Hallo
hab mal geändert was du gesagt hast aber leider ohne Besserung.
Hier mal der geänderte code
PHP-Code:
<header>HTMLworld</header> <section> <form method="get"> <input type="text" class="suchfeld" name= "search" /> <input type="submit" class="suchbutton" name= "Suche" /> <form> <p> <?php if (isset($_GET["search"])){ $suchwort =$_GET["search"]; $abfrage = "";
echo "$suchwort";
$suchwort =explode(" ", $suchwort); for ($i = 0; $i < sizeof($suchwort); $i++)
{ $abfrage .= "keywort like '%" . $suchwort[$i] . "%'";
if($i < (sizeof($suchwort) - 1)) { $abfrage .="or";
} }
$db = @new mysqli ( 'localhost', 'root1', '####', 'suche1'); if (mysqli_connect_errno() == 0) echo "Die datenbank verbindung hat geklappt"; { $sql = " SELECT * FROM linkliste WHERE .$abfrage. "; $ergebnis = $db->query($sql);
while ($zeile = $ergebnis->fetch_object()) { echo "<p>"; echo $zeile->linknr; echo "<nbsp;nbsp>"; echo $zeile->keywort; echo "nbsp;nbsp;<b>"; echo $zeile->link; echo "</b></p>"; } } $db->close;
}
?> </p> </section> </body>
fehlercode:
Fatal error: Uncaught Error: Call to a member function fetch_object() on boolean in C:\WTServer\WWW\suche\test3.php:37 Stack trace: #0 {main} thrown in C:\WTServer\WWW\suche\test3.php on line 37
gruss micha
|

23-03-2017, 15:44
|
bandit600
Registrierter Benutzer
|
|
Registriert seit: Jan 2010
Beiträge: 192
|
|
Lass dir mal $sql anzeigen und die Blanks bei or sind immer noch nicht drin.
Und lass dir mal den Fehler von der DB anzeigen:
PHP-Code:
$ergebnis = $db->query($sql) or die ("SQL: $sql <br>Error: " . $db->error);
Geändert von bandit600 (23-03-2017 um 16:10 Uhr)
|

23-03-2017, 16:14
|
hippo21
Registrierter Benutzer
|
|
Registriert seit: Jun 2016
Beiträge: 14
|
|
hallo bandit
was sind blanks ?
und der inhalt von echo $sql ist
PHP-Code:
SELECT * FROM linkliste WHERE .keywort like '%haus%'.
und ich hatte wirklich nach haus gesucht. also das freud mich schon das es bis dahin schonmal funktioniert
gruss micha
|

23-03-2017, 16:48
|
hippo21
Registrierter Benutzer
|
|
Registriert seit: Jun 2016
Beiträge: 14
|
|
Achso noch der fehlercode von der DB
Error: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'like '%hund%'orkeywort like '%haus%'.' at line 1
|

23-03-2017, 17:47
|
 |
mermshaus
Registrierter Benutzer
|
|
Registriert seit: Jun 2009
Beiträge: 452
|
|
Blanks sind Leerzeichen. Nicht "or", sondern " or ".
Zudem passt deine String-Verkettung nicht:
PHP-Code:
$sql = " SELECT * FROM linkliste WHERE .$abfrage. ";
Richtig ist eine dieser Varianten:
PHP-Code:
$sql = "SELECT * FROM linkliste WHERE $abfrage";
PHP-Code:
$sql = "SELECT * FROM linkliste WHERE " . $abfrage;
|

29-03-2017, 20:35
|
hippo21
Registrierter Benutzer
|
|
Registriert seit: Jun 2016
Beiträge: 14
|
|
Hallo
Der code funktioniert soweit .
Ich wollte ihn jetzt einstellen, sodas andere ihn auch nutzen können. Aber vorher wollte ich noch das linkinjektion problem angehen. und schon gehts wieder nicht.PHP]<section>
<form method="get">
<input type="text" class="suchfeld" name= "search" />
<input type="submit" class="suchbutton" name= "Suche" />
<form>
<p>
<?php
if (isset($_GET["search"])){
$suchwort = mysqli_real_escape_string ($_GET['search']);
$abfrage = "";
echo "$suchwort";
$suchwort =explode(" ", $suchwort);
for ($i = 0; $i < sizeof($suchwort); $i++)
{
$abfrage .= "keywort like '%" . $suchwort[$i] . "%'";
if($i < (sizeof($suchwort) - 1)) {
$abfrage .=" or ";
}
}
$db = @new mysqli ( 'localhost', 'root', '', 'suche');
if (mysqli_connect_errno() == 0)
echo "Die datenbank verbindung hat geklappt";
{
$sql = "SELECT * FROM linkliste WHERE " . $abfrage; ;
echo "$sql";
$ergebnis = $db->query($sql)
or die ("SQL: $sql <br>Error: " . $db->error);
while ($zeile = $ergebnis->fetch_object()) {
echo "<p>";
echo $zeile->linknr;
echo "  ";
echo $zeile->keywort;
echo "   <b>";
echo $zeile->link;
echo "</b></p>";
}
}
$db->close;
}
?>
</p>
</section>[/PHP]
fehlermeldung:
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in C:\WTServer\WWW\suche\index.php on line 27
Bei php 5.5. funktionirt das noch ( ohne (i))
gruss micha
|

02-04-2017, 13:11
|
hippo21
Registrierter Benutzer
|
|
Registriert seit: Jun 2016
Beiträge: 14
|
|
Hallo nochmal
Allso ich raffs nicht.
Erwartet mysqli_real_escape_string immer 2 Variable??? Aber ich habe doch nur eine ( Get ... ). Die erklarung auf deiner verlinkten seite verstehe ich nicht.
Grus Micha
|

02-04-2017, 19:02
|
bandit600
Registrierter Benutzer
|
|
Registriert seit: Jan 2010
Beiträge: 192
|
|
Beachte doch mal die Beispiele in der Doku, was anderes könnten wir dir auch nicht schreiben.
|

02-04-2017, 21:11
|
hippo21
Registrierter Benutzer
|
|
Registriert seit: Jun 2016
Beiträge: 14
|
|
Also ich verstehe das Beispiel so
PHP-Code:
$city = mysqli_real_escape_string($link, $city);
$link ist die datenbank verbindung. Die habe ich ja nicht, den die kommt ja erst später. und das würde keinen sinn machen. $city ist eigentlich eine feste größe die unabhängig von sonstigen werten hier durch einen wert ergänzt wird.
Ich brauche aber doch nur den get wert. Miuss ich die datenbank verbindung vorher machen. aber das ist ja eigentlich blödsinn.
Mein neuster versuch ist also dieser
PHP-Code:
$suchwort = mysqli_real_escape_string ($_GET['search'], $suchwort);
Aktuelle felermeldung
Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, string given in C:\WTServer\WWW\suche\index.php on line 27
Immer hin nur noch einfehlender Parameter . Also Ich glaube das dies an der get Übergabe liegt . Nur ich habe kein ahnung wieso.
gruss aus Kaiserslautern
Micha
|
LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/105932-suchscript-funktioniert-nicht.html
|
Erstellt von |
For |
Type |
Datum |
php Suchscript funktioniert nicht |
This thread |
Refback |
02-04-2017 12:48 |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Thema bewerten |
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|