Hey,
Ik heb de volgende code om elke regel uit een textarea box
appart in het database te zetten.
Maar deze code controleert wel de eerste regel op dubbelen maar voor de rest niet.PHP Code:
$entry_array = explode("\n",$_POST[ 'hash' ]);
if (empty($entry_array)){
$entry_array = explode(" ", $_POST[ 'hash' ]);
}
foreach ($entry_array as $entry) {
$res = mysql_query("SELECT id FROM hashes where hash = '".$entry."'");
$check = mysql_num_rows($res);
if($check == 0){
if(!empty($entry)){
mysql_query("INSERT INTO hashes (hash) VALUES ('".$entry."')") or die(mysql_error());
}
}
}
Dus als ik 2 keer het woord: "hallo" op aparte regels erin zet voert die ze alle 2 in.
Ook als er in het database al een keer hallo staat en ik voer 2x het word "hallo" op apparte regels in
word de 2de regel er wel in gezet. Het controleert dus alleen de eerste regel.
Hoe kan ik dit oplossen, door Google werd ik niet wijzen aangezien ik niet weet waarop ik moet
gaan zoeken.
Hoop dat iemand kan helpen.
Mvg, Ben
- [PHP] foreach dubbel check
-
19-06-2010, 22:10 #1
- Berichten
- 442
- Lid sinds
- 16 Jaar
[PHP] foreach dubbel check
-
-
19-06-2010, 23:24 #2
- Berichten
- 1.483
- Lid sinds
- 16 Jaar
Je moet creatief zijn met dit soort dingen, ik heb je code herschreven en een soort cache gemaakt die keer-op-keer controleert of er al een regel voorbij is gekomen met de zelfde inhoud.
Laat even weten of je wat aan de code hebt gehad. Ik heb de code niet getest, er kan een fout in zitten.
PHP Code:<?php
// Hier exploderen de regels van de textarea naar een array
$rows = preg_split("/\r{0,1}\n/", $_POST['hash']);
// We gaan alle regels 1 voor 1 behandelen in de foreach
foreach($rows as $row)
{
// Middels een trim() voorkomen we dat het resultaat wordt beinvloed door een spatie
$row = trim($row);
// Hier controleren we of de inhoud van deze regel al eens is voorbij gekomen in deze foreach
if(!isset($cache[md5($row)]))
{
// Middels deze query gaan we de hudige regel controleren in of deze voorkomt in de database
$sql = "SELECT
COUNT(1) AS `totaal`
FROM `hashes`
WHERE `hash` = '".mysql_real_escape_string($row)."'";
$query = mysql_query($sql) or die(mysql_error());
$result = mysql_fetch_assoc($query);
// Als het aantal getroffen rijen 0 is en de regel is niet leeg dan voegen we de inhoud van deze rij toe aan de tabel hashes
if($result['totaal'] > 0 && !empty($row))
{
$sql = "INSERT INTO `hashes` (
`hash`) VALUES (
'".mysql_real_escape_string($row)."')";
mysql_query($sql) or die(mysql_error());
}
// We zetten deze rij in $cache om te voorkomen dat een tweede of derde regel met de zelfde inhoud behandeld wordt
$cache[md5($row)] = true;
}
}
?>
-
19-06-2010, 23:58 #3
- Berichten
- 442
- Lid sinds
- 16 Jaar
Yes! dat werkt! Ik zat hierbij echt vast, heel erg bedankt ;)
Heb alleen dit moeten veranderen:
PHP Code:if($result['totaal'] > 0 && !empty($row))
PHP Code:if($result['totaal'] == 0 && !empty($row))
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic