von DB einer Tabelle zwei Felder abfragen

von DB einer Tabelle zwei Felder abfragen

am 09.12.2006 23:35:38 von Steffen

Hallo NG

ich habe das Problem in meinen Beispiel, wo ich mit meiner Select-Anweisung
zwei Felder gleichzeitig abfragen will und das Ergebnis dann ausgebe.
Hier das Beispiel:


$variable=$HTTP_POST_VARS['anf'];

$db = mysql_connect(localhost, user, *****);

$sqlab = "select Nachname, Vorname from addr";
$sqlab .= " where Nachname like '$variable%' OR where Vorname like
'$variable%' ";

$res = mysql_db_query("meine1", $sqlab);
$num = mysql_num_rows($res);

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

for ($i=0; $i<$num; $i++)
{
$nn = mysql_result($res, $i, "Nachname");
$vn = mysql_result($res, $i, "Vorname");
echo "$nn, $vn
";
}

mysql_close($db);
?>

Jetzt bekomme ich in der Zeile wo steht: $num = mysql_num_rows($res); einen
Fehler.
Ich habe jetzt das Problem da ich noch sehr am Anfang mit PHP bin wie ich
die Zeile ergänzen muß um eine Funktion
des Scripts zu erreichen.
Währe sehr dankbar wenn mir da einer helfen könnte.
Danke im Vorraus!

Re: von DB einer Tabelle zwei Felder abfragen

am 10.12.2006 00:59:03 von Joerg Behrens

Steffen schrieb:
> Hallo NG
>
> ich habe das Problem in meinen Beispiel, wo ich mit meiner Select-Anweisung
> zwei Felder gleichzeitig abfragen will und das Ergebnis dann ausgebe.
> Hier das Beispiel:
>
> >
> $variable=$HTTP_POST_VARS['anf'];

Seit 4 Jahren gibts $_POST als Ersatz mit noch anderen Vorteilen als nur
der kuerzeren Schreibweise. Des Weiteren besteht die Gefahr das
HTTP_POST_VARS irgendwann mal entfaellt bzw. per CONFIG Option
abschalten kann.

> $db = mysql_connect(localhost, user, *****);
>
> $sqlab = "select Nachname, Vorname from addr";
> $sqlab .= " where Nachname like '$variable%' OR where Vorname like
> '$variable%' ";

SQL Injection, RegisterGlobals=OFF, fehlendes Escaping... usw.


> $res = mysql_db_query("meine1", $sqlab);

Diese Funktion ist "deprecated" und ist durch mysql_select_db und
mysql_query zu ersetzen.


> $num = mysql_num_rows($res);



Da du keinerlei Fehlerbehandlung hast bekommst du hier nicht mit das dir
vorherige Funktion einen Fehler lieferte. Verwende hier und auch schon
vorher mysql_error()


> if ($num==0)
> echo "keine passenden Datensätze gefunden";
>
> for ($i=0; $i<$num; $i++)
> {
> $nn = mysql_result($res, $i, "Nachname");
> $vn = mysql_result($res, $i, "Vorname");
> echo "$nn, $vn
";
> }


Hmmm... magst du dich nicht gleich mit mysql_fetch_assoc() anfreunden?


> mysql_close($db);
> ?>
>
> Jetzt bekomme ich in der Zeile wo steht: $num = mysql_num_rows($res); einen
> Fehler.
> Ich habe jetzt das Problem da ich noch sehr am Anfang mit PHP bin wie ich
> die Zeile ergänzen muß um eine Funktion
> des Scripts zu erreichen.

Du darfst uns die Fehlermeldungen welche PHP dir gibt auch
mitteilen..... am Wochende sind die Glaskugel alle andersweitig
beschaeftigt.

Am Scriptanfang error_reporting(E_ALL) wenn du Entwickelst hilft dir
auch bei anderen Problemen... welche dieses hier evtl. verursacht hat.

Gruss
Joerg

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

Re: von DB einer Tabelle zwei Felder abfragen

am 10.12.2006 10:31:13 von sk

