Hoi,

Het is de bedoeling dat ik in de database laat zoeken of 1 van de 3 dingen gevonden wordt.
Bij al reeds bestaande moet namelijk geen nieuwe aangemaakt worden.
Ik gebruik daarvoor deze code:

		$item_exists_sql = "SELECT news_title, news_body, news_thumbnail FROM e107_news where news_title = '" . $titel . "' OR news_body = '" . $content . "' OR news_thumbnail = '" . $afbeelding . "'";
		$item_exists = mysql_query($item_exists_sql, $db);
		if(mysql_num_rows($item_exists)<1)

		{

			echo "<font color=green>Inserting new item..</font><br/>";
			 $item_insert_sql = "INSERT INTO e107_news set news_title = '$titel', news_body = '$content', news_datestamp = '$item_date', news_author = '$userid', news_category = '$catid', news_thumbnail = '$afbeelding'";
			 $insert_item = mysql_query($item_insert_sql, $db);
			 $item_update_sql = "UPDATE e107_user set user_currentvisit = '$item_date' WHERE user_id = '$userid'";
			 $update_item = mysql_query($item_update_sql, $db);
		}
		else
		{
			echo "<font color=blue>Not inserting existing item..</font><br/>";
		}


Echter werkt nu alleen de title controle (de eerste).
De andere 2 dingen worden genegeerd (ook al is het aanwezig in de database wordt er evengoed toegevoegt).
Iemand enig idee wat ik fout heb aan die regel?
Het gaat om deze regel:

$item_exists_sql = "SELECT news_title, news_body, news_thumbnail FROM e107_news where news_title = '" . $titel . "' OR news_body = '" . $content . "' OR news_thumbnail = '" . $afbeelding . "'";


Gr. Kees.
Als je in de tabel voor elk van die 3 kolommen aangeeft dat deze unique mort zijn? Dan krijg je er in elk geval geen dubbele in.

[size=xsmall]Toevoeging op 24/10/2015 08:51:52:[/size]

BTW
Jouw nieuwsberichten gaan nooit over foto's?
Of andere teksten waarin een ' zal staan?
Om nog maar te zwijgen over bewuste pogingen om je database om zeep te helpen

Http://wiki.pfz.nl/sqlinjectie
Het werkt omgekeerd zeg maar.
Het is de bedoeling dat als 1 van de 3 al bestaat inde database dat dan het complete bericht genegeerd wordt.
Als ik zou zeggen dat ze alle 3 al zouden moeten bestaan en 1 wijkt af maar de andere 2 zijn uniek zou het niet werken.
Het komt soms voor dat een titel wordt aangepast, maar dan ziet hij het op dit moment als een compleet nieuw nieuwsbericht. Dan wil ik dus dat hij die niet plaatst omdat 2 en 3 wel hetzelfde zijn en 1 dus niet.

Alleen werkt die code nu niet (hij doet alleen controle op 1).
Iemand enig idee hoe de code moet zijn om wel controle te krijgen op alle 3, en dat dan 1 van de 3 moet matchen?

De sqlinjectie ga ik even naar kijken, dat is nieuw voor mij.

Gr. Kees.
3x een unique constraint op de losse kolommen en niet een met de combinatie van de kolommen

[size=xsmall]Toevoeging op 24/10/2015 11:16:37:[/size]

Andere benadering
Geef een bericht een id

Bij edits komt het id mee. Dus dan update.
Geen id dan insert

Wat als iemand een bericht bewerkt op

[size=xsmall]Toevoeging op 24/10/2015 11:17:09:[/size]

Titel inhoud en afbeelding
Ivo P op 24/10/2015 11:14:10

3x een unique constraint op de losse kolommen en niet een met de combinatie van de kolommen

Begrijp ik hieruit dat het niet in 1 query kan?

En het wordt trouwens nooit alle 3 bewerkt het is echt of/of/of.

[size=xsmall]Toevoeging op 24/10/2015 13:31:00:[/size]

De code:

$item_exists_sql = "SELECT news_title, news_body, news_thumbnail FROM e107_news where news_title = '" . $titel . "' OR news_body = '" . $content . "' OR news_thumbnail = '" . $afbeelding . "'"; 

Blijkt toch wel te werken, ik had in de test namelijk verschil in alle 3 vandaar dat het leek dat de 2de en 3de controle niet werkte.
Dit blijkt dus wel te werken.
Echter nu zit ik nog met 1 ding.
Hoe controleer je of er een gedeelte aanwezig is?
Ik bedoel zo ongeveer dit:

$item_exists_sql = "SELECT link FROM e107_news where link BEVAT '" . $link . "'"; 

