php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen
Alt 02.12.2009, 09:30  
Neuer Benutzer
 
Registriert seit: 26.11.2009
Beiträge: 6
PHP-Kenntnisse:
Anfänger
Jamba1103 befindet sich auf einem aufstrebenden Ast
Standard PLZ-Finder

Hallo.

Ich bin totaler Neuling. Habe ein Script erstellt, wo ich auf die Datenbank zugreifen kann und mir die Tabelle angezeigt wird.

Kann mir jemand einen Tip geben, wie ich ein Fenster bekomme wo ich die Postleitzahl eingeben kann und mir dann die Postleitzahlen +-100 angezeigt werden. Kann ich durch einfache Änderungen das Design verändern?

Diese Auswahl soll auf unserer Internetseite stehen und gesichert sein.
Gibt es da vielleicht eine sichere Lösung, damit nicht jeder vollen Zugriff auf unsere Datenbank hat?

Kann mir da jemand weiterhelfen?

Anbei das Script:

<html>
<head>
<title> Datenbank ausgeben!</title>
</head>
<body>

<?php

@mysql_connect("ORT DER DATENBANK", "BENUTZERNAME", "KENNWORT")
or die ("Verbindung zu MySQL gescheitert!");


@mysql_select_db("test")
or die ("Datenbankzugriff gescheitert!");



$res = mysql_query("SELECT name, strasse, plz, ort, telefon FROM kunde_plz order by plz");



echo "<table border>";
echo "<tr>";
echo "<td><b>Name</b></td>";
echo "<td><b>Strasse</b></td>";
echo "<td><b>Postleitzahl</b></td>";
echo "<td><b>Ort</b></td>";
echo "<td><b>Telefonnummer</b></td>";
echo "</tr>";

while ($ds = mysql_fetch_object($res)){
$name = $ds -> name;
$strasse = $ds -> strasse;
$plz = $ds -> plz;
$ort = $ds -> ort;
$telefon = $ds -> telefon;


echo "<tr>";
echo "<td>$name</td>";
echo "<td>$strasse</td>";
echo "<td>$plz</td>";
echo "<td>$ort</td>";
echo "<td>$telefon</td>";
echo "</tr>";
}
echo "</table>";



?>
</body>
</html>


Vielen Dank.
Jamba1103
Jamba1103 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.12.2009, 09:49  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.419
PHP-Kenntnisse:
Fortgeschritten
mepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunft
Standard

Willkommen im Forum. Bitte nacheditieren. Es gibt hier beim Posten einen Button, der PHP-Code schön macht bzw. nutze die BB-Tags.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline  
Alt 02.12.2009, 10:09  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 413
PHP-Kenntnisse:
Fortgeschritten
Dreamwatcher ist ein LichtblickDreamwatcher ist ein LichtblickDreamwatcher ist ein LichtblickDreamwatcher ist ein LichtblickDreamwatcher ist ein Lichtblick
Standard

