Variablen und Schleifen

supersalzi

Erfahrenes Mitglied
Hi,
ich verstehe nicht, wieso ich eine Variable, die in einer Schleife gesetzt wurde nicht auserhalb der schleife abrufen kann.
PHP:
$result  = mysql_query($query);

while($all = mysql_fetch_array($result)){
	$id++;
	$all[$id] = $all;
	$db_id = $all[$id][id];
	if($db_id == $v){
		$row_is = $id;
		$row_new = $row_is + 1;
		global $next_id;           // habe es halt schon mal so versucht, hilft nix
		$next_id = $all[$row_new][id];

// hier kann man sich $next_id noch ausgeben lassen

}
echo $next_id;  // ist einfach leer

vielen dank
 
Zuletzt bearbeitet:
Weil sie nur in der Schleife bekannt ist. Das ist einfach so.
Du müsstest sie vor der Schleife wenigstens einmal setzen.
PHP:
//..
$next_id=null;
while //...

Gruß hpvw
 
Also danke erstma fuer die Grundlage ( :-( )
Ich habe $next_id jetzt mal vor der schleife mit null gesetzt. Nun bekomme ich manchmal einfache Buchstaben nach der Schleife ausgegeben und weis nicht wo die her kommen.
(bin ganz neu in dem Zeug, sorry)
Ich brauche einfach nur irgendwie diese Zahl, da ich damit Links basteln muss, und da die schleife weiterlaeuft will ich es eigentlich nicht in ihr machen.
Hat da noch jemand einen Tipp?
Vielen Dank!
 
Dir ist klar, dass es sich mit den anderen Variablen in der Schleife genauso verhält?
Alle werden bei jedem Schleifendurchlauf neu initialisiert.
So ganz sicher bin ich mir auch nicht, was der Code bezwecken soll, aber vielleicht hilft Dir dies:
PHP:
//$v muss hier auch initialisiert sein
$result = mysql_query($query);
$all = array();
$next_id = null;
$id = 0;
while($row = mysql_fetch_array($result)){
    $id++;
    $all[$id] = $row;
    if($row['id'] == $v){
        $next_id = $row['id']+1;
    }
}
echo $next_id;
Gruß hpvw
 
ok, also es ist nur ein code auszuge, klar wird $v schonmal gesetzt.
Aber dein Code hat wohl immer noch das Problem, dass $next_id am ende null oder sonstwas ist, aber nciht der Wert, den du mit $next_id = $row['id']+1; zugewiesen hast.
ich werde ma versuchen die Schleife einfach an die stelle zu machen, an der ich das zeug sowieso ausgeben will. Aber es muss doch ne leosung geben um etwas das in ner Schleife entstandne ist auserhab zu nutzen.
Trotdem ganz vielen Dank.
PS:
das ganze soll eigentlich nur die links zu den vor und zurueck Buttons in meiner fotogallery erzeugen: http://www.salzinet.com/php/index.php?a=fotos&b=bild&s=62&q=&v=3&t=3
(baustelle, da ich online entwickel --> ist halt nicht mein pc aber flatrate
 
Ach so, das soll eine Blätterfunktion sein.
Schau doch mal in das Tutorial.
Blätterfunktionen (auch wenn nur ein Datensatz geblättert wird) löst man normalerweise mit der SQL-Anweisung LIMIT und nicht über die ID.

Gruß hpvw
 
wie bloed kann der Mensch eigentlich sein?
Ich habe die anderen Seiten auch mit LIMIT geblaetert, aber aus irgendeinem Grund dachte ich das geht hier nicht so gut. Entwerder ich bin jetzt zu meude um den Grund wieder zu erkennen, oder ich habe es verpeilt.
Wir werden Morgen sehen, auf jeden Fall vielen Dank erstmal, allerdings so ganz werde ich um mein schleifchen wohl nicht drumrum kommen, denn es muss noch bissle mehr als blaettern passieren.
 
Noch zu dem letzten Code:
Nach den weiteren Erklärungen müßte es glaube ich eher so heißen:
PHP:
//$v muss hier auch initialisiert sein
$result = mysql_query($query);
$all = array();
$next_id = null;
$id = 0;
while($row = mysql_fetch_array($result)){
    $id++;
    $all[$id] = $row;
    if($id == $v){
        $next_id = $id+1;
    }
}
echo $next_id;
Auch wieder nur ein Versuch.

Gruß hpvw
 
Hi, mit Limit ging doch nicht so richtg, d.h. geht schon, aber ich musste die id werte sowieso wissen, also kann man sie auch gleich benutzen.
sieht jetzt so aus:
PHP:
$v = $_GET['t'];		// v (view) = datensatz id
$quer = $_GET['q'];		// sql query fuer WHERE =
$t = $_GET['t'];		// fuer breadcrump

require('scripts/db-access.inc.php');		// log in db

// limitlose abfrage fuer positionsbestimmung innerhalb d suchergebnisses
if(empty($quer)){											
	$check_c = "SELECT *  from fotos ; ";
}else{
	$check_c = "SELECT *  from fotos WHERE $quer; ";
}	
$res_c  = mysql_query($check_c);	

$sum = mysql_num_rows($res_c);				// ermittelt die summe der suchergebnisse									

while($row_c = mysql_fetch_array($res_c)) {		// geht alle arrays durch
	$id_c++;
	$row_c[$id_c] = $row_c;
	
	if($x_n == true){							// holt id aus dem nachfolgenden datensatz fuer next --> id_n
		$id_n = $row_c[id];
		break ;
	}
	
	if($row_c[id] == $v){						// wenn $v (uebermittelte db id) gleich ausgelesenen db id ist
		$x_n = true;
		$pos_c = $id_c;									// wird die position im sucherergebnins bestimmt
	}											
}
// sucht nach id fuer back link
$lim_b = $pos_c -2;											// limit fuer suche nach id fuer back link

if(empty($quer)){											// sucht id fuer back link
	$check_cb = "SELECT *  from fotos LIMIT $lim_b,1; ";
}else{
	$check_cb = "SELECT *  from fotos WHERE $quer LIMIT $lim_b,1; ";
}	
$res_cb  = mysql_query($check_cb);
$row_cb = mysql_fetch_array($res_cb);
$id_b = $row_cb[id];					// seltzt id fuer back link

$id = $v;								// aktuelle id wurde in v uebermittelt

// laed aktuellen datensatz
$sql = "SELECT *  from fotos WHERE id='$id'; "; 
$res  = mysql_query($sql);
$row = mysql_fetch_array($res);

// arbeitet ergebnis auf
$src = "content/fotos/img/$row[id].jpg";
$img_title = "$row[title]";
$place = "Ort: <span>$row[place]</span> &middot; ";
$region = "Region: <span>$row[region]</span> &middot; ";
$country = "Land: <span>$row[country]</span> &middot; ";
$date = "Datum: <span>$row[date]</span> &middot; ";
$by = "Photograph: <span>$row[by]</span> &middot; ";

// gibt inhalt aus
echo "<div class=\"big-img\">\n
		<img src=\"$src\" alt=\"$img_title\" id=\"big-img\"/>\n
		<p class=\"photo\">Title: <span>$img_title</span></p>\n
		<p class=\"photo\">&middot; $place $region $country $date $by</p>\n
		</div>\n";

// links next und back
// next
$t_n = $id_n;
// back
$t_b = $id_b;

// link fuer zurueck zum album
if(empty($quer)){					// holt kriterium aus query, da in es in $t verloren geganen ist.
	$t_q = "gesamt";
}else{
	$t_q = $quer;
	$t_q = strchr($t_q, "'");
	$t_q = strtr($t_q, array("'" => ''));
}


$lim_m = $pos_c + 10;	// nimmt die position die oben ermittelt wurde und ermittlet limit fuer thumb page
$lim_m = $lim_m - 1;					
$lim_m = $lim_m / 10;					
$lim_m = floor($lim_m);	
$lim_m = $lim_m - 1;
$lim_m = $lim_m * 10;

$main_back = "<a href=\"index.php?a=fotos&amp;b=album&amp;q=$quer&amp;l=$lim_m&amp;t=$t_q\" class=\"a3\">zur&uuml;ck zum Album: $t_q</a>";  
?>

<div id="control">
<?php

if($pos_c > 1){
	echo "<a id=\"back\" class=\"a1\" href=\"index.php?a=fotos&amp;b=bild&amp;q=$quer&amp;t=$id_b\"> < zur&uuml;ck </a>";			
}else{
	echo "<span id=\"back\"></span>";
}

if($pos_c != $sum){
	echo "<a id=\"next\" class=\"a1\" href=\"index.php?a=fotos&amp;b=bild&amp;q=$quer&amp;t=$id_n\"> vor > </a>";
}else{
	echo "<span id=\"next\"></span>";
}
?>
<div id="info">
<?php

echo "<p class=\"thumb\">Seite <b>$pos_c</b> von <b>$sum</b></p> \n"; 
echo $main_back;
?>
	
</div>
</div>

das ist mein erster code laenger als 10 zeilen... warhscheinlich furchtbar
Trotzdem nochmal ganz vielen dank.
funktionieren tut es hier
 
Zurück