Fehler in Abfrageskript

Fehler in Abfrageskript

am 15.02.2007 14:09:12 von g.thaler

Ich mache soeben meine ersten Schritte mit MySQL und PHP.

Ich habe auf meinem Webspace eine Tabelle "personen" angelegt, in deren
einen Spalte (gehalt) die Gehälter der Personen angeführt sind. Skript
uf07.php liefert alle Datensätze der Tabelle; Funktioniert.

Skript: http://thaler.byto.de/galileo/uf07.php
Quelltext: http://thaler.byto.de/galileo/uf07.txt

Nun will ich in einem Formular den User die Kriterien festlegen lassen,
mit denen die Abfrage ausgeführt wird. Der ser kann in einem Formular:
http://thaler.byto.de/galileo/uf08.html

Ober- und Untergrenze der Gehälter festlegen. In einem zweiten Skript:
http://thaler.byto.de/galileo/uf08.php

Soll die Abfrage ausgeführt und die Datensätze sollen angezeigt werden.
Ich bekomme aber imer eine Fehlermeldung:
"Warning: mysql_num_rows(): supplied argument is not a valid MySQL
result resource in /home/thaler/public_html/galileo/uf08.php on line 27
keine passenden Datensätze gefunden"

Dennoch kann ich in uf08.php keinen Fehler feststellen. Ich bin
überzeugt, dass ich irgend einen trivialen Fehler übersehe, aber welchen?

Kann mir bitte jemand weiterhelfen?

lg Günter

Re: Fehler in Abfrageskript

am 15.02.2007 15:01:18 von Hans-Peter Nicasius

On 15 Feb., 14:09, Günter Thaler wrote:
> Ich mache soeben meine ersten Schritte mit MySQL und PHP.
>
Da hab ich auch vor ein paar Wochen gestanden :-))

> Kann mir bitte jemand weiterhelfen?

Ich versuche es mal: Die Fehlermeldung kenne ich auch. Ist, wenn die
Query keine Datensätze findet. Ich vermute daher, das Deine Quere
falsch ist. Kannst Du sie mal im Quelltext hier veröffentlichen. Dann
könnte man sie auch sehen. Nur das PHP als Link bringt leider nix, da
dann das PHP ja direkt ausgeführt wird.

Bis dahin
Charly

Re: Fehler in Abfrageskript

am 15.02.2007 15:04:37 von g.thaler

Hans-Peter Nicasius schrieb:
>Kannst Du sie mal im Quelltext hier veröffentlichen.

Sorry, das hatte ich vor und leider vergessen:

http://thaler.byto.de/galileo/uf08.txt

lg Günter und danke im Voraus!

Re: Fehler in Abfrageskript

am 15.02.2007 15:11:03 von Niels Braczek

Hans-Peter Nicasius schrieb:

> Ich versuche es mal: Die Fehlermeldung kenne ich auch. Ist, wenn die
> Query keine Datensätze findet.

Das ist falsch. Auch wenn keine Datensätze vorhanden sind, ist die
Ressource gültig.

> Ich vermute daher, das Deine Query falsch ist.

Das schon eher. Eine entsprechende Fehlerbehandlung würde MySQL
erlauben, das Problem zu benennen.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Fehler in Abfrageskript

am 15.02.2007 15:27:13 von Niels Braczek

Günter Thaler schrieb:
> Hans-Peter Nicasius schrieb:

>>Kannst Du sie mal im Quelltext hier veröffentlichen.
>=20
> Sorry, das hatte ich vor und leider vergessen:

Das kurze Stück hättest du geren direkt hierher posten können.

> > $host =3D 'localhost';
> $user =3D 'mein_username';
> $password =3D 'mein_passwort';
> $db =3D mysql_connect($host, $user, $password);
>
> $sqlab =3D "select name, gehalt from personen";
> $sqlab .=3D " where gehalt >=3D $untergrenze";
> $sqlab .=3D " and gehalt <=3D $obergrenze";

