Antworten auf deine Fragen:
Neues Thema erstellen

suchformular auswahlliste abgleich mit mysql datenbank

buyas

Nicht mehr ganz neu hier

hi !
bin grad dabei bissl mit php und mysql umgehen zu lernen.
folgendes szenraio versuche ich grad umzusetzen:

es gibt eine auswahlliste, in der man bestimmte infos / kriterien auswählen kann, die dann mit der datenbank in mysql verglichen werden sollen und wenn identisch dann ausgegeben werden sollen -> und zwar wird nur nach ein paar von vielen kriterien gesucht und wenn diese übereinstimmen sollen aber alle infos des datensatzes ausgegeben werden.
habe es wie folgt versucht, aber scheinbar funktioniert der vergleich der daten gar nicht und es werden einfach nur ( fast ) alle daten der datenbank in einer tabelle ausgegeben ...

hier der code dazu:

PHP:
<?php
 
include('db_connect.inc.php');
 
$krit1 = $_POST["kritabfra1"];
$krit2 = $_POST["kritabfra2"];
$krit3 = $_POST["kritabfra3"];
$krit4 = $_POST["kritabfra4"];
$krit5 = $_POST["kritabfra5"];
$krit6 = $_POST["kritabfra6"];
$krit7 = $_POST["kritabfra7"];
$krit8 = $_POST["kritabfra8"];
$krit9 = $_POST["kritabfra9"];
 
$sql = "SELECT * FROM tabellenname";
$db_erg = mysql_query( $sql );
$zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC);
 
if($zeile['krit1'] = $krit1  and $zeile['krit2'] = $krit2  and $zeile['krit3'] = $krit3  and $zeile['krit4'] = $krit4 and $zeile['krit5'] = $krit5 ){
 
   echo '<table border="1">';
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
  echo "<tr>";
  echo "<td>". $zeile['krit1'] . "</td>";
  echo "<td>". $zeile['krit2'] . "</td>";
  echo "<td>". $zeile['krit3'] . "</td>";
  echo "<td>". $zeile['krit4'] . "</td>";
  echo "<td>". $zeile['krit5'] . "</td>";
  echo "<td>". $zeile['krit6'] . "</td>";
  echo "<td>". $zeile['krit7'] . "</td>";
  echo "<td>". $zeile['krit8'] . "</td>";
  echo "<td>". $zeile['krit9'] . "</td>";
  echo "</tr>";
} 
echo "</table>";
} else {
 
   echo "abgleich hat nicht geklappt";
}
mysql_free_result( $db_erg );
 
?>

kurze anmerkung noch:

krit1 etc. sind die feldnamen in der datenbank bzw tabelle
kritabfra1 etc. sind die select namen im html formular

hat jemand netterweise verbesserungsvorschläge ? das wäre super !!
vielen dank im voraus ..
 
Zuletzt bearbeitet:

AW: suchformular auswahlliste abgleich mit mysql datenbank

