PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : daten einzelend



localhost
28-02-2003, 17:09
Ich hab in meinen tabelen daten gespeichert und mit id´s versehen wie kann ich die daten einzelen per id oder s ausgeben ??
Im momend kann ich das nur mit allen machen.

Jana
28-02-2003, 17:58
Stell einfach die Abfrage so, daß nur die spezielle Row mit der gesuchten id ausgegeben wird.


$query_1="
select
nachname,
vorname
from trainer
where id like 'gesuchter Wert' // where id like '%gesuchter Wert%'
";

$result_1 = $db->query($query_1);
if (DB::isError($result_1)) { die($result_1->getMessage()); }

localhost
28-02-2003, 20:07
Aber wie kann cih so die daten einzelend ausgeben ??




<?

echo "<table width=750 border=0 align=center cellpadding=1 cellspacing=1 bgcolor=000000>";
echo "<tr>";
echo "<td bgcolor=FFFFFF colspan=2><B>G&auml;stebuch</b></td>";
echo "</tr>";
echo "</table>";

echo "<br>";

$abfrage = "SELECT * FROM gb";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
nl2br($code);

echo "<table width=750 border=0 align=center cellpadding=1 cellspacing=1 bgcolor=000000>";

echo "<td bgcolor=FFFFFF colspan=2>";
echo "<center><b>"; echo $row->titel;
echo "</td>";
echo "</tr>";

echo "<tr>";
echo "<td bgcolor=FFFFFF valign=top width=115>";
echo "<b>AUTOR:</B><br><a href=mailto:$row->mail>$row->name</a>";
echo "</td>";
echo "<td bgcolor=FFFFFF width=635>";
echo $row->blabla;
echo "</td>";
echo "</tr>";

echo "<tr>";
echo "<td bgcolor=FFFFFF>";
echo $row->time;
echo "</td>";
echo "<td bgcolor=FFFFFF>";
echo "Beitrag "; echo "<font color=E46600>#"; echo $row->id;
echo "</td>";
echo "</tr>";

echo "</table>";

echo "<table width=750 border=0 align=center cellpadding=0 cellspacing=0 bgcolor=CCCCCC>";
echo "<tr>";
echo "<td bgcolor=CCCCCC>";
echo "_";
echo "</td>";
echo "</tr>";
echo "</table>";
}
?>

Das da habe cih nicht hinbekommen

Jana
01-03-2003, 07:07
Ganz verstanden habe ich immer noch nicht was du mit meinst mit:

Aber wie kann cih so die daten einzelend ausgeben ??

Ich habe die Datei DB.php verwendet, die du aus dem pear-Paket
herunterladen mußt:
http://pear.php.net/package-info.php?pacid=46
Die meisten Server unterstützen paer. Pear ist mittlerweise fast offiziell.

Dieser Code schreibt die Datensätze in einer Liste einzeln untereinander.


<?php
require("./h.php");
require("DB.php");
$dsn = "mysql://derbenutzer:mypasswort@localhost/meinedatenbank";
$db = DB::connect($dsn);
if (DB::isError($db)) { die ($db->getMessage()); }


print "<div id=\"lay100\" class=\"lay100\">\n";

$query_1 = "select
id,
Nachname,
Vorname,
PLZ,
Ort
from trainer
order by id
";


$result = $db->query($query_1);
if (DB::isError($result_1)) { die($result_1->getMessage()); }


while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
print "<table>";
foreach ($row as $field => $value) {
print "<tr><td width=\"100\" class='lay200a'>$field</td><td class='lay200b'>$value</td></tr>\n";
}
print "</table>";
print "<hr>\n";
}


print "</div>\n";

?>

</body>
</html>

Ich habe leider keine Zeit mich durch deine Tabelle durchzukämpfen.

localhost
01-03-2003, 14:06
hä also cih klaube das da ist was anders was ich meine.



<?