11.20. Warum funktionieren meine Formulare nicht?
http://www.php-faq.de/q/q-formular-register-globals.html

> $res =3D mysql_db_query("meine_db", $sqlab, $db);

mysql_db_query() ist schon ewig obsolete.
http://de3.php.net/manual/en/function.mysql-db-query.php

> $num =3D mysql_num_rows($res);
>
> if ($num==0)
> echo "keine passenden Datensätze gefunden";

Auch bei Einzeilern solltest du immer die geschweiften Klammern setzen.
Das vermeidet Probleme bei Erweiterungen des Skriptes.

if ( $num == 0 ) {
echo "keine passenden Datensätze gefunden";
}

> for ($i=3D0; $i<$num; $i++)
> {
> $nn =3D mysql_result($res, $i, "name");
> $ge =3D mysql_result($res, $i, "gehalt");
> echo "$nn, $ge
";
> }
>
> mysql_close($db);
> ?>

Offensichtlich verwendest du ein Buch, das hoffnungslos veraltet ist.
Das Skript sollte mindestens so aussehen:

$link =3D mysql_connect( 'host', 'user', 'pass' )
or die( mysql_error() );
mysql_select_db( 'dbname', $link)
or die( mysql_error() );

$untergrenze =3D intval( $_REQUEST['untergrenze'] );
$obergrenze =3D intval( $_REQUEST['obergrenze'] );

$sql =3D "SELECT name, gehalt FROM personen";
$sql.=3D " WHERE gehalt BETWEEN $untergrenze AND $obergrenze";

$result =3D mysql_query( $sql, $link )
or die( $sql.'
'.mysql_error() );

if ( mysql_num_rows( $result ) == 0 ) {
echo "keine passenden Datensätze gefunden";
}
while ( $row =3D mysql_fetch_assoc( $result ) ) {
echo $row['name'], ', ', $row['gehalt'], '
';
}

mysql_free_result($result);
?>

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Fehler in Abfrageskript

am 15.02.2007 15:27:19 von Joerg Behrens

Günter Thaler schrieb:
> Hans-Peter Nicasius schrieb:
>> Kannst Du sie mal im Quelltext hier veröffentlichen.
>
> Sorry, das hatte ich vor und leider vergessen:
>
> http://thaler.byto.de/galileo/uf08.txt
>
> lg Günter und danke im Voraus!

Zeige uns echo $sqlab; und benenne mal den Spaltentyp welchen du fuer
gehalt genommen hast. bzw. was $untergrenze/$bergrenze enthalten.

Tipp:
Im SQL, und nicht nur da, stehen strings in Hochkommas.

Noch ein Tipp:
Mache dich mit sprintf vertraut
$query = sprintf("SELECT foo FROM tabelle WHERE foo = '%s' AND id = %d",
mysql_real_escape_string('bar'),
123
);

Gruss
Joerg

--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de

Re: Fehler in Abfrageskript

am 15.02.2007 15:32:01 von g.thaler

>> Ich vermute daher, das Deine Query falsch ist.
>
> Das schon eher. Eine entsprechende Fehlerbehandlung würde MySQL
> erlauben, das Problem zu benennen.

Wenn ich in PHPMyAdmin das Statement:
--------------------
SELECT name, gehalt
FROM `personen`
WHERE gehalt >=100
AND gehalt <=5000
LIMIT 0 , 30
-------------------

eingebe, erhalte ich brav die Datensätze.
Gebe ich im Formular 100 als Untergrenze und 5000 als Obergrenze ein,
findet er keinen Datensatz.

Das spricht doch dafür, dass an der SQL-Anweisung nix falsch ist.
Also vermute ich irgend ein Problem im PHP-Quelltext.

lg unbd dennoch danke.

Günter

Re: Fehler in Abfrageskript

am 15.02.2007 15:39:05 von Claus Reibenstein

Günter Thaler schrieb:

> http://thaler.byto.de/galileo/uf08.txt

1.) Script _hier_ posten und nicht nur einen Link, damit wir es uns ohne
Medienbruch anschauen und gezielt Kommentare abgeben können.

