Problem mit fetch_Array und der Ausgabe, erster Eintrag fehlt immer.

grashnaknieswurz

Grünschnabel
Hallöle,

ich hab ein kleines PHP-Script geschrieben bei dem aus einer MS-Sql Tabelle Werte ausgelesen werden. Diese sollen in einem Array gespeichert werden und anschliessend die Änderungen wieder zurück in die Tabelle ... ich schweife ab denn das eigentliche Problem ist folgendes ...

So sieht die Select- Abfrage aus ...
PHP:
$produkt = "SELECT zeit, code, laden, mitarbeiter, bezeichnung_deutsch, artikelnummer, code_correction, descr_correction FROM retailstock_products WHERE laden = '$store' and datum = '$datum' order by zeit";

So das speichern in den Array ...
PHP:
while ($row = mssql_fetch_array($produkt_res))
		{
		$row["bezeichnung_deutsch"] = str_replace("'",'´',$row["bezeichnung_deutsch"]); //neu
		$_SESSION['zeit'][$i] = $row['zeit'];
		$_SESSION['code'][$i] = $row['code'];
		$_SESSION['laden'][$i] = $row['laden'];
		$_SESSION['mitarbeiter'][$i] = $row['mitarbeiter'];
		$_SESSION['artikelnummer'][$i] = $row['artikelnummer'];
		$_SESSION['bezeichnung_deutsch'][$i] = $row['bezeichnung_deutsch'];
		IF (!isset($_SESSION['code_correction'][$i]))
			{
			$_SESSION['code_correction'][$i] = $row['code_correction'];
			}
		IF (!isset($_SESSION['descr_correction'][$i]))
			{
			$_SESSION['descr_correction'][$i] = $row['descr_correction'];
			}
		$n = $n+1;
		$i = $i+1;
		}

funktioniert soweit ganz gut, allerdings fehlt immer der erste Eintrag der in der Sql Tabelle steht bzw. der erste Datensatz der ausgelesen wurde ...

Ach ja die Ausgabe läuft über "foreach" ...
Ich hoffe mir kann da jemand helfen ...

Gruß
Grashnak
 
Ich tippe mal drauf, dass das Ganze was mit deinen Zählern $i oder $n zu tun hat. Hierfür relevante Codeschnippsel wären hilfreich...
 
Da gibts nicht mehr viel ...
Vor der While Schleife kommt :
PHP:
$i = 0;
$n = 0;

Und vor der Ausgabe setz ich $i wieder auf 0 ...
Hier kommt die Ausgabe ...
PHP:
	$i = 0;
	foreach ($_SESSION["zeit"] as $zeit)
		{
		IF (empty($_SESSION['code_correction'][$i]))
			{
			IF (!empty($_SESSION['code'][$i]))
				{
				$_SESSION['code_correction'][$i] = $_SESSION['code'][$i];
				}
			ELSE
				{
				$_SESSION['code_correction'][$i] = "Undefiniert";
				}
			}
		IF (empty($_SESSION['descr_correction'][$i]))
			{
			IF (!empty($_SESSION['bezeichnung_deutsch'][$i]))
				{
				$_SESSION['descr_correction'][$i] = $_SESSION['bezeichnung_deutsch'][$i];
				}
			ELSE
				{
				$_SESSION['descr_correction'][$i] = "Undefiniert";
				}
			}
		IF ($_SESSION['code_correction'][$i] == "Undefiniert")
			{
			Echo "<strong style=color:red>";
			Echo "<input name='".$_SESSION['laden'][$i]."' value='".$_SESSION['laden'][$i]."' size='2' readonly> ";
			Echo "<input name='".$_SESSION['zeit'][$i]."' value='".$_SESSION['zeit'][$i]."' size='5' readonly> ";
			Echo "<input name='".$_SESSION['mitarbeiter'][$i]."' value='".$_SESSION['mitarbeiter'][$i]."' size='1' readonly>";
			Echo "<input name='".$_SESSION['artikelnummer'][$i]."' value='".$_SESSION['artikelnummer'][$i]."' size='13' readonly>";
			Echo "<input name='code_correction_$i' value='".$_SESSION['code_correction'][$i]."' size='11' maxlength='11' >";
			Echo "<input name='descr_correction_$i' value='".$_SESSION['descr_correction'][$i]."' size='50' >";
			Echo "Ausfüllen ! 1</strong>";
			}
		Else
			{
			IF ($_SESSION['descr_correction'][$i] == "Undefiniert")
				{
				Echo "<strong style=color:red>";
				Echo "<input name='".$_SESSION['laden'][$i]."' value='".$_SESSION['laden'][$i]."' size='2' readonly> ";
				Echo "<input name='".$_SESSION['zeit'][$i]."' value='".$_SESSION['zeit'][$i]."' size='5' readonly> ";
				Echo "<input name='".$_SESSION['mitarbeiter'][$i]."' value='".$_SESSION['mitarbeiter'][$i]."' size='1' readonly>";
				Echo "<input name='".$_SESSION['artikelnummer'][$i]."' value='".$_SESSION['artikelnummer'][$i]."' size='13' readonly>";
				Echo "<input name='code_correction_$i' value='".$_SESSION['code_correction'][$i]."' size='11' maxlength='11' >";
				Echo "<input name='descr_correction_$i' value='".$_SESSION['descr_correction'][$i]."' size='50' >";
				Echo "Ausfüllen ! 2</strong>";
				}
			Else
				{
				Echo "<input name='".$_SESSION['laden'][$i]."' value='".$_SESSION['laden'][$i]."' size='2' readonly> ";
				Echo "<input name='".$_SESSION['zeit'][$i]."' value='".$_SESSION['zeit'][$i]."' size='5' readonly> ";
				Echo "<input name='".$_SESSION['mitarbeiter'][$i]."' value='".$_SESSION['mitarbeiter'][$i]."' size='1' readonly>";
				Echo "<input name='".$_SESSION['artikelnummer'][$i]."' value='".$_SESSION['artikelnummer'][$i]."' size='13' readonly>";
				Echo "<input name='code_correction_$i' value='".$_SESSION['code_correction'][$i]."' size='11' readonly>";
				Echo "<input name='descr_correction_$i' value='".$_SESSION['descr_correction'][$i]."' size='50' readonly>";
				}
			}
		Echo " <br>";
		$i= $i+1;
		}