if($id) {

echo "<table width=750 border=0 align=center cellpadding=1 cellspacing=1 bgcolor=000000>";
echo "<tr>";
echo "<td bgcolor=FFFFFF colspan=2><B>Gästebuch</b></td>";
echo "</tr>";
echo "</table>";

echo "<br>";

$abfrage = "SELECT * FROM gb WHERE id = '$id' ";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
nl2br($code);

echo "<table width=750 border=0 align=center cellpadding=1 cellspacing=1 bgcolor=000000>";

echo "<td bgcolor=FFFFFF colspan=2>";
echo "<center><b>"; echo $row->titel;
echo "</td>";
echo "</tr>";

echo "<tr>";
echo "<td bgcolor=FFFFFF valign=top width=115>";
echo "<b>AUTOR:</B><br><a href=mailto:$row->mail>$row->name</a>";
echo "</td>";
echo "<td bgcolor=FFFFFF width=635>";
echo $row->blabla;
echo "</td>";
echo "</tr>";

echo "<tr>";
echo "<td bgcolor=FFFFFF>";
echo $row->time;
echo "</td>";
echo "<td bgcolor=FFFFFF>";
echo "Beitrag "; echo "<font color=E46600>#"; echo $row->id;
echo "</td>";
echo "</tr>";

echo "</table>";

echo "<table width=750 border=0 align=center cellpadding=0 cellspacing=0 bgcolor=CCCCCC>";
echo "<tr>";
echo "<td bgcolor=CCCCCC>";
echo " ";
echo "</td>";
echo "</tr>";
echo "</table>";
}

}

else {
dein code
}

?>


so ungefer müsste das gehten


aber

da bekomme ich eine Fehler.
192.168.1.101/?m=datei=1 <-- dabei
Warning: Failed opening 'datei=1' for inclusion (include_path='.:/usr/share/pear') in /temp/www/index.php on line 36

192.168.1.101/?m=datei <-- dabei
Parse error: parse error in /temp/www/datei on line 58

Jana
01-03-2003, 16:03
Dein Teperlatein find ich nicht halb so komisch wie du.

Hier die etwas gekürzte Form deines Codes.
Er läuft bei mit einwandfrei. Die Tabelle sieht etwas eigenartig aus.
Das Ergebnis scheint aber das gleiche zu sein wie bei mir.
Ich benenne den Beitrag nämlich nicht id, sondern Beitrag, damit spar ich mir das
manuelle Schreiben des Wortes "Beitrag" in der Tabelle. Das macht das Script automatisch.
Untersuch mal deine Datenbank und die dazugehörige Tabelle; da oder in der Datenbankverbindung muß der Fehler liegen.


<?php
require("./header.php");
require("DB.php");
require("./connect.php");

$db = DB::connect($dsn);
if (DB::isError($db)) { die ($db->getMessage()); }

print "<div id=\"lay100\" class=\"lay100\">\n";
$abfrage = "SELECT * FROM trainer";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis)) {

echo "<table>";
echo "<td colspan=2>";
echo ""; echo $row->Vorname;
echo "</td></tr>";
echo "<tr><td>";
echo "<b>AUTOR:</B><br>$row->Nachname";
echo "</td><td>";
echo $row->email;
echo "</td></tr>";
echo "<tr><td>";
echo $row->time;
echo "</td><td>";
echo "Beitrag "; echo $row->id;
echo "</td></tr>";
echo "</table>";
}

print "</div>\n";

?>

</body>
</html>

localhost
01-03-2003, 17:07
include("mysql.inc.php"); <.--- das steht im index.php

das ist mysql.inc.php
<?
mysql_connect("localhost","root","passwd") or die ("Keine Verbindung moeglich");
mysql_select_db("db_tabele") or die ("Die Datenbank existiert nicht");
?>

in der test test das



<?

