php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 12-03-2005, 18:22
Boron
 Registrierter Benutzer
Links : Onlinestatus : Boron ist offline
Registriert seit: Aug 2004
Beiträge: 191
Boron ist zur Zeit noch ein unbeschriebenes Blatt
Standard [PHP5] Wert des darüberliegenden Feldes in einer While-Schleife

Hallo,

ich lese aus einer Datenbank Werte mit einer While-Schleife aus:

PHP-Code:
$result mysql_query("SELECT * FROM $table WHERE user = '".$user."' ORDER BY sortpos");
while (
$data mysql_fetch_array($result)) 
{   
....
echo 
$data['ID'];
echo 
$data['name'];
 
.... 
etc.


Wie kann ich jetzt herausfinden, welche ID das vorhergehende bzw. das nachfolgende Feld hat, wo allerdings auch user = '".$user."' der Fall ist?

Thx & Greetz
Boron
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 12-03-2005, 18:30
penizillin
 PHP Guru
Links : Onlinestatus : penizillin ist offline
Registriert seit: Feb 2004
Beiträge: 10.166
penizillin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

drei datensätze auslesen, statt einem.
Mit Zitat antworten
  #3 (permalink)  
Alt 12-03-2005, 19:21
Boron
 Registrierter Benutzer
Links : Onlinestatus : Boron ist offline
Registriert seit: Aug 2004
Beiträge: 191
Boron ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke.
Ich habe das jetzt so gelöst:

PHP-Code:
$result mysql_query("SELECT * FROM $table WHERE user = '".$user."' ORDER BY sortpos");
while (
$data mysql_fetch_array($result)) 
{   


$pos $data['sortpos'];

$res mysql_query("SELECT ID,sortpos FROM $table WHERE user = '".$user."' AND sortpos < '".$pos."' LIMIT 1");
$IDminus mysql_fetch_array($res);
            
$res mysql_query("SELECT ID,sortpos FROM $table WHERE user = '".$user."'  AND sortpos > '".$pos."' LIMIT 1");
$IDplus mysql_fetch_array($res);


//Ausgabe
echo "aktuelle ID: " $data['ID'] . "<br>";
echo 
"vorherige ID: " $IDminus['ID'] . "<br>";
echo 
"nächste ID: " $IDplus['ID']; 



Geht soweit auch. Aber geht das noch schöner / anders / besser?

Geändert von Boron (12-03-2005 um 19:28 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 12-03-2005, 19:30
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

PHP-Code:
//initialisieren
$davor $danach 'gibt es nicht';
//Datenbank abfragen
$result mysql_query("SELECT id FROM $table WHERE user = '".$user."' ORDER BY sortpos");
//Datensätze in Array einlesen
while ($data[] = mysql_fetch_array($result));
array_pop($data);
$count count($data)
//Datensätze abarbeiten
for ($i 0$i $count$i++) {
  echo 
'ID: '.$data[$i]['id'].'<br />';
  echo 
'ID davor: '.$davor.'<br />';;
  
$danach = isset($data[$i 1]) ? $data[$i 1]['id'] : 'gibt es nicht';
  echo 
'ID danach: '.$danach.'<hr />';
  
$davor $data[$i]['id'];

Dass du die sortpos ausgibst und nicht die IDs, so wie du's im Text formuliert hast, weißt du?
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #5 (permalink)  
Alt 15-03-2005, 20:01
Boron
 Registrierter Benutzer
Links : Onlinestatus : Boron ist offline
Registriert seit: Aug 2004
Beiträge: 191
Boron ist zur Zeit noch ein unbeschriebenes Blatt
Standard

mrhappiness: 'Tschuldigung, aber ich hab' damit jetzt mal nen bisschen "rumprobiert" (ja, anders darf man es leider nicht sagen): Abgesehen davon, dass nicht so ganz klar ist, wo die While-Schleife beginnt und dass dort ein oder mehr Semikolons falsch gesetzt sind, bin ich mir nicht so sicher, ob array_pop (-- Liefert das letzte Element eines Arrays) da wirklich der richtige Befehl sein soll.

Zudem ist meine While-Schleife bereits etwas komplizierter aufgebaut, so dass ich ungerne aus $data ein mehrdimensionales Array machen möchte (also while ($data[] = mysql_fetch_array($result)); tutet nicht so gut bei mir).

Und hast du dir mal die Ausgabe angeschaut? So war es eigentlich nicht gedacht... (vllt. lag es auch daran, dass ich die "Fehler" nicht richtig beseitigt habe...)

Leider musste ich auch feststellen, dass mein Code von oben nicht so wirklich funktioniert.

Eigentlich geht's mir um genau dieses Problem hier: [MySQL 4.1] Werte tauschen

Aber dummerweise schaffe ich es nicht, die sortpos wirklich korrekt zu vertauschen...
Mit Zitat antworten
  #6 (permalink)  
Alt 16-03-2005, 07:26
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

Zitat:
Original geschrieben von Boron
Abgesehen davon, dass nicht so ganz klar ist, wo die While-Schleife beginnt
bei while
Zitat:
und dass dort ein oder mehr Semikolons falsch gesetzt sind
welches?
Zitat:
bin ich mir nicht so sicher, ob array_pop (-- Liefert das letzte Element eines Arrays) da wirklich der richtige Befehl sein soll.
ja, denn array_pop liefert das letzte element eines arrays und entfernt es dabei auch aus dem array

wie sieht die ausgabe denn aus?

was den rest angeht:
du selektierst nur auf den user, nicht auf die sortpos, wie also willst du einträge vertauschen?

Du willst zwei Beiträge miteinander tauschen?
Dann mach's doch so, wie es in dem Post steht.
Wenn du nicht klar kommst, poste mal den kompletten Code (ausnahmsweise)

EDIT:
da fehlte ein komma nach dem count, die zwei aufeinanderfolgenden ; sind zwar unschön, tun der funktionalität aber keinen abbruch

PHP-Code:
//initialisieren
$davor $danach 'gibt es nicht';
//Datenbank abfragen
$result mysql_query("SELECT id FROM $table WHERE user = '".$user."' ORDER BY sortpos");
//Datensätze in Array einlesen
while ($data[] = mysql_fetch_array($result));
array_pop($data);
$count count($data);
//Datensätze abarbeiten
for ($i 0$i $count$i++) {
  echo 
'ID: '.$data[$i]['id'].'<br />';
  echo 
'ID davor: '.$davor.'<br />';
  
$danach = isset($data[$i 1]) ? $data[$i 1]['id'] : 'gibt es nicht';
  echo 
'ID danach: '.$danach.'<hr />';
  
$davor $data[$i]['id'];

so besser? (semikolon ergänzt/entfernt)
Du bekommst so alle Datensätze von $user sortiert nach sortpos und es wird dir - sofern vorhanden - die id des datensatzes davor und danach (festgelegt durch die sortierung nach sortpos) ausgegeben

wenn es nicht das war, was du wolltest, dann liegt's vermutlich daran, dass du nicht genung input geliefert hast
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #7 (permalink)  
Alt 16-03-2005, 15:19
Boron
 Registrierter Benutzer
Links : Onlinestatus : Boron ist offline
Registriert seit: Aug 2004
Beiträge: 191
Boron ist zur Zeit noch ein unbeschriebenes Blatt
Standard sortpos tauschen

Erstmal danke, mrhappiness.

Am besten ich stelle mein Problem nochmal neu, da es doch ein wenig anders als der Eingangspost ist.



Ich möchte die sortpos von zwei Einträgen ändern -- eigentlich Einträge, die in einer Tabelle aufgelistet werden, nach oben bzw. unten verschieben

Hier mein Anfangscode: (der komplette Code würde doch etwas den Rahmen sprengen, deshalb stark gekürzt )

PHP-Code:
<table>

<?
$result 
mysql_query("SELECT * FROM $table_leserliste WHERE austraeger='".$name."' ORDER BY sortpos");

while (
$data mysql_fetch_array($result))
{
?>
  
 <tr>
     <td><? echo $data["name"]; ?></td>
     <td><? echo $data["adresse"]; ?></td>
     <td><? echo $data["telefonnr"]; ?></td>
 
     <? // usw....... ?>

     <td><? // HIER soll jetzt ein Link zum Vertauschen der [FONT=courier new]sortpos[/FONT] hin ?>nach oben</td>
     <td>nach unten (ebenfalls als Link) <-- WIE?</td>

 </tr>

<?
}    //while ende
?>

</table>
So, das ist also die Situation.




Mein Versuch sieht im Moment so aus -- dabei sende ich die zwei IDs der Einträge an eine extra Datei, die dann die sortpos vertauscht.



Erstmal die zwei Tabellenspalten aus meinem o.g. Script ersetzt:

PHP-Code:
<td><?

// herausfinden, welche ID die Einträge dadrüber/dadrunter haben
$pos $data["sortpos"];

$res mysql_query("SELECT * FROM $table_leserliste WHERE austraeger = '".$name."' 
AND sortpos < '"
.$pos."' LIMIT 1");

$IDminus mysql_fetch_array($res);
            
// Link zur Änderung der sortpos
 
if($IDminus != "") { ?>
   <a href="admin_leserliste_sort.php?action=change&id1=
  <? echo $data["id"]; ?>&id2=<? echo $IDminus["id"]; ?>">nach oben</a>
       <? ?>
</td>



            
<td>
<? 
// nach unten
$res mysql_query("SELECT * FROM $table_leserliste WHERE austraeger = '".$name."'  
AND sortpos > '"
.$pos."' LIMIT 1");

$IDplus mysql_fetch_array($res);
       
// Link zur Änderung der sortpos
if($IDplus != "") { ?>
  <a href="admin_leserliste_sort.php?action=change&id1=
    <? echo $data["id"]; ?>&id2=<? echo $IDplus["id"]; ?>">nach unten</a>
<? ?>
</td>
Meine Idee war also: Ich übergebe die aktuelle ID und die ID, mit der die erste ID vertauscht werden soll, an admin_leserliste_sort.php, wo dann der "sortpos-Tausch" stattfindet.

So, als Problem hat sich aber herausgestellt, dass nicht immer die korrekte id übergeben wird!!
Sprich, so bringt mir der Code nichts, obwohl er eigentlich funktioniert. Manchmal werden halt ganz andere Tabelleninhalte vertauscht, als ich wollte.




Und noch der Auszug aus der admin_leserliste_sort.php: (das Vertauschen der sortpos funktioniert soweit auch!)

PHP-Code:
switch ($action)
{
default:

break;
case 
"change":

 
$id1result mysql_query("SELECT * FROM $table_leserliste WHERE id='".$id1."' LIMIT 1");
 
$id1data mysql_fetch_array($id1result);
 
 
$id2result mysql_query("SELECT * FROM $table_leserliste WHERE id='".$id2."' LIMIT 1");
 
$id2data mysql_fetch_array($id2result);
 
 
$sortpos1 $id1data["sortpos"];
 
$sortpos2 $id2data["sortpos"];
 
 
mysql_query("UPDATE $table_leserliste SET sortpos='".$sortpos2."' WHERE id='".$id1."'");
 
mysql_query("UPDATE $table_leserliste SET sortpos='".$sortpos1."' WHERE id='".$id2."'"); 

 echo 
"done.";
 
break;
}       
// Switch ende 

Wie müssen die zwei Tabellen-Links (siehe 1. code) also nun richtig aussehen?

Thx & Greetz

Geändert von Boron (16-03-2005 um 15:24 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 16-03-2005, 15:33
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

Ich gestehe, ich hab's nur überflogen, bin aber prinzipiell gut gelaunt

Baue den Link so auf:
Code:
sort.php?id=5&dir=up
oder
Code:
sort.php?id=5&dir=down
In sort.php
PHP-Code:
$sql 'SELECT id, sortpos
FROM tabelle
WHERE id = '
.$_GET['id'].'
LIMIT 1'
;
$r mysql_query($sql);
$sort['alt'] = mysql_fetch_assoc($r);

$sql 'SELECT id, sortpos
FROM tabelle
WHERE sortpos %s %d
ORDER BY sortpos %s
LIMIT 1'
;
if (
$_GET['dir'] == 'up')
  
$sql sprintf($sql'<'$sort['alt']['sortpos'], 'DESC');
else 
  
$sql sprintf($sql'>'$sort['alt']['sortpos'], 'ASC');
$r mysql_query($sql);
$sort['neu'] = mysql_fetch_assoc($r);

$sql 'UPDATE tabelle
SET sortpos = '
.$sort['neu']['sortpos'].'
WHERE id = '
.$sort['alt']['id'];
mysql_query($sql);
$sql 'UPDATE tabelle
SET sortpos = '
.$sort['alt']['sortpos'].'
WHERE id = '
.$sort['neu']['id'];
mysql_query($sql); 
ohne Gewähr, funktioniert vielleicht auch nicht richtig, aber prinzipiell sollte es klar sein jetzt
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #9 (permalink)  
Alt 16-03-2005, 15:57
Boron
 Registrierter Benutzer
Links : Onlinestatus : Boron ist offline
Registriert seit: Aug 2004
Beiträge: 191
Boron ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
bin aber prinzipiell gut gelaunt
War wohl mein Glück.


Sehr geil. Danke. Es funktioniert. (Anscheinend auch richtig.)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

SMT

Server Monitoring & Management Tool Das SMT wurde von einem Administrator für Administratoren entwickelt, es vereinfacht den Alltag in der klassischen Administration und Verwaltung. Mit dem SMT kannst Du alle Deine Server & Dienste verwalten und überwach

04.09.2020 palle_1977 | Kategorie: PHP
numaeks Web-Farbmixer

Die RGB-Farben lassen sich hier auf unterschiedliche Weise mischen. Zur Einstellung werden auch die Dreh- und Schieberegler mit Canvas verwendet. Gespeichert werden die Farben in einem Cookie.

04.09.2020 numaek | Kategorie: JAVASCRIPT/ Tools
phplinX-Erotikportal 4 ansehen phplinX-Erotikportal 4

Erweiterbares Portal speziell für Erotik mit den Modulen Webkatalog, Bannermanagement und Kleinanzeigenmarkt. Sämtliche Module können über einen einzigen Adminbereich verwaltet werden.

18.06.2020 Cosinus14 | Kategorie: PHP/ Anzeigenmarkt
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:03 Uhr.