login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Raar sql-probleem

Offline DjNoiz - 19/12/2006 15:50
Avatar van DjNoizNieuw lid Hallo sitemasters,

Ik post hier een stukje code:

  1. $product = eregi_replace("\n", " ", $_POST["verzenden"]);
  2. $query = mysql_query("SELECT id FROM kassa_aanbod WHERE omschrijving='". $product ."'") or die(mysql_error());
  3. while ($db = mysql_fetch_object($query))
  4. $productid = $db->id;
  5. echo $productid;
  6. echo " - ". "SELECT * FROM kassa_aanbod WHERE omschrijving='". $product ."'";

Wat doet dit?
Wel, er wordt een bepaald product verzonden (bv: "Coca Cola Light" d.m.v. een button (de eregi_replace dient ervoor om de enters uit de value te filteren, vermits de button voor te verzenden uit meerdere lijnen bestaat), aan de hand daarvan wordt in een database naar het id hiervan gezocht en in de variabele $productid opgeslagen.
Nu had ik al gemerkt dat dit perfect werkt bij buttons zonder enters (bv: "Pils"), maar buttons met enters (bv: "Coca Cola Light") werken niet.
Daarom heb ik de select-querie ge-echo-t, om te zien of daar geen fout in stond ..
Dus ik krijg dan zoiets te zien door de echo:
  1. SELECT * FROM kassa_aanbod WHERE omschrijving='Coca-Cola Light'

Maar ik krijg geen id terug ..
Als ik dit in de database zelf (phpmyadmin) uitvoer, krijg ik wel een resultaat terug ..
Waaraan kan dit liggen?
TNX!

10 antwoorden

Gesponsorde links
Offline Rik - 19/12/2006 15:56
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Je zet een enter om in een spatie, dus met een extra spatie aan het einde zou hij hem niet kunnen herkennen. Als je trim() over de omschrijving haalt zou hij het wel moeten doen.

Verder zie ik dat je de ene keer Coca-Cola met een streepje, en de andere keer zonder streepje spelt. En misschien is het ook makkelijk om alles hoofdlettergevoelig te testen.
Offline DjNoiz - 19/12/2006 16:04 (laatste wijziging 19/12/2006 16:05)
Avatar van DjNoiz Nieuw lid TNX boukefalos!

Er staan geen spaties tussen, dit is de exacte echo die ik terugkrijg (= exacte query):

  1. SELECT * FROM kassa_aanbod WHERE omschrijving='Coca-Cola Light'


Met/zonder streepje is idd een fout van mijn kant (typfout bij het typen van het bericht).

Een copy van het database-veld:

  1. id | omschrijving | categorieid | prijs
  2. 25 | Coca-Cola Light | 2 | 1.35

Ik zie écht niet wat er fout kan zijn...?!  
Offline Rik - 19/12/2006 16:12
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Zover ziet het er allemaal logisch uit...

Op windows of mac, een van de twee heb je voor een regeleinde \r\n nodig en niet \n, misschien haalt hij die \r er niet uit...

Zo zou hij het wel moeten doen:
  1. <?php
  2. $product = eregi_replace("\n", " ", $_POST["verzenden"]);
  3. $product = eregi_replace("\r", " ", $_POST["verzenden"]);
  4. ?>


En met een trim zou hij die \r er ook al uit halen staat op php.net.

Nu maar hopen dat het niet ergens anders aan ligt! 
Offline DjNoiz - 19/12/2006 16:18
Avatar van DjNoiz Nieuw lid Noowp, doet nog niets ...
Ik snap het éécht niet, de query die wordt uitgevoerd, wordt letterlijk ge-echo-t (en daar zie ik niets verkeerd aan) en als ik die query loslaat op de database via phpmyadmin, krijg ik wél resultaat ...
  
Offline Rik - 19/12/2006 16:28
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Misschien wordt met het verzenden van je formulier de spaties omgezet in %20...

Probeer anders eens url_decode() over $product te halen.
Offline DjNoiz - 19/12/2006 16:39 (laatste wijziging 19/12/2006 16:40)
Avatar van DjNoiz Nieuw lid Na eens in de broncode te gaan zien (had daar nog niet bij stilgestaan, shame on me  ), krijg ik dus het volgende:

Citaat:
SELECT * FROM kassa_aanbod WHERE omschrijving='Coca-Cola
SPATIELight'

Niet moeilijk dat de query dus niet werkt ..
Hij zet er nog steeds een enter in, maar hij zet er ook wel een spatie bij ...  
Voorlopig staat er dus alleen:

  1. $product = eregi_replace("\n", " ", $_POST["verzenden"]);
Offline Rik - 19/12/2006 16:49
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Als ik het goed begrijp komt die extra spatie dus van de \n?

Dan hoef je alleen maar van
  1. $product = eregi_replace("\n", " ", $_POST["verzenden"]);
dit te maken
  1. $product = eregi_replace("\n", "", $_POST["verzenden"]);
Offline DjNoiz - 19/12/2006 16:57 (laatste wijziging 19/12/2006 16:58)
Avatar van DjNoiz Nieuw lid Inderdaad, dat denk ik toch, vermits als ik jouw oplossing gebruik:
  1. $product = eregi_replace("\n", "", $_POST["verzenden"]);

De spatie wel degelijk weg is ..
MAAR de enter blijft er wel ..
Citaat:
SELECT * FROM kassa_aanbod WHERE omschrijving='Coca-Cola
Light'

Heel raar ..
De spatie moet er wel in staan, maar die enter moet eruit?!  
Offline Rik - 19/12/2006 17:03
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
En als je ook
  1. $product = eregi_replace("\r", "", $_POST["verzenden"]);
erbij zet?
Offline DjNoiz - 19/12/2006 17:28
Avatar van DjNoiz Nieuw lid Found it:

  1. $product = eregi_replace("\r", " ", $_POST["verzenden"]);
  2. $product = eregi_replace("\n", "", $product);

Bedankt voor alle hulp Boukefalos! ;)
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.286s