Steffen schrieb:
> ich habe das Problem in meinen Beispiel, wo ich mit meiner Select-Anweisung
> zwei Felder gleichzeitig abfragen will und das Ergebnis dann ausgebe.
> Hier das Beispiel:

[ ... ] uraltes $php zeug entsorgt. Fang mal hier an:

mysql_connect("localhost","username","passwort");
mysql_select_db("meine1");
$variable=mysql_real_escape_string($_POST['anf']);
$q=mysql_query("SELECT nachname,vorname FROM addr WHERE vorname LIKE
'$variable%' OR vorname LIKE '$variable%' ");
echo mysql_error();
while ($r=myql_fetch_assoc($q)) {
echo "$r[vorname] $r[nachname]
";
}
?>

> Ich habe jetzt das Problem da ich noch sehr am Anfang mit PHP bin wie ich
> die Zeile ergänzen muß um eine Funktion des Scripts zu erreichen.

Besorge dir bitte Lesestoff aus diesem Jahrtausend. Es gibt PHP 5.2 und
MySql 5.x. Sonst ist das lernen umsonst.

Jörg

Re: von DB einer Tabelle zwei Felder abfragen

am 10.12.2006 14:39:11 von Niels Braczek

Jörg Singendonk schrieb:

Dein Vorschlag ist soweit ok (ich würde noch ein paar Leerzeichen
einstreuen). Zu folgenden zeilen ist jedoch etwas anzumerken:

> $q=3Dmysql_query("SELECT nachname,vorname FROM addr WHERE vorname LIKE
> '$variable%' OR vorname LIKE '$variable%' ");
> echo mysql_error();

Weise die Abfrage einer Variablen zu, damit du sie im Fehlerfalle
und/oder zur Kontrolle ausgeben kannst.

$sql =3D "SELECT nachname, vorname"
"\n FROM addr"
"\n WHERE vorname LIKE '$variable%'"
"\n OR vorname LIKE '$variable%'"
;

Die Ausgabe eine eventuellen Fehlermeldung sollte dem Fehlerfalle
vorbehalten sein.

$result =3D mysql_query( $sql );
if ( !$result ) {
// Fehlerbehandlung, mindestens:
echo $sql, '
', mysql_error();
}

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: von DB einer Tabelle zwei Felder abfragen

am 10.12.2006 17:17:20 von Claus Reibenstein

Joerg Behrens schrieb:

> Steffen schrieb:
¯¯¯¯¯¯¯

Bitte setze hier deinen vollen Realnamen ein, wenn Du möchtest, dass
auch ich Deine Postings zu Gesicht bekomme. Ansonsten schlägt mein
automatisches Realnamenplausibilitätsfilter auch weiterhin erbarmungslos zu.

>> ich habe das Problem in meinen Beispiel, wo ich mit meiner Select-Anweisung
>> zwei Felder gleichzeitig abfragen will und das Ergebnis dann ausgebe.

Also eine Standard-Aufgabe.

>> $sqlab = "select Nachname, Vorname from addr";
>> $sqlab .= " where Nachname like '$variable%' OR where Vorname like
>> '$variable%' ";

$sqlab = "select ..."
. " where ...";

Außerdem ist da ein "where" zu viel ...

>> $res = mysql_db_query("meine1", $sqlab);

.... was spätestens hier zu einem Fehler führt, den Du aber leider nicht
prüfst ...

>> $num = mysql_num_rows($res);

.... und deshalb hier auf die Nase fällst.

>> $nn = mysql_result($res, $i, "Nachname");
>> $vn = mysql_result($res, $i, "Vorname");
>
> Hmmm... magst du dich nicht gleich mit mysql_fetch_assoc() anfreunden?

Oder mit list().

>> Jetzt bekomme ich in der Zeile wo steht: $num = mysql_num_rows($res); einen
>> Fehler.

Bitte statt "einen Fehler" immer hinschreiben, _welchen_ Fehler Du denn
bekommen hast.

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

Re: von DB einer Tabelle zwei Felder abfragen

am 10.12.2006 22:37:21 von Gregor Kofler

Steffen meinte:

Das wirklich wichtige wurde dir schon gesagt.

> $sqlab = "select Nachname, Vorname from addr";
> $sqlab .= " where Nachname like '$variable%' OR where Vorname like
> '$variable%' ";

Das zweite "where" gehört entfernt.


Gregor



--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum

Re: von DB einer Tabelle zwei Felder abfragen

am 13.12.2006 20:06:07 von Steffen

Hallo Jörg

habe bei deinen Listing nur das Problem, das nur ein Feld abgefragt wird.
Wenn ich z.B. ein L eingebe und es gibt einen Vornamen und in einer anderen
Adresse einen Nachnamen der mit L anfängt, dann gibt er nur die eine Adresse
aus.
Bei meinen Listing kommen zwei Adressen.
Was könnte an deinen Listing fehlen, denn ich würde das schon gerne so
machen wie Du vorschlägst.
Danke im Voraus!

MfG
Steffen


"Jörg Singendonk" schrieb im Newsbeitrag
news:457bd3f9$0$5724$9b4e6d93@newsspool3.arcor-online.net...
> Steffen schrieb:
>> ich habe das Problem in meinen Beispiel, wo ich mit meiner
>> Select-Anweisung zwei Felder gleichzeitig abfragen will und das Ergebnis
>> dann ausgebe.
>> Hier das Beispiel:
>
> [ ... ] uraltes $php zeug entsorgt. Fang mal hier an:
>
> > mysql_connect("localhost","username","passwort");
> mysql_select_db("meine1");
> $variable=mysql_real_escape_string($_POST['anf']);
> $q=mysql_query("SELECT nachname,vorname FROM addr WHERE vorname LIKE
> '$variable%' OR vorname LIKE '$variable%' ");
> echo mysql_error();
> while ($r=myql_fetch_assoc($q)) {
> echo "$r[vorname] $r[nachname]
";
> }
> ?>
>
>> Ich habe jetzt das Problem da ich noch sehr am Anfang mit PHP bin wie ich
>> die Zeile ergänzen muß um eine Funktion des Scripts zu erreichen.
>
> Besorge dir bitte Lesestoff aus diesem Jahrtausend. Es gibt PHP 5.2 und
> MySql 5.x. Sonst ist das lernen umsonst.
>
> Jörg
>

------------------------------------------------------------ --------------------
Ich verwende die kostenlose Version von SPAMfighter,
die bei mir bis jetzt 510 Spammails entfernt hat.
Für private Anwender ist SPAMfighter völlig kostenlos!
Jetzt gratis testen: hier klicken.

Re: von DB einer Tabelle zwei Felder abfragen

am 13.12.2006 21:04:40 von Stefan Christ

Steffen wrote:

> Was könnte an deinen Listing fehlen, denn ich würde das schon gerne so
> machen wie Du vorschlägst.
> Danke im Voraus!

Da hat sich bei Jörg ein kleiner Flüchtigkeitsfehler eingeschlichen. In
seinem Statement fragt er beide Male die Spalte "vorname" ab.

Versuche es einfach einmal hiermit:

"SELECT nachname, vorname FROM addr WHERE nachname LIKE
'".$variable."%' OR vorname LIKE '".$variable."%'"

Auch wenn es komplizierter aussieht, ist es wesentlich sauberer, den
String so zusammenzubauen. Man kann zwar auch Variablen direkt in den
String schreiben, dies ist allerdings nicht sauber.

MFG
Stefan

Re: von DB einer Tabelle zwei Felder abfragen

am 13.12.2006 21:55:45 von Claus Reibenstein

Stefan Christ schrieb:

> "SELECT nachname, vorname FROM addr WHERE nachname LIKE
> '".$variable."%' OR vorname LIKE '".$variable."%'"

"SELECT nachname, vorname FROM addr WHERE nachname LIKE
'$variable%' OR vorname LIKE '$variable%'"

Halte ich für besser lesbar.

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

Re: von DB einer Tabelle zwei Felder abfragen

am 13.12.2006 23:09:38 von Niels Braczek

Stefan Christ schrieb:

> Man kann zwar auch Variablen direkt in den=20
> String schreiben, dies ist allerdings nicht sauber.

Was ist daran unsauber?

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 =
|
------------------------------------------------------------ ------