php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 21-10-2007, 20:02
LDragon
 Newbie
Links : Onlinestatus : LDragon ist offline
Registriert seit: Oct 2007
Beiträge: 7
LDragon ist zur Zeit noch ein unbeschriebenes Blatt
Standard Abfrage und ausgabe

ich hoff mal ich bin im richtigen thread.
Ich habe mir eine SQL Datenbank erstellt. Die Datenbank heißt "datenbank" und die Tabelle "tabelle". Zwei Spalten, Name, Vorname. Jetzt versche ich schon stundenlang eine einfache Suchmaske und Ergbebnisseite zu erstellen. Ob mir da jemand helfen kann. (die Verbindung zur Datenbank funktioniert)

die Suchmaske

PHP-Code:
<?

mysql_connect
("localhost","root","");
mysql_select_db("Name");
?>


<head>
<title></title>
</head>

<body>

<form name="search" action="ergebnis.php" method="POST">

<input type="text" name="objekt" size="100" />
<p>
<p>
<input name="submit" type="submit" value="&gt;&gt;&nbsp;Finden&nbsp;&lt;&lt;" />

</Body>
</HTML>
-------------------------------------------------------------

und hier die Ergebnisseite

PHP-Code:
<?php

error_reporting
(E_ALL);
mysql_connect("localhost","root","") OR die("Keine Verbindung möglich: " mysql_error());
mysql_select_db("datenbank") OR die(mysql_error());
$sql ="SELECT * FROM tabelle WHERE Name LIKE '%' " ;
$result mysql_query($sql) OR die(mysql_error());
?>



<head>
<title></title>
</head>

<body>

<table width="80%" border="1">
<tr>
<td>ID</td>
<td>Name</td>
<td>Vorname</td>
</tr>

<?php
while ($datensatz mysql_fetch_array($result))
{

echo 
"<td>",$datensatz['id'],"</td>";
echo 
"<td>",$datensatz['Name'],"</td>";
echo 
"<td>",$datensatz['Vorname'],"</td>";
}
?>
</table>

</body>
</html>
eine funktionierende korrektur wäre echt super. Blick da irgendwie nicht mehr durch (bekomme keine fehlermeldungen)
Mit Zitat antworten
  #2 (permalink)  
Alt 21-10-2007, 20:42
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Nach was willst du denn suchen? Ich würde deinen Input-Feldern in der Suchmaske aussagekräftigere Namen geben als name="objekt" z.B. name="name"

Dein Fehler liegt in der Abfrage:

PHP-Code:
$sql ="SELECT * FROM tabelle WHERE Name LIKE '%' " 
Mit dieser Abfrage gibst du alle Datensätze aus, weil er jeden Datensatz sucht, der beliebige Zeichen (%) enthält.

Wenn du den Namen des Input-Feldes so geändert hast, wie ich es dir vorgeschlagen habe, dann müsste die Abfrage wie folgt aussehen:

PHP-Code:
$sql "SELECT * FROM tabelle WHERE Name = '".$_POST["name"]."'"
oder

PHP-Code:
$sql "SELECT * FROM tabelle WHERE Name LIKE '%".$_POST["name"]."%'"
Bei der zweiten Vriante wird jeder Datensatz angezeigt, in welchem der eingegebene String ins Input-Feld "name" im Attribut "Name" vorkommt. Dabei ist egal, ob davor, danach oder weder noch etwas steht.
Mit Zitat antworten
  #3 (permalink)  
Alt 21-10-2007, 21:35
LDragon
 Newbie
Links : Onlinestatus : LDragon ist offline
Registriert seit: Oct 2007
Beiträge: 7
LDragon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

echt genial pascal007,

ich sitze hier stundenlang herum und du machst das ding in ein paar sekunden. vielen dank schonmal

was wäre wenn ich jetzt ein zweites such-attribut im suchformular hinzufügen wöllte, zb. noch den "nachnamen" dann muss ich doch bestimmt in der zeile

PHP-Code:
$sql "SELECT * FROM tabelle WHERE Name LIKE '%".$_POST["name"]."%'"
auch noch was einfügen
Mit Zitat antworten
  #4 (permalink)  
Alt 21-10-2007, 21:49
deathcakeman
 Registrierter Benutzer
Links : Onlinestatus : deathcakeman ist offline
Registriert seit: Aug 2006
Beiträge: 134
deathcakeman ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Du solltest dir mal das anschauen: SQL-Injektion.
__________________
*blubb*
Mit Zitat antworten
  #5 (permalink)  
Alt 21-10-2007, 21:55
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Ja, dann musst du das halt auch noch in die MySQl-Abfrage schreiben:

PHP-Code:
$sql "SELECT * FROM tabelle WHERE Name LIKE '%".$_POST["name"]."%' AND Nachname LIKE '%".$_POST["nachname"]."%'"
Es würde dir sicherlich nicht schaden, dich mal ein bisschen in die Grundlagen von MySQL einzuarbeiten .

Zitat:
Original geschrieben von deathcakeman
Du solltest dir mal das anschauen: SQL-Injektion.
Ja das ist natürlich auch noch ein Punkt, aber den habe ich bei einem solch einfachen Beispiel einfachheitshalber weggelassen.

Wenn man es sicher machen will, dann müsste man obige Abfrage folgendermassen umgestalten, da man sonst fremden Code einschleusen könnte:

PHP-Code:
$name strip_tags($_POST["name"]); // Entfernen von PHP- und HTML-Code mittels strip_tags()
$nachname strip_tags($_POST["nachname"]); // Entfernen von PHP- und HTML-Code mittels strip_tags()

$sql "SELECT * FROM tabelle WHERE Name LIKE '%$name%' AND Nachname LIKE '%$nachname%'"

Geändert von pascal007 (21-10-2007 um 22:00 Uhr)
Mit Zitat antworten
  #6 (permalink)  
Alt 21-10-2007, 22:03
TroX
 Registrierter Benutzer
Links : Onlinestatus : TroX ist offline
Registriert seit: Dec 2006
Ort: Schweiz
Beiträge: 156
TroX ist zur Zeit noch ein unbeschriebenes Blatt
Standard

*hust*
mysql_real_escape_string
__________________
Freedom is a state of mind. Not a state in which we live.

troxdev.ch | animefieber
Mit Zitat antworten
  #7 (permalink)  
Alt 21-10-2007, 22:20
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von TroX
*hust*
mysql_real_escape_string
Geht natürlich auch .
Mit Zitat antworten
  #8 (permalink)  
Alt 21-10-2007, 22:24
deathcakeman
 Registrierter Benutzer
Links : Onlinestatus : deathcakeman ist offline
Registriert seit: Aug 2006
Beiträge: 134
deathcakeman ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von pascal007
Geht natürlich auch .
Du solltest das auch weglassen, weil deine Option nicht gegen SQL-Injection vorgeht
__________________
*blubb*
Mit Zitat antworten
  #9 (permalink)  
Alt 21-10-2007, 22:25
LDragon
 Newbie
Links : Onlinestatus : LDragon ist offline
Registriert seit: Oct 2007
Beiträge: 7
LDragon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

ja es scheint zu klappen, danke euch jungs

werde mich auch mehr damit befassen
Mit Zitat antworten
  #10 (permalink)  
Alt 21-10-2007, 22:49
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Zitat:
Original geschrieben von deathcakeman
Du solltest das auch weglassen, weil deine Option nicht gegen SQL-Injection vorgeht
Okay, danke für den Hinweis, ich habe bis dato immer gemeint, beides erzielt die Wirkung. Hab ich mich offenbar getäuscht .
Mit Zitat antworten
  #11 (permalink)  
Alt 22-10-2007, 00:29
LDragon
 Newbie
Links : Onlinestatus : LDragon ist offline
Registriert seit: Oct 2007
Beiträge: 7
LDragon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

da wäre vll noch ein kleinigkeit, ich weiß das nervt, hätte ich ne seite
mit vielen bsp. würde ich versuchen es selber herauszufinden, aber
fragen kostet ja nix

wenn ich so eine ausgabe haben möchte wie müsste ich das machen

id 1
name schmidt
vorname hans

id 3
name meier
vorname stefan

usw.


also das quasi das ergebnis in einer vorgefertigten maske erscheint
und die dann so oft untereinander angezeigt wird wie man
ergebnisse bekommt. (mit den überschriften, der formatierung usw.)

ist das überhaupt machbar

ich habe das hier versucht, damit bekomme ich zwar die ergebnisse
an die stelle wo sie hin sollen, aber es wird nur jeweils eins angezeigt, was auch logisch ist:

PHP-Code:
$ausgabe "Einträge:<br />\n";
    
$row mysql_fetch_assoc($result);

if(
is_array($row))
{
foreach(
$row as $key => $val) {
$ausgabe .= $key " : " $val "<br />";
}
}

?> 
angezeigt wird mit bsp
PHP-Code:
<? echo $row['Name'?>
für hilfreiches wissen wäre ich sehr dankbar
Mit Zitat antworten
  #12 (permalink)  
Alt 22-10-2007, 06:15
pascal007
 Registrierter Benutzer
Links : Onlinestatus : pascal007 ist offline
Registriert seit: Jul 2006
Beiträge: 257
pascal007 ist zur Zeit noch ein unbeschriebenes Blatt
pascal007 eine Nachricht über ICQ schicken
Standard

Da hattest du es doch schon mal fast gehabt . Nur sollte man vllt. Punkte und keine Kommas nehment beim zusammenhängen der Strings und Variabeln und ich würde mysql_fetch_object() nehmen (dann fallen auch die Punkte weg):

PHP-Code:
<?php
while ($datensatz mysql_fetch_object($result))
{

echo 
"<td>$datensatz->id</td>";
echo 
"<td>$datensatz->Name</td>";
echo 
"<td>$datensatz->Vorname</td>";
}
?>
Les dir mal diese Seite komplett durch. Danach hast du dir wenigstens mal die Grundlagen zu Gemüte geführt . Und das ist ja nicht so viel zum durcharbeiten und sollte auch Antwort auf solche Fragen wie du sie oben gestellt hast geben.

Geändert von pascal007 (22-10-2007 um 06:18 Uhr)
Mit Zitat antworten
  #13 (permalink)  
Alt 22-10-2007, 13:57
LDragon
 Newbie
Links : Onlinestatus : LDragon ist offline
Registriert seit: Oct 2007
Beiträge: 7
LDragon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

eine gute seite für anfänger wie mich, gleich bei den FAVs abgespeichert

habe jetzt nur so zum testen oben

PHP-Code:
$anzahl count($result); 
eingegeben und dann vor die ausgabe

PHP-Code:
<?php echo $anzahl?>
witziger weise wird da immer nur 1 angezeigt, obwohl ich mehrere ergebnisse bekommen müsste. und zwischen

PHP-Code:
<?php
while ($datensatz mysql_fetch_object($result))
{

echo 
"<td>$datensatz->id</td>";
echo 
"<td>$datensatz->Name</td>";
echo 
"<td>$datensatz->Vorname</td>";
}
?>
und

PHP-Code:
 <?php
    
while ($datensatz mysql_fetch_array($result))
    {

    echo 
"<td>",$datensatz['id'],"</td>";
    echo 
"<td>",$datensatz['Name'],"</td>";
    echo 
"<td>",$datensatz['Vorname'],"</td>";
    
    } 
?>
habe ich bis auf die vereinfachte schreibweise keinen unterschied feststellen können.

auf der seite hab ich dann

PHP-Code:
<?php
  $abfrage 
"SELECT url, urlname FROM links";
  
$ergebnis mysql_query($abfrage);
  while(
$row mysql_fetch_object($ergebnis))
    {
    echo 
$row->url;
    }
  
?>
gesehen, mit dem man dann alle ergebnisse an beliebige stellen bringen kann. Nur habe ich statt url ein * stehen, da bei mir alle Spalten angesprochen werden, was muss dann hinter das ->
die ergebnisse werden dann wieder mit "row und spalte" ausgegeben, nur wenn ich dann wieder nur ein ergebnis bekomme, funktioniert zwar die abfrage, nützt dann aber nix, da ich eigentlich mehrere ergebnisse untereinender bekommen müsste.

(die halbe nacht wach, und jetzt schon wieder vor dem ding)
Mit Zitat antworten
  #14 (permalink)  
Alt 22-10-2007, 14:04
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
habe jetzt nur so zum testen oben
$anzahl = count($result);
eingegeben und dann vor die ausgabe
<?php echo $anzahl?>
witziger weise wird da immer nur 1 angezeigt, obwohl ich mehrere ergebnisse bekommen müsste. und zwischen
Schade, dass $result KEIN ARRAY ist.

Zitat:
habe ich bis auf die vereinfachte schreibweise keinen unterschied feststellen können.
Na. Unterschiede gibts schon. Nur sollte man Strings und Variablen schon richtig trennen. Vorzugsweise mit Punkten statt Kommata. Ob du jetzt Arrays oder Objekte verwendest, ist egal. Wichtig ist nur, dass du richtig drauf zugreifst.

Das Problem im letzten Absatz deines Posting verstehe ich nicht.
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #15 (permalink)  
Alt 22-10-2007, 16:30
LDragon
 Newbie
Links : Onlinestatus : LDragon ist offline
Registriert seit: Oct 2007
Beiträge: 7
LDragon ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@TobiaZ wegen dem letzten absatz (warum einfach wenn ich das auch kompliziert erklären kann^^)

also die momentane ausgabe bsp.
__________________
ID | Name | Vorname |
----------------------------------------------------------------
1 |schulze |hans |2 |meier |peter |3| schmidt |karl | (usw.)
----------------------------------------------------------------
soll ne tabelle darstellen^^, die ausgabe stimmt, nur optisch geht das nun garnicht.

so schon eher,
bei einen ergebnis
________
ID |1|
Name | schulze |
Vorname| hans|

bei zwei ergebnissen

___________________
ID |1 |
Name | schulze |
Vorname| hans |
------------------------------
__________________
ID |2|
Name | schulze|
Vorname| gustav|
-------------------------------
usw.
also die tabelle pro ergebnis untereinander dargestellt, inkl. überschriften usw. Wenn ich das versuche, bekomme ich leider immer nur ein suchergebnis. da gibts doch bestimmt einen trick womit die tabelle dann quasi untereinander kopiert wird.

lässt sich mit worten blöd erklären
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:04 Uhr.