2.) Fehlerprüfungen einbauen. Der eigentliche Fehler dürfte schon
deutlich früher passiert sein.

Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /

Re: Fehler in Abfrageskript

am 15.02.2007 15:44:46 von g.thaler

Niels Braczek schrieb:

> 11.20. Warum funktionieren meine Formulare nicht?
> http://www.php-faq.de/q/q-formular-register-globals.html

Dort steht geschrieben: "Seit PHP 4.2.0 wurde register_globals in der
php.ini per Default abgeschaltet. Die Option war dafür zuständig, dass
ein Parameter an das Script automatisch in eine entsprechend genannte
Variable kopiert wurde."

Heißt das Folgendes: bei register_globals auf ON kann ich den Wert eines
Eingabefeldes namens "xy" einfach mit der nirgends deklarierten
Variablen $xy ansprechen, und bei register_globals auf OFF geht das
nicht mehr? Verstehe ich das richtig? Dann wäre es mir klar, weshalb das
Beispiel nicht mehr funktioniert.


> Offensichtlich verwendest du ein Buch, das hoffnungslos veraltet ist.

Ja, das da: http://www.galileocomputing.de/openbook/php4/index.htm
Liest sich so gut, mag ich. Schade.


> Das Skript sollte mindestens so aussehen:
>
> > $link = mysql_connect( 'host', 'user', 'pass' )
> or die( mysql_error() );
> mysql_select_db( 'dbname', $link)
> or die( mysql_error() );
>
> $untergrenze = intval( $_REQUEST['untergrenze'] );
> $obergrenze = intval( $_REQUEST['obergrenze'] );
>
> $sql = "SELECT name, gehalt FROM personen";
> $sql.= " WHERE gehalt BETWEEN $untergrenze AND $obergrenze";
>
> $result = mysql_query( $sql, $link )
> or die( $sql.'
'.mysql_error() );
>
> if ( mysql_num_rows( $result ) == 0 ) {
> echo "keine passenden Datensätze gefunden";
> }
> while ( $row = mysql_fetch_assoc( $result ) ) {
> echo $row['name'], ', ', $row['gehalt'], '
';
> }
>
> mysql_free_result($result);
> ?>

Danke! Werde ich studieren und ausprobieren.

lg Günter

Re: Fehler in Abfrageskript

am 15.02.2007 16:01:51 von g.thaler

>
> Zeige uns echo $sqlab;

echo "$sqlab";

gibt aus:

select name, gehalt from personen where gehalt >= and gehalt <=

D.h., die Werte, die in die Eingabefelder eingegeben wurden, werden
nicht in die Variablen $untergrenze und $obergrenze übernommen.
Ich glaub,, das ist die Sache mit register_globals OFF.


> und benenne mal den Spaltentyp welchen du fuer
> gehalt genommen hast.

Spaltentyp ist double (10,2).


> bzw. was $untergrenze/$bergrenze enthalten.

Als Untergrenze habe ich 100 eingegeben, als Obergrenze 5000.


> Im SQL, und nicht nur da, stehen strings in Hochkommas.
Wo habe ich die vertgessen?

> Mache dich mit sprintf vertraut
> $query = sprintf("SELECT foo FROM tabelle WHERE foo = '%s' AND id = %d",
> mysql_real_escape_string('bar'),
> 123
> );

Danke, werde ich machen.

lg Günter

Re: Fehler in Abfrageskript

am 15.02.2007 16:02:04 von Niels Braczek

Günter Thaler schrieb:
> Niels Braczek schrieb:
>=20
>> 11.20. Warum funktionieren meine Formulare nicht?
>> http://www.php-faq.de/q/q-formular-register-globals.html
>=20
> Heißt das Folgendes: bei register_globals auf ON kann ich den Wert ei=
nes=20
> Eingabefeldes namens "xy" einfach mit der nirgends deklarierten=20
> Variablen $xy ansprechen, und bei register_globals auf OFF geht das=20
> nicht mehr? Verstehe ich das richtig? Dann wäre es mir klar, weshalb =
das=20
> Beispiel nicht mehr funktioniert.

Korrekt.

MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Fehler in Abfrageskript

am 15.02.2007 16:03:27 von Niels Braczek

Günter Thaler schrieb:
>>> Ich vermute daher, das Deine Query falsch ist.
>>=20
>> Das schon eher. Eine entsprechende Fehlerbehandlung würde MySQL
>> erlauben, das Problem zu benennen.

> Gebe ich im Formular 100 als Untergrenze und 5000 als Obergrenze ein,=20
> findet er keinen Datensatz.
>=20
> Das spricht doch dafür, dass an der SQL-Anweisung nix falsch ist.
> Also vermute ich irgend ein Problem im PHP-Quelltext.

Dein SQL-Statement lautet aber

> SELECT name, gehalt
> FROM `personen`
> WHERE gehalt >=3D
> AND gehalt <=3D
> LIMIT 0 , 30


MfG
Niels

--=20
| http://www.kolleg.de =B7 Das Portal der Kollegs in Deutschland |
| http://www.bsds.de =B7 BSDS Braczek Software- und DatenSysteme |
| Webdesign =B7 Webhosting =B7 e-Commerce =B7 Joomla! Content Management =
|
------------------------------------------------------------ ------

Re: Fehler in Abfrageskript

am 15.02.2007 16:04:57 von g.thaler

Niels Braczek schrieb:

> Korrekt.

Besten Dank, jetzt habe ich dazugelernt.

Günter

Re: Fehler in Abfrageskript

am 20.02.2007 22:43:57 von tortured_soul

"Günter Thaler" schrieb im Newsbeitrag
news:45d45b78$0$23144$9b4e6d93@newsspool1.arcor-online.net.. .

Hallo Günter,

> Ich mache soeben meine ersten Schritte mit MySQL und PHP.

;-)


