Zum Inhalt springen

Vergleich der Inhalte 2er Arrays


Empfohlene Beiträge

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
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ü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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...