Ik bedoel daar dus mee dat er veel meer in kan staan maar dat hij alleen maar kijkt of dat gedeelte wat ik opgeef aanwezig is.
Als voorbeeld dat hij controleerd of de tekst "hallo hoe is het" aanwezig is (ondanks dat er nog veel meer in staat).

Gr. Kees.
@SanThe: 5.0 docs =]
Ik ben inmiddels weer verder en op een nieuw "probleem" uitgekomen.
Ik heb uiteraard eerst zelf gezocht omdat ik ook niet alles alleen maar simpel wil vragen (je leert het meeste van zelf zoeken immers).

Echter zoek ik niet goed of het bestaat gewoonweg niet.

Het gaat er nu om dat ik 2 dingen wil vergelijken en als er een URL in staat dat hij die negeert bij het vergelijken.
Zoiets als dit ongeveer:

$item_exists_sql = "SELECT body FROM e107_news where body BEVAT '" . $body . "' AND EXCLUDE een mogelijke URL"; 

Het kan dus een heel verhaal zijn en die moet hij op aanwezigheid controleren maar mocht er een URL in het verhaal staan moet hij dat niet vergelijken (alleen de URL niet en de rest wel).

Het effect moet dus zijn mochten de teksten hetzelfde zijn en alleen de URL anders moet hij dat niet als enkele post zien maar ook als dubbelpost.

Ik hoop dat het zo duidelijk is en of iemand weet of dit mogelijk is.
[/code]
Kees van Norde op 24/10/2015 10:58:23
Het komt soms voor dat een titel wordt aangepast, maar dan ziet hij het op dit moment als een compleet nieuw nieuwsbericht. Dan wil ik dus dat hij die niet plaatst omdat 2 en 3 wel hetzelfde zijn en 1 dus niet.

Misschien is dit een oversimplificatie, maar dit komt toch neer op het maken van aparte acties voor het bijwerken van een bericht? Het lijkt mij onhandig/onwenselijk om het toevoegen van een nieuw bericht en het wijzigen van een bestaand bericht op dezelfde manier te behandelen als daar op dit moment sprake van is.

Weet je zeker dat je in deze thread (oorspronkelijke + vervolgvragen) niet heel hard de verkeerde kant op aan het rennen bent?

Beschrijf naast wat er mis gaat ook wat je wilt, en wat er op dit moment (daadwerkelijk) gebeurt. Ik denk dat we je dan beter de goede kant op kunnen sturen.
Thomas van den Heuvel op 26/10/2015 14:34:50

[quote="Kees van Norde op 24/10/2015 10:58:23"]Het komt soms voor dat een titel wordt aangepast, maar dan ziet hij het op dit moment als een compleet nieuw nieuwsbericht. Dan wil ik dus dat hij die niet plaatst omdat 2 en 3 wel hetzelfde zijn en 1 dus niet.

Misschien is dit een oversimplificatie, maar dit komt toch neer op het maken van aparte acties voor het bijwerken van een bericht? Het lijkt mij onhandig/onwenselijk om het toevoegen van een nieuw bericht en het wijzigen van een bestaand bericht op dezelfde manier te behandelen als daar op dit moment sprake van is.
[/quote]
Je moet het zo zien, ik lees een rss feed uit en deze wil ik dan uitlezen en opslaan in de database (uiteraard met bronvermelding).
Om de paar minuten wordt er gecontroleerd of er een nieuw artikel is.
Ik controleer dan of een artikel al aanwezig is of niet.
Regelmatig worden artikelen aangepast en dan ziet hij het als een nieuwe post.
Daarom wil ik diverse controles hebben daarop.
De ene keer wordt de titel gewijzigt, de andere keer de content etc.

Ik heb de bronvermelding altijd als laatste regel in de content staan.
Omdat die url ook steeds veranderd ziet hij dus eigenlijk altijd dat de content niet indentiek is en ziet hij het daarom altijd als nieuwe post.

Daarom wil ik de controle zo maak dat hij de kolom content wel nakijkt, behalve het URL gedeelte, dus zeg maar iets in de trend van replace url to "" ofzo dat hij de url niet meetelt.
Ik hoop dat het zo een beetje duidelijk is :)
Thomas van den Heuvel op 26/10/2015 14:34:50

Weet je zeker dat je in deze thread (oorspronkelijke + vervolgvragen) niet heel hard de verkeerde kant op aan het rennen bent?

Beschrijf naast wat er mis gaat ook wat je wilt, en wat er op dit moment (daadwerkelijk) gebeurt. Ik denk dat we je dan beter de goede kant op kunnen sturen.

Ik weet zeker dat ik hard aan het rennen ben (met dank aan jullie snelle en goede antwoorden) maar gelukkig wel de goede kant op.

Voor wat ik wil en wat er gebeurt zie hierboven :)

Reageren