if($id) {

echo "<table width=750 border=0 align=center cellpadding=1 cellspacing=1 bgcolor=000000>";
echo "<tr>";
echo "<td bgcolor=FFFFFF colspan=2><B>Gästebuch</b></td>";
echo "</tr>";
echo "</table>";

echo "<br>";

$abfrage = "SELECT * FROM gb WHERE id = '$id' ";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
nl2br($code);

echo "<table width=750 border=0 align=center cellpadding=1 cellspacing=1 bgcolor=000000>";

echo "<td bgcolor=FFFFFF colspan=2>";
echo "<center><b>"; echo $row->titel;
echo "</td>";
echo "</tr>";

echo "<tr>";
echo "<td bgcolor=FFFFFF valign=top width=115>";
echo "<b>AUTOR:</B><br><a href=mailto:$row->mail>$row->name</a>";
echo "</td>";
echo "<td bgcolor=FFFFFF width=635>";
echo $row->blabla;
echo "</td>";
echo "</tr>";

echo "<tr>";
echo "<td bgcolor=FFFFFF>";
echo $row->time;
echo "</td>";
echo "<td bgcolor=FFFFFF>";
echo "Beitrag "; echo "<font color=E46600>#"; echo $row->id;
echo "</td>";
echo "</tr>";

echo "</table>";

echo "<table width=750 border=0 align=center cellpadding=0 cellspacing=0 bgcolor=CCCCCC>";
echo "<tr>";
echo "<td bgcolor=CCCCCC>";
echo " ";
echo "</td>";
echo "</tr>";
echo "</table>";
}

}

else {
dein code
}

?>


und aufrufen tuhe ich das so

http://192.168.1.101/?m=test <- dabei Parse error: parse error in /temp/www/test on line 58

http://192.168.1.101/?m=test?id=1 <-- dabie Warning: Failed opening 'test?id=1' for inclusion (include_path='.:/usr/share/pear') in /temp/www/index.php on line 37

Jana
01-03-2003, 18:07
Mit der Datei
include("mysql.inc.php"); , die ich nicht sehe ist sehr wahrscheinlich etwas falsch.
Du bekommst keine Verbindung zur Datenbank.

Mein Code kann so nicht funktionieren.
Du brauchst unbedingt die DB.php Datei von pear, sonst geht gar nichts!

Probier folgende Verbindung:


<html>
<head>
<title>Test</title>
</head>
<body>

<div id="lay10">
<?php

$db=mysql_connect("localhost","root","mypass");
mysql_select_db(db_tabele);

$sqlab = "select * from gb";
$res=mysql_db_query("db_tabele", $sqlab);
$num=mysql_affected_rows();
if($num>0) {
print "Ich hab die Verbindung.";
}

?>
</div>
</body>
</html>

silvercross
03-03-2003, 08:43
hmm wieso brauche ich für eine mysql datenbank unbedingt pear ??
Ich habe das noch nie in meinem Leben verwendet und hab trotzdem die ein oder
andere Datenbank verbindung zusammengebracht ;)

mehlvogel
03-03-2003, 09:02
eben @silvercross. Man brauch Pear net. Ich finde die "normale" mySQL Schnittstelle von PHP schon gut genug. Man sollte auch dran denken, das net jeder Server Pear hat. Ausserdem weis ich gerne was die Funktionen / Klassen / Objekte machen, wenn ich sie benutze.

Der SQL Befehl für die Frage (bestimmte Reihen ausgeben) sähe so aus:



SELECT * FROM tabelle WHERE id='Wert'


Bei id's die als PRIMARY KEYS defniert sind, würd ich kein LIKE verwenden, dadurch wird das nur langsamer. Gebettet in PHP sähe das so aus:



$id = 1; // Oder was auch immer...
$query = "SELECT * FROM tabelle WHERE id='$id'";
$sql = mysql_query($query);
$result = mysql_fetch_array($sql);


Dann hast du die Reihe in dem Array $result. Das geht schneller und besser als diese zwei Seiten Pear Lösung. Vorrausgesetzt ist natürlich das die Datenbankverbindung besteht.

Jana
03-03-2003, 10:23
Ohne Pear geht es natürlich auch. Mein letztes Beispiel war lediglich eine Datenbankanbindung völlig ohne Pear. Der Rest hat nämlich funktioniert!