Ich hoffe das macht irgendwie Sinn ;-)


Grashnak
 
Selbst ist der Blindfisch ...

Hab den Fehler gefunden ...

Konnte man aber in den Code-Schnipseln nicht sehen.
Und zwar hatte ich eine Variable deklariert vor der While-Schleife :

PHP:
$row = mssql_fetch_array($produkt_res)

Nun ja die While-Schleife sieht ja so aus :

PHP:
while ($row = mssql_fetch_array($produkt_res))

Nun beide Zeilen vertragen sich nicht ;-) Die Variable gelöscht und nu gehts ...

Danke trotzdem.

Grashnak
 
Hallo zusammen,

ich würde hier gerne ein kleines, aber perfides Problem schildern:

ich habe ein PHP-Script, das aus einer MySQL-Tabelle alle Einträge liest und ausgibt.

Hier mein Script:

<?
include ("conn.php");//conn.php stellt die verbindung her
$table = "news";
$content = mysql_query ("SELECT * from $table");


$ergebnis_array = mysql_fetch_array($content);

echo $ergebnis_array['date'];
echo $ergebnis_array['message'];
?>

wenn ich nun dieses Script auf meinem localhost (JanaServer 2) laufen lasse, gibt mir der IE Explorer folgendes zurück

Verbindung hergestellt. //Die Verbindung steht nun

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\localserver\sql.php on line 9
:

habe ich meinen SQL-Server falsch konfiguriert oder liegts an meinem Code?

Danke für Rückmeldungen

Lukas
 
Das ist der Fehler:

$content = mysql_query ("SELECT * from $table");

Schreib es am Besten so:

PHP:
$sql = "SELECT * FROM $table";
$content = mysql_query($sql);

Du kannst nicht einfach eine Variable in einen Parameter einer Funktion reinbekommen. Das ist das Problem. Mit einem extra String ist es besser, weil du auch mal den String einfach so ausgeben kannst ( echo $sql) , wenn da irgendein Fehler auftritt.
 
@KoMtuR: Sorry nimms mir nicht übel, aber deine Aussage ist totaler Blödsinn.
Wenn du das direkt ohne die überflüssige Variable machst, geht das genauso wie mit Variable (ausser das du so eben eine sparst). In Bezug auf den Debugaspekt mag das aber duchaus sinnvoll sein.

@the_luke_duke: um das zu vermeiden eben ein mysql_query() or die("":mysql_error());
oder $sth = mysql_query(...); if( !is_resource($sth) ) //bzw if (!$sth) {die("".mysql_error()) };
 
" " wird immer nach Variablen durchsucht, für
einen Performancegewinn benutzt daher bitte ' '

Also wird bei : "variable $var" der Inhalt der Variable $var angesprochen
und bei 'variable $var' der String ausgegeben.
 
Dann ists eben totaler Blödsinn. aber ich hatte noch nie Erfolg gehabt, wenn ich was direkt in die Funktion geschrieben hatte. Also hab ich gedacht das geht nicht. Kann mich ja auch eines Besseren belehren lassen. :)

Jetzt darfste mich schlagen ;)
 
Zurück