Bei Vergleichen gehört ein doppeltes "==" hin.
PHP:
if($zeile['krit1'] == $krit1
 
Zuletzt bearbeitet:

buyas

Nicht mehr ganz neu hier

AW: suchformular auswahlliste abgleich mit mysql datenbank

danke für den hinweis !
hab ich inzwischen schon gesehen und geändert, trotzdem funktioniert der vergleich nicht :( ..
 

Duddle

Posting-Frequenz: 14µHz

AW: suchformular auswahlliste abgleich mit mysql datenbank

Deine Logik ist seltsam. Du holst dir die erste Zeile (wobei "erste" bei unsortierten Tabellen nicht definiert ist) und nur wenn diese deinen Kriterien entspricht holst du die anderen Zeilen. Bist du sicher, dass du das möchtest? Willst du nicht eigentlich nur alle Zeilen holen, die deinen Kriterien entsprechen?

Falls ja, .


Duddle
 

buyas

Nicht mehr ganz neu hier

AW: suchformular auswahlliste abgleich mit mysql datenbank

hmm ja ..

ich hab das mal wie folgt geändert:

PHP:
<?php
 
include('db_connect.inc.php');
 
$krit1 = $_POST["kritabfra1"];
$krit2 = $_POST["kritabfra2"];
$krit3 = $_POST["kritabfra3"];
$krit4 = $_POST["kritabfra4"];
$krit5 = $_POST["kritabfra5"];
$krit6 = $_POST["kritabfra6"];
$krit7 = $_POST["kritabfra7"];
$krit8 = $_POST["kritabfra8"];
$krit9 = $_POST["kritabfra9"];
 
$sql = "SELECT * FROM tabellenname WHERE krit1=$krit1";
$db_erg = mysql_query( $sql );
 
 if ( ! $db_erg )
{
  die('Ungültige Abfrage: ' . mysql_error());
}

   echo '<table border="1">';
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{
  echo "<tr>";
  echo "<td>". $zeile['krit1'] . "</td>";
  echo "<td>". $zeile['krit2'] . "</td>";
  echo "<td>". $zeile['krit3'] . "</td>";
  echo "<td>". $zeile['krit4'] . "</td>";
  echo "<td>". $zeile['krit5'] . "</td>";
  echo "<td>". $zeile['krit6'] . "</td>";
  echo "<td>". $zeile['krit7'] . "</td>";
  echo "<td>". $zeile['krit8'] . "</td>";
  echo "<td>". $zeile['krit9'] . "</td>";
  echo "</tr>";
} 
echo "</table>";
 
mysql_free_result( $db_erg );
 
?>

aber da kommt folgende meldung: Ungültige Abfrage: Unknown column 'wert' in 'where clause'

was hab ich denn da wieder fürn denkfehler :( ...

was meine logik angeht:
die datensätze bestehen aus 9 feldern / infos, kriterien, wie auch immer. über ein suchformular kann man die 5 wichtigsten abfragen und sich die datensätze anzeigen lassen, wo diese 5 dinge übereinstimmen. allerdings sollen dann bei der ausgabe auch noch die vier anderen zusätzlichen infos mit ausgegeben werden wie z.b. ein kommentar o.ä. .. hoffe, konnte meine idee einigermaßen verständlich erläutern :s
 

buyas

Nicht mehr ganz neu hier

AW: suchformular auswahlliste abgleich mit mysql datenbank

ich haaaabs :D

musste da WHERE krit1='".$krit1"' draus machen also noch ' und "und . hinzufügen :D .. bin happy ..
danke für eure tips, v.a. für den WHERE - tip !
 

hub

nicht ganz neu hier

AW: suchformular auswahlliste abgleich mit mysql datenbank

Moin moin,
kurz zu deinem SQL-Problem: das ist richtig, das das falsch ist :). Ich gehe mal davon aus, das in $krit1 der String "wert" stand. Dann fehlen da die Anführungszeichen ...
PHP:
// Fehler:
$sql = "SELECT * FROM tabellenname WHERE krit1=$krit1";
// 1. Möglichkeit
$sql = "SELECT * FROM tabellenname WHERE krit1=\"$krit1\"";
// 2. Möglichkeit
$sql = 'SELECT * FROM tabellenname WHERE krit1="'.$krit1.'";
// ....
Oder du steigst auf mysqli um, oder ...

Gruß Ulli
 

Duddle

Posting-Frequenz: 14µHz

AW: suchformular auswahlliste abgleich mit mysql datenbank

Ich nehme an, dass in $krit1 "wert" drinsteht. Oder allgemein, es ist kein Zahlenwert.

Wenn du aber Felder mit Zeichenketten/Strings vergleichen willst, musst du das eindeutig machen, sonst geht MySQL davon aus dass du ein anderes Feld meinst. In deinem Fall sucht er nach dem Feld "wert".

Strings müssen in Anführungszeichen geschrieben werden. Wenn du aber einfach
PHP:
$sql = "SELECT * FROM tabellenname WHERE krit1="$krit1"";
machst, siehst du schon an der Syntaxhervorhebung (Edit: okay, die Hervorhebung im Forum ist nicht gut genug dafür), dass dort etwas nicht stimmt. In diesem Fall würde PHP durcheinander kommen. Deshalb musst du entweder die Anführungszeichen maskieren
PHP:
$sql = "SELECT * FROM tabellenname WHERE krit1=\"$krit1\"";
oder einfache Hochkommas nehmen
PHP:
$sql = "SELECT * FROM tabellenname WHERE krit1='$krit1'";
Es gibt da ein paar Unterschiede, wie PHP einfache und doppelte Anführungszeichen behandelt. Diese Variante
PHP:
$sql = 'SELECT * FROM tabellenname WHERE krit1="$krit1"';
vermischt beides und laut der Syntaxhervorhebung sollte es funktionieren. Aber Strings in ' ' werden nicht interpretiert, d.h. $krit1 wird nicht als Variable sondern als normale Zeichenkette behandelt. Für diesen Fall müsstest du dann den String schließen und die Variable per Konkatenierungs-Punkt mit der Variable verbinden
PHP:
$sql = 'SELECT * FROM tabellenname WHERE krit1="'.$krit1.'"';
Gewöhn dir am besten eine Variante an. Verstehen solltest du aber alle, sonst könntest du in Tutorials darüber stolpern.

Zur Logik selbst: es war recht klar, dass du meintest was du beschrieben hast. Der Code im Ursprungspost bedeutet aber etwas anderes. Zum Vergleich:
Du willst in einem Telefonbuch alle Namen und Nummern mit Familiennamen "Meier" finden. Dein erster Code sucht aber nur im ersten Eintrag nach "Meier" und gibt das im positiven Fall das komplette restliche Telefonbuch aus.

Edit: okay, hab eindeutig zu lang dafür getippt. Ich lasse den Beitrag aber mal stehen, für die Zukunft und so.


Duddle
 
Zuletzt bearbeitet:

ArishaK

Noch nicht viel geschrieben

AW: suchformular auswahlliste abgleich mit mysql datenbank

Wenn ich auch mal einen Tipp geben darf :)

Bei Formularen sollte man auf SQL Injections acht geben. Wenn dich einer Ärgern möchte, kann dieser in den Textfeldern einen SQL Befehl ausführen. Unter anderem sowas wie DROP Table etc. Sowas sollte man vermeiden. Dafür gibt es nun verschiedene Methoden um dies zu verhinden. Die einfachste wäre folgende Funktion zu benutzen:

PHP:
mysql_real_escape_string($_POST['textfeld'])
Es gibt aber noch andere Methoden, wie PDO oder Prepare Statements. Mach dich darüber einfach mal schlau.
 

buyas

Nicht mehr ganz neu hier

AW: suchformular auswahlliste abgleich mit mysql datenbank

danke für eure tips und mühe beim langen tippen duddle ;), hast recht kann nich schaden das alles stehen zu lassen für die zukunft und so.
das mit sql injections etc. muss ich mir auch nochmal genauer anschauen, da haste recht, danke für den hinweis arisha !

