zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Fehler in PHP-Code

Antwort
 
LinkBack Themen-Optionen Ansicht
  #11 (permalink)  
Alt 27.02.2018, 09:57
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 05.11.2015
Beiträge: 197
David1997 befindet sich auf einem aufstrebenden Ast
Standard

Hallo Beat,
versuche mal folgendes Script:

PHP-Code:
<?php
try {
    
$pdo = new PDO(
    
'mysql:host=localhost;
    dbname=db_name;port=3306'
,
    
'username',
    
'password',
    array(
    
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
    
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch (
PDOException $e) {
    echo 
'Connection failed: ' $e->getMessage();
    exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta charset="utf-8">
<style>
html, body    {
    font-family:'SF UI Text','Helvetica Neue',Arial,sans-serif;
}
</style>
</head>
<body>
<title>Daten aus einer Datenbank abrufen</title>

<dl>
<?php
$stmt 
$pdo->prepare('SELECT vorname, nachname, addresse_HN, plz FROM test_db WHERE id = :id');

$stmt->execute(array(':id' => $_GET['id']));

$results $stmt->fetchAll();

if (empty(
$results)) {
    echo 
"Es existiert kein Eintrag für die ID ".$_GET['id']."!";
} else {
foreach( 
$results as $row ) {

echo 
"<dt>Name:</dt>";
echo 
"<dd>".$row['vorname']." ".$row['nachname']."</dd>";

echo 
"<dt>Straße und Hausnummer:</dt>";
echo 
"<dd>".$row['addresse_HN']."</dd>";

echo 
"<dt>PLZ:</dt>";
echo 
"<dd>".$row['plz']."</dd>";

}
}
?>
</dl>

<p><a href="list.php">Zurück zur Liste</a></p>

</body>
</html>
Die ID hängst du als GET-Parameter an die URL. Also zum Beispiel: www.meine-domain.de/kontakt_details.php?id=2

In phpMyAdmin bei im SQL-Tab gibst du das ein und führst es aus:

Code:
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
CREATE TABLE `test_db` (
`id` int(5) NOT NULL,
`vorname` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`nachname` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`addresse_HN` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`plz` varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
INSERT INTO `test_db` (`id`, `vorname`, `nachname`, `addresse_HN`, `plz`) VALUES
(1, 'Horst', 'Müller', 'Karl Marx Straße 55', '13768'),
(2, 'Dieter', 'Holz', 'Bergweg 15', '19254');
ALTER TABLE `test_db`
ADD PRIMARY KEY (`id`);
ALTER TABLE `test_db`
MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
COMMIT;
Wenn noch Fragen sind, gib mir einfach Bescheid.

Grüße,
David.

Geändert von David1997 (27.02.2018 um 10:07 Uhr)
Mit Zitat antworten
Sponsored Links
  #12 (permalink)  
Alt 27.02.2018, 12:18
Neuer Benutzer
neuer user
 
Registriert seit: 25.02.2018
Beiträge: 7
bidu2 befindet sich auf einem aufstrebenden Ast
Standard

Hallo David

Vielen Dank!
Funktioniert nun hervorragend.
Hätte aber noch eine Frage: ist es auch möglich GET über zwei Datensätze abzurufen? zb id und cl_id
Der AbfrageLink würde dann so aussehen: www.meinedomain.de/index.php?id=142&cl_id=345

wie müsste dann dies hier aussehen?
$stmt = $pdo->prepare('SELECT vorname, nachname, addresse_HN, plz FROM test_db WHERE id = :id');

$stmt->execute(array(':id' => $_GET['id']));

Fall dies zu Kompliziert sein sollte, kann ich mit der Eindatensatz Variante auch leben

Gruss Beat

Geändert von bidu2 (27.02.2018 um 12:23 Uhr)
Mit Zitat antworten
Sponsored Links
  #13 (permalink)  
Alt 27.02.2018, 12:25
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 05.11.2015
Beiträge: 197
David1997 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von bidu2 Beitrag anzeigen
Hallo David

Vielen Dank!
Funktioniert nun hervorragend.
Hätte aber noch eine Frage: ist es auch möglich GET über zwei Datensätze abzurufen? zb id und cl_id
Der AbfrageLink würde dann so aussehen: www.meinedomain.de/index.php?id=142&cl_id=345

wie müsste dann dies hier aussehen?
$stmt = $pdo->prepare('SELECT vorname, nachname, addresse_HN, plz FROM test_db WHERE id = :id');

$stmt->execute(array(':id' => $_GET['id']));

Fall dies zu Kompliziert sein sollte, kann ich mit der Eindatensatz Variante auch leben

Gruss Beat
Hallo Beat,
schön, dass es klappt.

Willst du sicher immer nur eine oder zwei ID's haben, oder könnten es auch mal mehr sein?

Ist das Format ?id=142&cl_id=345 zwingend? Müssen es id und cl_id sein? Oder, ginge zum Beispiel auch ?id=142_345?

Grüße,
David.
Mit Zitat antworten
  #14 (permalink)  
Alt 27.02.2018, 12:47
Neuer Benutzer
neuer user
 
Registriert seit: 25.02.2018
Beiträge: 7
bidu2 befindet sich auf einem aufstrebenden Ast
Standard

Hallo David
Es müssten immer zwei sein. Es geht um eine Abfrage, damit ein User zum Beispiel www.meinedomain.de/index.php?id=142 aufrufen kann und dann den Datensatz, wenn die Zahl 142 auf 143 geändert wird zeigt es den nächsten Datensatz.
Dies soll aber verhindert werden, weil Datensatz ID143 darf nur ein anderer zugewiesener User sehen.
Mit zwei Datensatz abfrage, könnte man dies verhindern. Es spielt keine Rolle ob id oder name oder auch email.
Ich weiss nur, dass man die Domain /index.php?id=142&cl_id=345 so aufgerufen werden kann. Möglich wäre aber auch zb. /index.php?name=beat&id=345

Grüsse
Beat
Mit Zitat antworten
  #15 (permalink)  
Alt 27.02.2018, 12:52
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 05.11.2015
Beiträge: 197
David1997 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von bidu2 Beitrag anzeigen
Hallo David
Es müssten immer zwei sein. Es geht um eine Abfrage, damit ein User zum Beispiel www.meinedomain.de/index.php?id=142 aufrufen kann und dann den Datensatz, wenn die Zahl 142 auf 143 geändert wird zeigt es den nächsten Datensatz.
Dies soll aber verhindert werden, weil Datensatz ID143 darf nur ein anderer zugewiesener User sehen.
Mit zwei Datensatz abfrage, könnte man dies verhindern. Es spielt keine Rolle ob id oder name oder auch email.
Ich weiss nur, dass man die Domain /index.php?id=142&cl_id=345 so aufgerufen werden kann. Möglich wäre aber auch zb. /index.php?name=beat&id=345

Grüsse
Beat
So?

PHP-Code:
<?php 
try { 
    
$pdo = new PDO
    
'mysql:host=localhost; 
    dbname=database_name;port=3306'

    
'username'
    
'password'
    array( 
    
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
    
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 
} catch (
PDOException $e) { 
    echo 
'Connection failed: ' $e->getMessage(); 
    exit; 

?> 
<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> 
<meta charset="utf-8"> 
<style> 
html, body    { 
    font-family:'SF UI Text','Helvetica Neue',Arial,sans-serif; 

</style> 
</head> 
<body> 
<title>Daten aus einer Datenbank abrufen</title> 

<dl> 
<?php 
$stmt 
$pdo->prepare('SELECT vorname, nachname, addresse_HN, plz FROM test_db WHERE id = :id OR id = :cl_id'); 

$stmt->execute(array(':id' => $_GET['id'], ':cl_id' => $_GET['cl_id'])); 

$results $stmt->fetchAll(); 

if (empty(
$results)) { 
    echo 
"Es existiert kein Eintrag für die ID ".$_GET['id']."!"
} else { 
foreach( 
$results as $row ) { 

echo 
"<dt>Name:</dt>"
echo 
"<dd>".$row['vorname']." ".$row['nachname']."</dd>"

echo 
"<dt>Straße und Hausnummer:</dt>"
echo 
"<dd>".$row['addresse_HN']."</dd>"

echo 
"<dt>PLZ:</dt>"
echo 
"<dd>".$row['plz']."</dd>"



?> 
</dl> 

<p><a href="list.php">Zurück zur Liste</a></p> 

</body> 
</html>
Mit Zitat antworten
  #16 (permalink)  
Alt 27.02.2018, 13:33
Neuer Benutzer
neuer user
 
Registriert seit: 25.02.2018
Beiträge: 7
bidu2 befindet sich auf einem aufstrebenden Ast
Standard

Hallo David.
Woow.. ja genau so, mit einer kleinen Abänderung:
$stmt = $pdo->prepare('SELECT vorname, nachname, addresse_HN, plz FROM test_db WHERE id = :id OR id = :cl_id');

Damit beide IDs berücksichtigt werden muss id = :id AND cl_id = :cl_id'); stehen
Funktioniert wie gewünscht!
Vielen Dank

Grüsse
Beat
Mit Zitat antworten
  #17 (permalink)  
Alt 27.02.2018, 13:49
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 05.11.2015
Beiträge: 197
David1997 befindet sich auf einem aufstrebenden Ast
Standard

Ach, so brauchst du das, das war mir nicht klar.

cl_id ist also eine Art Password? Einen Eintrag einer bestimmten ID kann ich also nur öffnen, wenn ich die ID für cl_id habe?

Wirklich sicher ist das aber nicht und lässt sich sehr einfach knacken. Es sollte zumindest keine einzelne Zahl sein. Es sollte dann schon eher wie ein Passwort sein, wenn es halbwegs sensible Daten sind.

Dieses sollte außerdem per POST, nicht per GET übertragen werden, sonst kann man es ja im Browserverlauf oder so sehen…

Wenn noch Fragen sind, helfe ich gerne.
Mit Zitat antworten
  #18 (permalink)  
Alt 27.02.2018, 14:09
Neuer Benutzer
neuer user
 
Registriert seit: 25.02.2018
Beiträge: 7
bidu2 befindet sich auf einem aufstrebenden Ast
Standard

Hallo David
Ja genau, wenn ID und CL_ID von der Datenbank nicht stimmen, kann man nicht öffnen.
Ich werde eine Benutzer ID und die dazugehörige Email verwenden.
Das ganze ist sowieso in einem Passwortgeschützen Raum.
Es wäre also schon fast Zufall wenn jemand die Emailadresse eines anderen Kunden kennen würde und dann noch dazu die Passende ID herausfinden würde.
Grüsse
Beat
Mit Zitat antworten
  #19 (permalink)  
Alt 27.02.2018, 14:15
Erfahrener Benutzer
XHTMLforum-Mitglied
Thread-Ersteller
 
Registriert seit: 05.11.2015
Beiträge: 197
David1997 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von bidu2 Beitrag anzeigen
Hallo David
Ja genau, wenn ID und CL_ID von der Datenbank nicht stimmen, kann man nicht öffnen.
Ich werde eine Benutzer ID und die dazugehörige Email verwenden.
Das ganze ist sowieso in einem Passwortgeschützen Raum.
Es wäre also schon fast Zufall wenn jemand die Emailadresse eines anderen Kunden kennen würde und dann noch dazu die Passende ID herausfinden würde.
Grüsse
Beat
Okay, das sollte dann soweit in Ordnung gehen.

P.S. Den oberen Teils des Scripts wo die Datenbankverbindung aufgebaut wird, solltest die in einer extra Datei speichern und dann per php include einfügen. Das ist sicherer und du brauchst nicht in jedem Script den ganzen Block, macht die Sache ja nicht unbedingt übersichtlicher. Password, Name der Datenbank… musst du dann auch nicht in jedem Script ändern, wenn sich das mal ändern sollte.

Grüße,
David.
Mit Zitat antworten
Sponsored Links
Antwort

Stichwörter
html, php

Themen-Optionen
Ansicht

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 aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Fehler im Code oder doch nicht? Star_Scream CSS 1 09.07.2008 16:10
Fehler im Code die Formatierungen werden nicht angezeigt Basicline334ak CSS 8 09.07.2008 15:08
Dateien auslagern - Include und PHP ArcVieh Serveradministration und serverseitige Scripte 17 27.03.2008 19:09
PHP Code aus einer Datenbank beziehen und ausführen? Zen5656 Serveradministration und serverseitige Scripte 3 03.09.2006 17:20


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:41 Uhr.