Aber es ist kein Problem sich die Pear-Klassen anzuschauen, da steht nämlich, was sie leisten.
Was machst du denn, wenn jemand folgendes macht?
http://de3.php.net/manual/de/security.database.php#security.database.sql-injection


Dank dem Mangel an Input Validierungen, und dem Verbinden zum Datenbankserver als ein Superuser oder jemand der Benutzer anlegen kann, kann ein Angreifer einen Superuser in Ihrer Datenbank anlegen. Beispiel 5-6. Die Ergebnisliste in mehrere Seiten aufsplitten ... und Superuser anlegen (PostgreSQL and MySQL)

$offset = argv[0]; // Vorsicht, keine Validierung des Input !
$query = "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";
// mit PostgreSQL
$result = pg_exec($conn, $query);
// mit MySQL
$result = mysql_query($query);


Normale Benutzer klicken auf die 'nächste' bzw. 'vorige' Links, wo $offset in der URL enthalten ist. Das Skript erwartet, dass die ankommende $offset einen Dezimalwert enthält. Ganz gleich, jemand versucht einzubrechen, indem er das folgende in einer urlencode()'d Form an die URL anhängt


// Im Fall von PostgreSQL
0;
insert into pg_shadow(usename,usesysid,usesuper,usecatupd,pass wd)
select 'crack', usesysid, 't','t','crack'
from pg_shadow where usename='postgres';
--

// Im Fall von MySQL
0;
UPDATE user SET Password=PASSWORD('crack') WHERE user='root';
FLUSH PRIVILEGES;



Wenn es passiert ist, würde ihm das Skript einen Zugriff als Superuser präsentieren.


Pear bietet den Vorteil, daß ich mich um Error-Messages und Leute sie versuchen zu hacken keine Gedanken machen muß.

Wo sind eigentlich die 2 Seiten Pear-Lösung?
Ich hab nur eine geschrieben.
Der jetzige Code ist doch um Klassen länger und alles per Hand geschrieben.
Wenn ich da Änderungen in der Ausgabe-Tabelle vornehme, darf ich alles wieder neu umschreiben und die Kopfzeilen bilden ein permanentes Problem.
Das ist bei Änderungen eine Katastrophe.
Um meinen hingegen Code braucht man sich absolut nicht mehr kümmern.

Gaert
03-03-2003, 11:02
Hallo!

Also über Pear lässt sich streiten... ich verwende es nicht, weil ich mir schon vor einiger Zeit meine eigenen Klassen für DB, Session, Auth, etc... gebaut habe.
Wer möchte kann mir ne PM schreiben und mal reinschauen.
Ich frage mich allerdings, wie du mit Hilfe von Pear SQL Injections verhindern willst. Schliesslich übergibst du bei Pear ja auch das komplette SQL Statement, dass du vorher aus deinen Variablen (die du hoffentlich gecheckt hast) zusammengebaut hast.

Aber um aufs Thema zurück zu kommen... is dem armen localhost jetzt eigentlich geholfen? Ich glaub dem raucht bei der diskussion hier der Kopf... vielleicht sollten aufhören hier soviel OT zu posten und das ganze auf ein neues Thema verlegen (ich glaub sogar wir hatten das schonmal oder Jana und Mehlvogel?)

Jana
03-03-2003, 12:41
Ok! Ich werde bei meinen Antworten Pear nicht mehr verwenden, wenn euch damit gedient ist.
Ich hätte gern deine Klassen ect. gern einmal gesehen.
Ich weiß aber nicht, was du unter PM verstehst.

Gaert
03-03-2003, 12:59
PM = Private Message, in der du mir deine E-Mail mitteilst.
Es verbietet dir keiner Pear zu verwenden (auch nicht in den Antworten), aber für so minifuzi SQL´s ist weniger oft mehr und auch für Anfänger besser verständlich (IMHO).

Gruß

Gaert