Ik heb een tekstbestand met daarin de volgende tekst:
123456,012346,944567,544994,154647,151649,654946,545646

Dit zijn artikelcode's die aan producten hangen. Ik krijg het wel voor elkaar om middels explode() de waarden de scheiden bij de ','. Maar hoe kan ik in de database zoeken op alle waarden, en daarna de volgende regel per waarde weergeven.
123456 bestaat al
of
012346 bestaat nog niet, wil je het aanmaken

Groet,
Ronald
<?php
$arr = explode(.......);
foreach($arr as $getal)
{
$sql = "SELECT ... FROM ... WHERE .. = '" . $getal . "'";
// query uitvoeren
if(mysql_num_rows(.....) == 0)
{
// bestaat niet
}
}
?>
ik heb nu het volgende
$varVoor = "0123456,466545,849464,954461,618446,528446";

$arr = explode(",",$varVoor);
foreach($arr as $getal)
{
    $sql = "SELECT * FROM product WHERE art_code '".$getal."'";
    // query uitvoeren
    if(mysql_num_rows(mysql_query("$sql")) == 0)
    {
          // bestaat niet
    }
}


maar dan krijg ik 6 foutmeldingen [aantal waarde's in $varVoor]

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /usr/local/apache2/htdocs/test.php on line 10


Heb al wat dingen geprobeerd, maar dan blijft die melding.

Zitten zoveel fouten in omdat je klakkeloos kopieert en plakt. SanThe gaf een opzet, die moet jij nog even aanpassen. Zo probeer je nu met mysql_num_rows een resultset van een query aan te spreken die er helemaal niet is.

Verder ga je ook met je foreach-loop de fout in. Er is namelijk geen $arr, dat is $varVoor.

En verder moet je natuurlijk nog wat code doen waar '// bestaat niet' staat.
<?php
$varVoor = "0123456,466545,849464,954461,618446,528446";

$arr = explode(",",$varVoor);
foreach($arr as $getal)
{
$sql = "SELECT * FROM product WHERE art_code '".$getal."'";
$result = mysql_query($sql) or die(mysql_err());
if(mysql_num_rows($result)) == 0)
{
// bestaat niet
}
}
?>
@SanThe

WHERE art_code '".$getal."'

Is dat een nieuwe (voor mij onbekende) syntax of een foutje? :)

[knip]

[plak]
Of om meerdere queries te vermijden, maar als je dat niet kan schelen, dan lees je over het onderstaande maar heen:


<?php
//code is niet getest!
$dataString = "123456,012346,944567,544994,154647,151649,654946,545646";
$dataArray = explode(",", $dataString);
$codes = Array();

$sql = "SELECT
 code
FROM
 table
WHERE
 code IN (".$dataString.")";

$query = mysql_query($sql) or die(mysql_error());

while($row = mysql_fetch_assoc($query)){
   	$codes[] = $row['code'];
}

foreach($dataArray as $code){
	if(!in_array($code, $codes)){
       //bestaat niet
   }	
}
?>

Het is een extra loopje, maar ik denk dat het sneller is.

Reageren