ich hätte noch ne frage, wie update bzw. überschreibe ich datensätze ?
kann ich folgenden code, der daten einträgt bzw datensätze erstellt, einfach ummodeln ?
hab es versucht, aber nicht hinbekommen :( ..

PHP:
<?php

include('db_connect.inc.php');

$sql = "SELECT * FROM tabellenname WHERE id='".$idabfra."'";
$query = mysql_query($sql);
$row = mysql_fetch_array( $query, MYSQL_ASSOC);


if($krit1 == "" or $krit2 == "" or $krit3 == "") {
echo "Du hast die Felder nicht ausgefüllt ...";
} else {

$eintrag = "INSERT INTO tabellenname
(krit1, krit2, krit3)

VAlUES
('$krit1','$krit2','$krit3')";

$eintragen = mysql_query($eintrag);


}

mysql_close($verbindung);

?>
 

ArishaK

Noch nicht viel geschrieben

AW: suchformular auswahlliste abgleich mit mysql datenbank

Mit dem SELECT-Befehl hohlst du die Daten aus der Datenbank und schreibst diese in ein Textfeld

PHP:
echo '<input type="text" name="wert1" value="'.$row['spalte1'].'"';
Um deine Zeile zu aktualisieren verwendest du in SQL den UPDATE-Befehl. Dafür sollte die ID des Datensatzes immer mit übergeben werden. Zum Beispiel wenn du im Formular die Seite aufrufst, da dann die ID ranhängen. Z.B index.php?id=$row['id']
Ohne diese ID (oder etwas anderes Eindeutiges, in der Regel ist es die ID), kann das System nicht wissen welchen Datensatz es ändern soll.

PHP:
$sql = "UPDATE tabelle SET spalte1 = ".$_POST['wert1']." SET id = ".$_GET['id']."";


Ich hab es ein wenig verallgemeinert erklärt, ich hoffe es war dennoch zu verstehen :)
 

Duddle

Posting-Frequenz: 14µHz

AW: suchformular auswahlliste abgleich mit mysql datenbank

Nur eine schnelle Korrektur:
PHP:
 $sql = "UPDATE tabelle SET spalte1 = ".$_POST['wert1']." SET id = ".$_GET['id']."";