Die verständliche lösung für Einsteiger:
PHP-Code:
if(is_int($_POST['plz']))
{
$plz1 mysql_real_escape_string($_POST['plz']-100); //plz -100 und fürs query vorbereitet
$plz2 mysql_real_escape_string($_POST['plz']+100); //plz +100 und fürs query vorbereitet
$res mysql_query("SELECT name, strasse, plz, ort, telefon FROM kunde_plz WHERE plz BETWEEN '".$plz1."' AND '".$plz2."' order by plz");
//hier noch die Tabelle einfügen
}
else
{
  echo 
'eine Postleitzahl besteht aus Zahlen.';

Ist nen bisschen doppelt-gemoppelt, weil man vorher abfragt, ob nur Zahlen eingegeben wurden. Also brauchst du eig mysql_real_escape_string() nicht mehr.

Geändert von Dreamwatcher (02.12.2009 um 10:20 Uhr).
Dreamwatcher ist offline  
Alt 02.12.2009, 10:35  
Erfahrener Benutzer
 
Registriert seit: 10.10.2009
Beiträge: 3.025
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist ein wunderbarer AnblickDark Guardian ist ein wunderbarer AnblickDark Guardian ist ein wunderbarer AnblickDark Guardian ist ein wunderbarer AnblickDark Guardian ist ein wunderbarer AnblickDark Guardian ist ein wunderbarer AnblickDark Guardian ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Dreamwatcher Beitrag anzeigen
Die verständliche lösung für Einsteiger:
PHP-Code:
if(is_int($_POST['plz']))
{
$plz1 mysql_real_escape_string($_POST['plz']-100); //plz -100 und fürs query vorbereitet
$plz2 mysql_real_escape_string($_POST['plz']+100); //plz +100 und fürs query vorbereitet
$res mysql_query("SELECT name, strasse, plz, ort, telefon FROM kunde_plz WHERE plz BETWEEN '".$plz1."' AND '".$plz2."' order by plz");
//hier noch die Tabelle einfügen
}
else
{
  echo 
'eine Postleitzahl besteht aus Zahlen.';

Ist nen bisschen doppelt-gemoppelt, weil man vorher abfragt, ob nur Zahlen eingegeben wurden. Also brauchst du eig mysql_real_escape_string() nicht mehr.
Das wird so warscheinlich nicht funktionieren weil Postleizzahlen im Regelfall als String gespeichert sind weil dir sonst die führenden Nullen flöten gehen.

Daher wäre ein Cast auf Integer im Query noch nötig, da für den Vergleich die führenden Nullen egal sind.

Allerdings frage ich mich ob das ganze Vorhaben überhaupt sinnvoll ist.

Denn z.B. 01571 wäre Riesa, 01475 Arnsdorf, ca. 80km Umkreis.
01147 ist Dresden, 01241 ist auch noch Dresden was keine 80km Umkreis sind.

Ich wüsste zumindest nicht wie man die Ergebnisse sinnvoll auswerten könnte.

PHP-Code:
$res mysql_query("SELECT name, strasse, plz, ort, telefon FROM kunde_plz WHERE CAST(plz AS UNSIGNED) BETWEEN '".$plz1."' AND '".$plz2."' order by plz"); 

Geändert von Dark Guardian (02.12.2009 um 10:52 Uhr).
Dark Guardian ist offline  
Alt 02.12.2009, 11:11  
Neuer Benutzer
 
Registriert seit: 26.11.2009
Beiträge: 6
PHP-Kenntnisse:
Anfänger
Jamba1103 befindet sich auf einem aufstrebenden Ast
Standard

Habe das Script umgebaut und funktioniert leider nicht.
Kann es vielleicht sein, das ich ne falsche Stelle ersetzt habe?
Wo genau muss ich das Script umbauen.

Die PLZ ist in der Datenbank als varchar angegeben, damit PLZ:00130 nicht nur 130 ausgibt.

Ich habe noch ein weiteres Problem, meine Internetseite liegt bei der Telekom und meine Datenbank ist hier intern. Kann mir intern ohne Probleme die Tabelle auswerfen lassen, aber bekomme von außen aber keine Verbindung zur Datenbank.

Danke vielmals.
Jamba1103 ist offline  
Alt 02.12.2009, 11:28  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.419
PHP-Kenntnisse:
Fortgeschritten
mepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunftmepeisen hat eine strahlende Zukunft
Standard

Zitat:
Zitat von Jamba1103 Beitrag anzeigen
Ich habe noch ein weiteres Problem, meine Internetseite liegt bei der Telekom und meine Datenbank ist hier intern. Kann mir intern ohne Probleme die Tabelle auswerfen lassen, aber bekomme von außen aber keine Verbindung zur Datenbank.
Dann gehe bei den Netzwerk-Admins betteln, dass die dir sowas erlauben. Wundere dich aber nicht, wenn die dich mit einem "NÖ" einfach fortjagen oder wahlweise erst anbrüllen und dann fortjagen.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline  
Alt 02.12.2009, 11:32  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 413
PHP-Kenntnisse:
Fortgeschritten
Dreamwatcher ist ein LichtblickDreamwatcher ist ein LichtblickDreamwatcher ist ein LichtblickDreamwatcher ist ein LichtblickDreamwatcher ist ein Lichtblick
Standard

Bei den meisten Hostern kannst du die Datenbank nicht von externen Servern ansprechen.
D.h. das Script muss auch auf dem gleichen Server wie die Datenbank ausgeführt werden.

Poste mal deinen Code, wie er jetzt ist, damit wir sehen woran es liegt.

@Dark_Guardian: Stimmt ich hatte vergessen, dass die Postleitzahlen mit nullen aufgefüllt werden müssen.

Aber wieso nicht als int speichern und die Postleitzahlen auf 5 zahlen wieder erweitern?

PHP-Code:
if(strlen($_POST['plz']) < 5)
{
 
$nullen null;
  for(
$i=0;$i5-strlen($_POST['plz']);$++)
 {
   
$nullen .= '0';
 }
$plz $nullen.$_POST['plz'];

naja gut iwie doch umständlich :P
Dreamwatcher ist offline  
Alt 02.12.2009, 11:47  
Erfahrener Benutzer
 
Registriert seit: 13.05.2009
Beiträge: 1.295
PHP-Kenntnisse:
Fortgeschritten
dennis81 wird schon bald berühmt werden
Standard

Zitat:
Zitat von Dreamwatcher Beitrag anzeigen
PHP-Code:
if(strlen($_POST['plz']) < 5)
{
 
$nullen null;
  for(
$i=0;$i5-strlen($_POST['plz']);$++)
 {
   
$nullen .= '0';
 }
$plz $nullen.$_POST['plz'];

naja gut iwie doch umständlich :P
Wenn du das machen wolltest, geht das auch eine ganze Spur einfacher:
PHP-Code:
$plz str_pad($_POST['plz'], 5'0'STR_PAD_LEFT); 
dennis81 ist offline  
Alt 02.12.2009, 11:58  
Erfahrener Benutzer
 
Registriert seit: 10.10.2009
Beiträge: 3.025
PHP-Kenntnisse:
Fortgeschritten
Dark Guardian ist ein wunderbarer AnblickDark Guardian ist ein wunderbarer AnblickDark Guardian ist ein wunderbarer AnblickDark Guardian ist ein wunderbarer AnblickDark Guardian ist ein wunderbarer AnblickDark Guardian ist ein wunderbarer AnblickDark Guardian ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von Dreamwatcher Beitrag anzeigen
@Dark_Guardian: Stimmt ich hatte vergessen, dass die Postleitzahlen mit nullen aufgefüllt werden müssen.

Aber wieso nicht als int speichern und die Postleitzahlen auf 5 zahlen wieder erweitern?
- Jede Eingabe aus einem Formular die auf das PLZ Feld angewendet wird muss gecastet werden
- Werte aus konventionellen PLZ-Datenbanken die als Vergleich dienen sollen müssen gecastet werden (bei größeren Mengen an Daten hast du dann auch shconmal eine WHERE CAST(plz AS UNSIGNED) IN (...200 von PHP gecastete Postleitzahlen...) Klausel)
- Bei der Ausgabe müssen alle Ergebnisse mit Nullen versehen werden
- ausländische Postleitzahlen mit Buchstaben funktionieren nicht mehr

Im Prinzip castest du dich dumm und dämlich und das nur um das Feld als Integer haben zu wollen?

Zitat:
Ich habe noch ein weiteres Problem, meine Internetseite liegt bei der Telekom und meine Datenbank ist hier intern. Kann mir intern ohne Probleme die Tabelle auswerfen lassen, aber bekomme von außen aber keine Verbindung zur Datenbank.
Was heißt "hier intern"? Bei dir zu Hause? Bei dir in der Firma? Der MySQL Server muss freigegeben werden sodass von außen (deine Website) drauf zugegriffen werden darf. In einer Firma wir dir das wohl nicht erlaubt werden und von dir zu Hause aus kannst es direkt vergessen weil sowohl Rechner als auch Internetleitung wohl nicht als Datenbankserver geeignet sein werden.

Warum beförderst du die Datenbank nicht auf deinen Webspace? Sehe ich sehr selten das ein Webspace PHP hat aber kein MySql...

Geändert von Dark Guardian (02.12.2009 um 12:03 Uhr).
Dark Guardian ist offline  
Alt 02.12.2009, 20:30  
Moderator
 
Registriert seit: 06.06.2008
Beiträge: 5.399
PHP-Kenntnisse:
Fortgeschritten
Wolla kann auf vieles stolz seinWolla kann auf vieles stolz seinWolla kann auf vieles stolz seinWolla kann auf vieles stolz seinWolla kann auf vieles stolz seinWolla kann auf vieles stolz seinWolla kann auf vieles stolz seinWolla kann auf vieles stolz seinWolla kann auf vieles stolz sein
Standard

Zitat:
if(is_int($_POST['plz']))
Das ist niemals true. Alle Elemente in $_POST sind Zeichenketten.

Was soll denn diese +-100 bezwecken?
__________________
PHP-Code:
if ($var != 0) {
  
$var 0;

Wolla ist offline  



Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum