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, 19: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, 19: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, 20: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 20:28 Uhr)
Mit Zitat antworten
  #4 (permalink)  
Alt 12-03-2005, 20: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, 21: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, 08: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, 16: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 16:24 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 16-03-2005, 16: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, 16: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

Projektmanagement Damals und Heute
Projektmanagement Damals und HeuteWerfen Sie einen Blick auf das, was sich verändert hat, und entdecken Sie, wo die Zukunft dieses Gebietes hinsteuert.

18.01.2021 | Berni

Arbeitsmanagement-Tools
Arbeitsmanagement-ToolsWarum jedes Team Arbeitsmanagement-Tools benötigt. Man schätzt, dass 25% eines durchschnittlichen Mitarbeiter-Tages durch ineffiziente Arbeit vergeudet werden.

11.12.2020 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

21.10.2020 Berni | Kategorie: PHP/ Anzeigenmarkt
Sendeplan Script inkl. Wunsch- und Grußbox + Kick-System + Bewerbungssystem

Das professionelle Sendeplan PHP Script inkl. Wunsch- und Grußbox + Kick-System für dein Webradio. Der übersichtliche Sendeplan bietet deinen Moderatoren und Zuhörern die perfekte Übersicht der aktuellen Shows! Du kannst nicht nur Sendungen eintragen, s

20.10.2020 drcomputer | Kategorie: PHP/ Web Radio
Newsmanager 2

Der Newsmanager 2 ist sehr Vielfältig und kann News schreiben, Newsletter versenden und RSS Feeds in einem erzeugen.

20.10.2020 Stephan_1972 | Kategorie: PHP/ News
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:20 Uhr.