Dort ist wohl ein Tippfehler passiert. Das zweite SET muss (Edit: muss im Sinne von falls du eine Einschränkung willst) ein WHERE sein, also
PHP:
 $sql = "UPDATE tabelle SET spalte1 = ".$_POST['wert1']." WHERE  id = ".$_GET['id']."";
Das WHERE schränkt das UPDATE auf bestimmte Datensätze ein (genauso wie beim SELECT). Wenn du mehrere Felder updaten willst, reicht ein Komma zwischen den Feldern:
PHP:
 $sql = "UPDATE tabelle SET spalte1 = ".$_POST['wert1'].", spalte2 = ".$_POST['wert2']." WHERE  id = ".$_GET['id']."";

Hier ist potentiell natürlich der gleiche Angriffsvektor via Injection, wie oben erwähnt.


Duddle
 
Zuletzt bearbeitet:

buyas

Nicht mehr ganz neu hier

AW: suchformular auswahlliste abgleich mit mysql datenbank

danke euch für das schnelle feedback !!
ich fühl mich ein wenig mies :s, hab das problem inwzischen schon gelöst, bevor ich eure lösungsansätze gesehen hab, fühlt sich ein wenig so an als hätte ich euch unnötig belastet, genervt oder was auch immer - sorry !

lag unter anderem an problemen bei der id über/weitergabe, hab das problem an sich nun folgendermaßen gelöst:

PHP:
<?php

include('db_connect.inc.php');

  $idbearb = $_POST['idbearb'];


$sql = "SELECT * FROM tabellenname WHERE id='".$idbearb."'";
$db_erg = mysql_query($sql);

if($krit1 == "" or $krit2 == "" or $krit3 == "") {
echo "Du hast die Felder nicht ausgefüllt ...";
}

while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{

$eintrag = mysql_query("UPDATE tabellenname SET krit3 ='".$krit3."' WHERE id='".$idbearb."'");

}

mysql_close($verbindung);

?>

vielen dank nochmal für euer feedback !
 

Duddle

Posting-Frequenz: 14µHz

AW: suchformular auswahlliste abgleich mit mysql datenbank

Auch wenn es kein Fehler ist, bitte denk nochmal scharf über
PHP:
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
{

$eintrag = mysql_query("UPDATE tabellenname SET krit3 ='".$krit3."' WHERE id='".$idbearb."'");

}
nach.
Zusätzlich solltest du dich mit Arrays beschäftigen. Variablennamen wie $krit1, $krit2, usw. deuten meistens auf ein fehlendes Verständnis von Arrays hin (falls du die Nummerierung nur für das Forum gemacht hast, ignorier diesen Absatz).


Duddle
 

buyas

Nicht mehr ganz neu hier

AW: suchformular auswahlliste abgleich mit mysql datenbank

danke für den hinweis, ich nummeriere grundsätzlich nichts .. wenn dann schreib ichs als zahl aus.
magste mir nen hinweis geben, worauf ich achten soll beim scharfen nachdenken ?

buyas
 

Myhar

Hat es drauf

AW: suchformular auswahlliste abgleich mit mysql datenbank

Duddle hat es schon geschrieben, worüber du nachdenken sollst:
Variablennamen wie $krit1, $krit2, usw. deuten meistens auf ein fehlendes Verständnis von Arrays hin

Fette hervorhebung von mir.
Dieses Stichwort noch in Verbindung mit php (oder in welcher Sprache du es lernen willst, gibt es ja in so jeder Programmiersprache) in google schmeißen und schon hast du viele Antworten. Ich hoffe, es ist dir mit dieser minimalen Antwort geholfen, aber nachdem du schon so viel lernwille bei deinem Problem gezeigt hast denke ich, dass es dir am liebsten ist, wenn du Dinge selber herausfinden kannst. :)
 

buyas

Nicht mehr ganz neu hier

AW: suchformular auswahlliste abgleich mit mysql datenbank

ja myhar, da liegste richtig, es is mir am liebsten, wenn ich dinge selber herausfinden kann und probleme gelöst bekomme. gab die letzten tage immer wieder sachen, bei denen ich überlegt habe zu fragen, da sie recht viel zeit in anspruch genommen haben ( auch die google - suche schon ), habe mich aber zurückgehalten .. macht mehr spaß, wenn man selbst etwas gelöst bekommt :).

danke für den hinweis duddle !
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben