| 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! Post your PHP questions here! |
 |

18-11-2009, 15:06
|
|
m-werk
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Beiträge: 168
|
|
bei Klick auf Seitennavigation erscheint wieder Login Formular
Hallo,
ich habe eine admin.php datei, welche mit funktionen aufgebaut ist
PHP-Code:
function main()
{
// Aktion lesen
$action = 0;
if (isset($_REQUEST['action']))
$action = $_REQUEST['action'];
switch ($action)
{
case 0: showLogin(); break; // Login Formular
case 1: doLogin(); break; // Wenn Login erfolgreich, Insert-Maske
case 2: insertNews(); break;// Schreiben in die Datenbank (Insert)
case 3: deleteNews(); break;// Newsletter Löschen
case 4: showAdmin(); break; // Newsletter Bearbeiten
case 5: showCompany(); break; // Suchformular
default: showLogin(); break;
}
}
Es wird also zuerst das Loginformular aufgerufen. Dahinter wird der Check gemacht "doLogin()"
Wenn das Login OK ist, wird "case 5: showCompany" aufgerufen.
Soweit funktioniert das alles. Nun habe ich in der funktion showCompany eine Seitennavigation dazugegeben.
Wenn ich in dieser Navigation auf eine andere Seitenzahl klicke, ist der Link zwar richtig, aber es wird wieder das Login Formular angezeigt.
PHP-Code:
...
$links[] = '<a href="admin.php?go='.$i.'">'.$i.'</a>';
...
was mach ich da falsch?
LG, m-werk
|

18-11-2009, 15:10
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
?go=irgendwas ist nicht dasselbe wie ?action=irgendwas, da du in der Navigation aber Links mit go generierst, tritt der default-Wert für action (0) in Kraft und sorgt für den Login.
Gruß,
Amica
|

18-11-2009, 15:12
|
|
m-werk
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Beiträge: 168
|
|
das leuchtet mir ein. leider habe ich den ursprünglichen code nicht selbst geschrieben, sondern ein ehemaliger mitarbeiter hat den erstellt, und nun wollte ich einfach eine navigation einbauen, da es in der datenbank schon sehr viele datensätze diesbezüglich gibt.
Wie bzw. was muss ich nun wie tun?
__________________
LG, m-werk
|

18-11-2009, 15:15
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von m-werk
Wie bzw. was muss ich nun wie tun?
|
Die Links so erzeugen, dass der action-Parameter durchgeschleift wird:
PHP-Code:
$links[] = '<a href="admin.php?action='.$action.'&go='.$i.'">'.$i.'</a>';
Allerdings scheint mir das ganze ziemlich anfällig. Für mich sieht es so aus, als ob man auch völlig ohne Anmeldung eine beliebige Seite aufrufen kann, wenn man die entsprechenden Parameter kennt.
|

18-11-2009, 15:16
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
Zitat:
Zitat von AmicaNoctis
Die Links so erzeugen, dass der action-Parameter durchgeschleift wird
|
Oder du arbeitest mit Sessions und erweiterst die Bedingung entsprechend.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

18-11-2009, 15:30
|
|
m-werk
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Beiträge: 168
|
|
Da die Navigation und die dazugehörige Abfrage in einer Funktion verpackt sind, muss ich dann $action=5; schreiben, oder? Sonst weiss der link nicht, welche Aktion gemeint ist.
Das hab ich nun auch so gemacht. Funktioniert zwar, aber nun habe ich noch kein ergebniss.
Ich habe auch eine Combobox, die zuvor ausgefüllt weden muss, damit das Ergebniss erscheint.
Das funktioniert prima nach dem Login.
PHP-Code:
$ausCID = 0;
$ausCName = 'leer';
$str_sql = 'SELECT * FROM company';
$result = $db->select($str_sql,1);
$option_str = '';
foreach ($result as $row)
{
$selected = '';
if ($CID == $row[0])
{
$selected = 'selected';
$ausCID = $row[0];
$ausCName = $row[1];
}
$option_str .= '<option value="'.$row[0].'" '.$selected.'>'.$row[1].'</option>';
}
echo '<form name="search_news" action="admin.php" method="post">';
echo '<table id="tbl_insert">';
echo ' <tr>';
echo ' <td style>Unternehmen: <select style="width:200px" name="CID">'.$option_str.'></select></td>';
echo '</tr><tr>';
echo ' <td style="padding-left:97px"><input type="submit" class="button1" value="Suchen" /></td>';
echo '</tr></table>';
echo '<input type="hidden" name="action" value="5" />';
echo '</form>';
Dannach wird folgendes SQL aufgerufen:
PHP-Code:
$str_sql = 'SELECT * FROM newsletter WHERE CID="'.$CID.'" ORDER BY NDate DESC LIMIT '.$start.','.$datensaetze_pro_seite;
$result = $db->select($str_sql,1);
So, aber auch für die Navigation habe ich ein SQL:
PHP-Code:
//Select-Abfrage für die Navigation
$str_sql = 'SELECT * FROM newsletter WHERE CID="'.$CID.'" ORDER By NDATE DESC';
Wenn ich nun auf eine Navigationsseite klicke, kommt eine leere Seite und ich muss wieder ein Unternehmen aus der Combobox auswählen.
Dann sehe ich wieder nur die 1. Seite
__________________
LG, m-werk
|

18-11-2009, 15:47
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Trotz des vielen Codes ist das grad irgendwie nicht nachzuvollziehen. Ich habe eine Vermutung, aber die kann ich mit dem geposteten Code weder bestätigen noch widerlegen.
Definierst du bestimmte Variablen außerhalb von Funktionen und versuchst dann, innerhalb einer Funktion darauf zuzugreifen? Z. B. $action, $CID, ...
Wenn ja, das geht nicht, weil Funktionen ihren eigenen Scope haben. Man kann zwar innerhalb der Funktion eine Variable als global deklarieren und somit eine äußere Variable in den Funktionsscope importieren, aber das ist schlechter Stil. Besser wäre es, die benötigten Variablen mit an die Funktion zu übergeben und deren Signatur entsprechend zu ergänzen.
Edit: wenn du zu dem Ersteller noch einen guten Draht hast (bei ehemaligen Mitarbeitern weiß man das ja nicht so), kannst du den ja fragen, ob er das in Ordnung bringt. Noch besser wäre es allerdings, einen Profi zu bezahlen, damit der das nochmal neu und ordentlich baut. Aus deinem geposteten Code sind schon jetzt Sicherheitsmängel erkennbar (SQL Injection). Falls das im Intranet läuft, mag es noch gehen, aber im Internet könnte es in dieser Form gefährlich werden.
Geändert von AmicaNoctis (18-11-2009 um 15:53 Uhr)
|

18-11-2009, 16:12
|
|
m-werk
Registrierter Benutzer
|
|
Registriert seit: Jan 2006
Beiträge: 168
|
|
Naja, hab schon noch kontakt zu ihm, aber er tut nichts mehr.
Aber egal, ich hab es trotzdem selbst geschaft. Hab auch im Link der Navigation einen weiteren Parameter übergeben müssen. Somit laufen alle Tests sehr gut und es funktioniert.
DANKE für die Hilfe
__________________
LG, m-werk
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| 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.
HTML-Code ist aus.
|
|
|
|
PHP News
|