> Soll die Abfrage ausgeführt und die Datensätze sollen angezeigt werden.
> Ich bekomme aber imer eine Fehlermeldung:
> "Warning: mysql_num_rows(): supplied argument is not a valid MySQL result
> resource in /home/thaler/public_html/galileo/uf08.php on line 27
> keine passenden Datensätze gefunden"

Fehler im SQL-Statement oder keine Verbindung zum DB-Server, aber das hätte
sich dann schon vorher gemeldet. Also SQL-Code angucken.

> Dennoch kann ich in uf08.php keinen Fehler feststellen. Ich bin überzeugt,
> dass ich irgend einen trivialen Fehler übersehe, aber welchen?

Die Sache mit den Superglobals wurde Dir ja schon gesagt. Außerdem solltest
Du besser mysql_fetch_array oder mysql_fetch_assoc in der Schleife
verwenden. Ich meine auch, dass bei $sqlab ein Semikolon zuviel war. Darüber
hinaus solltest Du Dich mit der Absicherung gegen SQL-Injections
beschäftigen, sobald Du Benutzereingaben im SQL-Code verwendest. Stichworte
magic_quotes_gpc, mysql_real_escape_string, addslashes, stripslashes etc.

> Kann mir bitte jemand weiterhelfen?

Das hoffe ich doch ;-)

Ich glaube, die FAQ zur Newsgroup (http://www.php-faq.de) ist vielfach
besser als das Dir vorliegende Buch. Ich kenn die Schwarte und fand sie
nicht besonders gut. Im Zweifelsfall schau ins PHP-Manual, im Buch waren
manche Fehler, soweit ich mich entsinne.

MfG

Daniel