Datensätze aus "foreach" zählen

proloser

Erfahrenes Mitglied
Hallo,

Datenbank

| id | aktiv | name |


PHP Code
PHP:
foreach ($_POST["submit_id"] AS $id) {
  $res = mysql_query("SELECT * FROM `artikel` WHERE `id` = '$id");
  $row = mysql_fetch_array($res);

  echo $row[name];
}


Nun zu meinem Problem:
Die über das Formular ausgewählten Namen werden mit $_POST["submit_id"] übermittelt und es werden nur die gewählten Namen aufgelistet. Nun möcht ich alle Namen die "aktiv = 1" Zählen.

count($_POST["submit_artikelid"]) funktioniert in demfall nicht denn dann werden auch die "aktiv = 0" gezählt.

MfG
proloser
 
Hallo,
also vielleicht hab ich jetz nen dicken Denkfehler drin, aber eigentlich sollte folgender Code die Anzahl der Ergebniss liefern, die aktiv = 1 haben (in $aktiv), sowie das ganze mit einer einzelnen DB-Anfrage lösen!
PHP:
if(count($_POST['submit_id']) > 1){
	$query = "SELECT * FROM `artikel` WHERE `id` = ".$_POST['submit_id'][0];
	unset($_POST['submit_id'][0]);
	foreach($_POST["submit_id"] AS $id){
		$query .= " OR `id` = $id";
	}
	
}
elseif(count($_POST['submit_id']) == 1){
	$query = "SELECT * FROM `artikel` WHERE `id` = ".$_POST['submit_id'][0];
}
else{
	$query = '';
	echo 'ungültige Auswahl';
}
if(!empty($query)){
	$res = mysql_query($query);
	$aktiv = 0;
	while($row = mysql_fetch_array($res)){
		echo $row['name'];
		if($row['aktiv']){
			$aktiv++;
		}
	}
}

MfG
 
PHP:
// unbedingt vorher das Array für die Verwendung der Elemente im Query absichern!
if(count($_POST['submit_id']) > 1){
    if ($result = "SELECT COUNT(*) AS `count` FROM `artikel` WHERE `id` IN(" . implode(', ', $_POST['submit_id'] .") AND `aktiv` = 1;") {
        list($count) = mysql_fetch_row($result, MYSQL_NUM);
    }
}

COUNT geht ja doch mit der richtigen Where-Klausel ;) Und anstatt dieser ... OR ... OR ... Geschichte eignet sich ein nettes "IN" mehr.
 
Tja man lernt nie aus ;)
Das mit dem IN vereinfacht das natürlich drastisch, allerdings hab ich sein Problem so verstanden, dass alle ids, die in $_POST['submit_id'] stehen ausgegeben werden sollen und dann noch zusätzlich gezählt werden soll, wieviele davon aktiv = 1 haben!
 
Mit implode() kann auch bei nur einem Array-Element gearbeitet werden:
PHP:
if( count($_POST['submit_id']) > 0 ) {
	if( $result = mysql_query("SELECT COUNT(*) AS `count` FROM `artikel` WHERE `id` IN(".implode(', ', array_map('intval', $_POST['submit_id'])).") AND `aktiv` = 1") ) {
		list($count) = mysql_fetch_row($result, MYSQL_NUM);
	}
}
 
Ich hab den Code von Gumbo auch noch getestet allerdings kommt folgende Fehlermeldung:
Code:
Warning: Wrong parameter count for mysql_fetch_row() in artikel.php on line 23
Was ist daran falsch?

MfG
 
Ist eher mein Fehler, deshalb auch eine Korrektur von mir (war irgendwie bei [phpf]mysql_fetch_array[/phpf] :rolleyes: ):

PHP:
if( count($_POST['submit_id']) > 0 ) {
    if( $result = mysql_query("SELECT COUNT(*) AS `count` FROM `artikel` WHERE `id` IN(".implode(', ', array_map('intval', $_POST['submit_id'])).") AND `aktiv` = 1") ) {
        list($count) = mysql_fetch_row($result);
    }
}

oder
PHP:
if( count($_POST['submit_id']) > 0 ) {
    if( $result = mysql_query("SELECT COUNT(*) AS `count` FROM `artikel` WHERE `id` IN(".implode(', ', array_map('intval', $_POST['submit_id'])).") AND `aktiv` = 1") ) {
        list($count) = mysql_fetch_array($result, MYSQL_NUM);
    }
}
 
Zurück