Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hey zusammen!

Kurz vorweg - Ich programmiere ein Koch- und Backbuch für eine Bekannte...

Ich möchte an einer Stelle ermitteln, ob sich die Zutat in einem Array schon in der Datenbank befindet. Hier mein Code:


$Counter = 0;

// In $Abfrage ist das Ergebnis meiner Abfrage gespeichert
$Abfrage = Query("SELECT ZUTAT FROM zutaten");

// weil man fetch_object scheinbar nur einmal pro abfrage aufrufen kann, schiebe ich einfach zeile für zeile in ein neues array "$ZutatenDB"
while($Zeile = $Abfrage->fetch_object())
{
$ZutatenDB[$Counter] = $Zeile->ZUTAT;
$Counter++;
}
// hier werden die Zutaten von der Seite durchlaufen
for($x = 2; $x < count($Zutaten); $x = $x+3)
{
$vorhanden = 0;
// und hier die aus der datenbank
for($y = 0; $y < count($ZutatenDB); $y++)
{
// ich lasse mir extra die werte vor dem if ausgeben - so kann ich kontrollieren was in den variablen steht
echo("vergleiche: '" . $Zutaten[$x] . "'" . " == " . "'" . $ZutatenDB[$y] . "'");
// hier wird verglichen
if($Zutaten[$x] == $ZutatenDB[$y])
{
// zur kontrolle ein TRUE ausgegeben
echo(" TRUE");
$vorhanden = 1; // vorhanden wird auf 1 gesetzt und die innere schleife wird verlassen
break;
}
echo("<br>");
}

// weitere Verarbeitung - das ist erstmal egal...
if($vorhanden == 0)
{
// Zutat noch nicht vorhanden - eintragen
}
else
{
// Zutat ist schon vorhanden - nicht eintragen
}
echo("<br>");
}
[/PHP]

Jedoch sieht meine Ausgabe wie folgt aus:

[b]vergleiche: 'Zucker' == 'Zucker' TRUE // das ist ja OK![/b]

vergleiche: 'Kokosflocken' == 'Zucker'

vergleiche: 'Kokosflocken' == 'Eier'

vergleiche: 'Kokosflocken' == 'Mehl'

vergleiche: 'Kokosflocken' == 'Backpulver'

vergleiche: 'Kokosflocken' == 'Sahnesteif'

vergleiche: 'Kokosflocken' == 'Tortenguss'

vergleiche: 'Kokosflocken' == 'Himbeeren'

vergleiche: 'Kokosflocken' == 'Sahne'

vergleiche: 'Kokosflocken' == 'Butterkekse'

vergleiche: 'Kokosflocken' == 'Puderzucker'

vergleiche: 'Kokosflocken' == 'Vanillinzucker'

vergleiche: 'Kokosflocken' == 'Buttermilch'

[b]vergleiche: 'Kokosflocken' == 'Kokosflocken'[/b] // aber das!?! kein TRUE steht da - er hätte doch in den if-zweig gehen sollen und TRUE ausgeben

vergleiche: 'Kokosflocken' == 'Butter'

vergleiche: 'Kokosflocken' == 'Heidelbeeren'

vergleiche: 'Kokosflocken' == 'Erdbeeren'

vergleiche: 'Kokosflocken' == 'Putenfleisch'

vergleiche: 'Kokosflocken' == 'Trockenhefe'

vergleiche: 'Kokosflocken' == 'Hefe'

vergleiche: 'Kokosflocken' == 'Stärkemehl'

Hat jemand eine Ahnung warum "Kokosflocken" == "Kokosflocken" nicht true ergibt?

Hoffe ich habe mein Problem gut formuliert...

Danke schonmal für eure Hilfe,

Luk :)

Bearbeitet von LukOnline

Irgendwie scheint mir das nicht so ganz einleuchtend. Wenn ich das sehe, dann habe ich ein Rezept in der Datenbank und zu jedem Rezept n Zutaten, wobei jede Zutat innerhalb des Rezeptes eindeutig ist, d.h. ich kann im Grunde mit


select * from rezept join zutaten on rezept.id = zutaten.rezeptid where rezeptname = ???

direkt alle Zutaten zu einem Rezept passend holen. Mir scheint irgendetwas in Deinem Datenmodell ist nicht richtig

  • Autor

Hey, danke für deine Antwort.

Nein, das geht um etwas anderes.^^

Ich habe eine Tabelle Zutaten(Z_ID, ZUTAT), eine Tabelle Rezepte (R_ID, REZEPT,...)

und eine Tabelle Rezepte_Zutaten(Z_ID, R_ID).

Der Benutzer kann nun die Zutaten aus der Tabelle Zutaten aus einem <select> Feld wählen.

Sollte aber eine Zutat nicht dabei sein, dann soll er sie in ein Textfeldschreiben können.

Das heißt ich habe nach dem POST unter Umständen auch Zutaten in meinem Array (-> $Zutaten), die noch nicht in der Tabelle Zutaten stehen.

Bevor ich nun die Tabelle Rezepte_Zutaten mit den ganzen IDs fülle, muss ich ja die neuen Zutaten noch in die Tabelle Zutaten schreiben (Sonst gibt es ja keine ID für die Zutaten).

Und dann bin ich an der Code-Stelle.

Überprüfen, ob die aktuelle Zutat schon in der Tabelle Zutaten ist, wenn ja, dann zur nächsten Zutat, wenn nein, dann mit einem INSERT eintragen...

Hoffe das war gut erklärt^^

Überprüfen, ob die aktuelle Zutat schon in der Tabelle Zutaten ist, wenn ja, dann zur nächsten Zutat, wenn nein, dann mit einem INSERT eintragen...

Mach das doch mit einem "insert ignore into", dann kannst Du auswählen und wenn das Textfeld mit einer schon vorhandenen Zutat eingefügt wird, ist es egal. Du musst dann nur auf korrekte Schlüssel innerhalb der Tabellen achten und generell solltest Du String mit PHP: strcmp - Manual bzw PHP: strcasecmp - Manual vergleichen

schreibt bei mir ein zweites mal Zucker in die DB.

Der PK ist halt anders...

Natürlich, da sich das ignore auf die Schlüssel bezieht. Ändere / ergänze die Schlüssel richtig, dann tritt dies nicht mehr auf (es gibt bei mySQL mehrere Möglichkeiten Schlüssel und Indizes zu setzen)

  • Autor

Das kann ich noch versuchen, aber ich verstehe das trotzdem nicht:

$Zutaten[5] enthält Zucker. Ein echo beweist mir das!


$SQL = "SELECT COUNT(*) FROM ZUTATEN WHERE ZUTAT = ?";

$Query = $DB->prepare($SQL);

$Query->bind_param('s', $Zutaten[5];

$Query->execute();

$Query->bind_result($ANZAHL);

while($Query->fetch())
{
echo($ANZAHL . "<br>");
}

$Query->close();[/PHP]

Ich bekomme eine 0 zurück, obwohl Zucker in der Tabelle steht.

Wenn ich das SQL direkt im PHPMyAdmin ausführe klappt das doch auch.

Kennt niemand die Ursache?

EDIT: Die DB-Verbindung steht. Zutaten[2] gibt mir eine 1 zurück....

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.