Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Fehlerhafte Ausgabe nach foreach-Schleife

Moin!
Mein Frage lautet: Warum erhalte ich zweimal die Ausgabe "2 stan 1 1"?Eigentlich sollte im nächsten Durchlauf der Schleife kein neuer Eintrag erstellt werden sondern der Wert in "si_count" um 1 erhöht werden.

<?php
foreach($outString as $word)
{
if (strlen($word) > 32)
{
$word = substr($word, 0, 32);
}


$schl = "SELECT sw_id FROM `search_word` WHERE `sw_word` = '".$word."'";
$req1 = mysql_query($schl);
$locSwId = mysql_fetch_assoc($req1);


If($locSwId["sw_id"] == "")
{
$insert = "INSERT INTO `search_word` ( `sw_id` , `sw_word` ) VALUES ( '', '".$word."' );";
mysql_query($insert);
$schl1 = "SELECT sw_id FROM `search_word` WHERE `sw_word` = '".$word."'";
$req2 = mysql_query($schl1);
$locSwId = mysql_fetch_assoc($req2);
}


/*An dieser Stelle sollte die ausgeschlossen werden das der gleiche Eintrag erzeugt wird*/

If ($locData[$locSwId['sw_id']]["si_sw_id"] != "")
{

If ($locData[$locSwId['sw_id']]['si_doc_id'] == $inStDocId AND $locData[$locSwId['sw_id']]['si_type'] == $inStType)
{
$locData[$locSwId['sw_id']]["si_count"] = $locData[$locSwId['sw_id']]["si_count"] + 1;
}

else
{
$locData[$locSwId['sw_id']]["si_sw_id" ] = $locSwId['sw_id'];
$locData[$locSwId['sw_id']]["si_type" ] = $inStType;
$locData[$locSwId['sw_id']]["si_doc_id"] = $inStDocId;
$locData[$locSwId['sw_id']]["si_count" ] = 1;
}

}

else
{
$locData[$locSwId['sw_id']]["si_sw_id" ] = $locSwId['sw_id'];
$locData[$locSwId['sw_id']]["si_type" ] = $inStType;
$locData[$locSwId['sw_id']]["si_doc_id"] = $inStDocId;
$locData[$locSwId['sw_id']]["si_count" ] = 1;
echo $locData[$locSwId['sw_id']]["si_sw_id" ]." ".$locData[$locSwId['sw_id']]["si_type" ];
echo " ".$locData[$locSwId['sw_id']]["si_doc_id" ]." ".$locData[$locSwId['sw_id']]["si_count" ]."<br>";
}

sort($locData);
}
?>
/* die Ausgabe lautet:
2 stan 1 1
31 stan 1 1
2 stan 1 1
32 stan 1 1
33 stan 2 1
34 stan 2 1
32 stan 2 1
INSERT INTO `search_index` ( si_id, si_sw_id, si_type, si_doc_id, si_count ) VALUES ( '', '2', 'stan','1','1'), ( '', '2', 'stan','1','1'), ( '', '31', 'stan','1','2'), ( '', '32', 'stan','1','1'), ( '', '32', 'stan','2','1'), ( '', '33', 'stan','2','1'), ( '', '34', 'stan','2','1')
*/

Hier gehts zum Orginal Eintrag "Fehlerhafte Ausgabe nach foreach-Schleife" im Forum

Antworten

Also ich würde mal sagen:

Standard-Antwort:
Richtig debuggen
1. Man bemerkt, dass ein Skript nicht das tut, was es soll.
2. Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
3. An den Anfang des Scriptes schreibt man die Zeile: error_reporting(E_ALL);
4. An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde (oder auch nicht).
5. Schritt 4 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
6. Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
7. Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
8. Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.

Die Ausgaben per echo kann man sich ersparen, in dem man einen Debugger benutzt.


2.

Und ich würde sagen:

Bitte benutze die Formatierungsmöglichkeiten des Forums, da das ansonsten eine Zumutung ist !


Hier gehts zum Orginal Eintrag "Fehlerhafte Ausgabe nach foreach-Schleife" im Forum
 
phpforum.de | Impressum