LukOnline Geschrieben 19. Mai 2011 Teilen Geschrieben 19. Mai 2011 (bearbeitet) 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 19. Mai 2011 von LukOnline Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 19. Mai 2011 Teilen Geschrieben 19. Mai 2011 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukOnline Geschrieben 20. Mai 2011 Autor Teilen Geschrieben 20. Mai 2011 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^^ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 20. Mai 2011 Teilen Geschrieben 20. Mai 2011 Ü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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukOnline Geschrieben 22. Mai 2011 Autor Teilen Geschrieben 22. Mai 2011 Danke für deine Antwort! INSERT IGNORE INTO ZUTATEN (ZUTAT) VALUES ("Zucker"); schreibt bei mir ein zweites mal Zucker in die DB. Der PK ist halt anders... Die strcmp Funktionen teste ich gleich mal... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 22. Mai 2011 Teilen Geschrieben 22. Mai 2011 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) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukOnline Geschrieben 22. Mai 2011 Autor Teilen Geschrieben 22. Mai 2011 Du meinst also kein AutoInc verwenden? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 22. Mai 2011 Teilen Geschrieben 22. Mai 2011 Nein, man kann auch zusätzlich zu einem bestehenden PK noch weitere Schlüssel auf eine Tabelle setzen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukOnline Geschrieben 23. Mai 2011 Autor Teilen Geschrieben 23. Mai 2011 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.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
LukOnline Geschrieben 23. Mai 2011 Autor Teilen Geschrieben 23. Mai 2011 OK Leute, ich habs endlich gefunden --> trim() Danke für eure Hilfe! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.