[GastForen Programmierung/Entwicklung PHP und MySQL Findet jemand den Fehler

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Themen
Beiträge
Moderatoren
Letzter Beitrag

Findet jemand den Fehler

happie
Beiträge gesamt: 4

8. Feb 2006, 00:45
Beitrag # 1 von 6
Bewertung:
(1474 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo zusammen bin nicht der totale Php Profi sondern lerne es geradich und habe folgendes Problem, in dem Script wenn in dem Formular eine andere Stadt als die erlaubten eingeben wird soll eine Fehlermeldung kommen die eingebaut ist nur wenn ich als bsp. hamburg, oder kamen eingebe erscheint die Fehlermeldung nicht, wäre schön wenn mir jemand helfen kann.

Das formular ist dies.
Code
<html> 
<head>
<title>Fahrplanauskunft</title>
</head>
<body>
<h1>Fahrplanauskunft Ruhrgebiet</h1>
<form action="auskunft.php" method="get">
<table>
<tr>
<td>Von: </td>
<td colspan="3"><input type="Text" name="von" size="40"> </td>
</tr>
<tr>
<td>Nach: </td>
<td colspan="3"><input type="Text" name="nach" size="40"> </td>
</tr>
<tr>
<td>Datum:</td>
<td><input type="Text" name="datum" size="7"> </td>
<td>Uhrzeit: </td>
<td><input type="Text" name="zeit" size="7"> </td>
</tr>
</table>
<input type="Submit" name="verbindung" value="Verbindung berechnen">
</form>
</body>
</html>



Der Php Code ist dies:

Code
<html> 
<head>
<title>Fahrplanauskunft</title>
</head>
<body>
<?
//wie auch schon in der letzten Version enthalten eine
//Funktion um die Kompatibilität mit php 4 aufrecht zu erhalten,
//einziger fehler die bennenung
function my_str_split($string,$split){
$return = array();
$count = 0;
$pos = 0;
$new = 0;
while(strpos($string,$split,$pos) > 0){
$new = strpos($string,$split,$pos);
$item = trim(mb_substr($string,$pos,$new-$pos));
$return[$count] = $item;
$count++;
$pos = $new+1;
}

$item = trim(substr($string,$pos));
$return[$count] = $item;

return $return;
}

//hier werden die geeigneten Fehler ausgegeben
function print_error($err,$para){
switch($err){
case -1: echo "<h2>Es ist ein unbekannter Fehler aufgetreten</h2>"; break;
case 0: echo "<h2>Eingabe in Ordnung: </h2>"; break;
case 1: echo "(".$para[0].")<h2>Die eingegbene Stadt: ".$para[1]." ist nicht erlaubt, nur:</h2><h3>Dortmund, Essen oder Bochum</h3>"; break;
case 2: echo "(".$para[0].")<h2>Die erkannte Hausnummer: ".$para[2]." hat ein falsches Format</h2>"; break;
case 3: echo "(".$para[0].")<h2>Das Eingabeformat wurde nicht erkannt</h2><h3>Stadt,Straße Hausnummer<br>Stadt,Straße<br>Hausnummer</h3>"; break;
}
}

//funktion um die art der eingabe zu bestimmen.
function getTyp($eingabe) {

//typ als fehler besetzten
$type=0;
//welche position hat das Komma
$pos_comma = strpos($eingabe,",",0);
//welche position hat das Leerzeichen
$pos_space = strpos($eingabe," ",0);

//sollte das erste leerzeichen hinter dem Komma sein, dann neu suchen
if($pos_space == $pos_comma+1){
$pos_space = strpos($eingabe," ",$pos_space+1);
}

if(!$pos_comma && !$pos_space){
if($eingabe == ""){
$type = 0;
} else {
$type = 3;
}
}

else if($pos_comma && !$pos_space){

//testen ob noch ein leerzeichen vorhanden ist
if(!strpos($eingabe,",",$pos_comma+1)){
$type = 2;
}
}

else if($pos_comma && $pos_space){

//testen ob noch ein leerzeichen vorhanden ist
if(!strpos($eingabe,",",$pos_comma+1) && !strpos($eingabe," ",$pos_space+1) ){
$type = 1;
}
}
//zurück geben des typen
return $type;
}

function getAnfrage($suffix,$eingabe,$type,$anfrage){
switch($type){
case 3:
$anfrage["haltestelle".$suffix] =$eingabe;
break;
case 2:
$arr = my_str_split($eingabe,",");
$anfrage["stadt".$suffix] = $arr[0];
$anfrage["strasse".$suffix] = $arr[1];
break;
case 1:
$arr = my_str_split($eingabe,",");
$anfrage["stadt".$suffix] = $arr[0];

$arr = my_str_split($arr[1]," ");
$anfrage["strasse".$suffix] = $arr[0];
$anfrage["hausnummer".$suffix] = $arr[1];
break;
case 0:
$anfrage = false;
break;
default:
$anfrage = false;
break;
}
return $anfrage;
}

//Ueberprüft ob die Stadt in ordnung ist
function checkStadt($stadt){
if ($stadt == "essen" || $stadt == "bochum" || $stadt == "dortmund" ) {
return true;
} else {
return false;
}

}

//Ueberprüft ob die Hausnummer ein Zahl ist
function checkNumber($nr){
if (is_numeric($nr) == false) {
return false;
} else {
return true;
}
}

//überprüft die eingeben werte
function checkAnfrage($suffix,$type,$anfrage){
switch($type){
case 3:
$err_code = 0;
break;
case 2:
if (!checkStadt($anfrage["stadt".$suffix])){
$err_code=1; //Stadt fehler
}
break;
case 1:
if (!checkStadt($anfrage["stadt".$suffix])){
$err_code=1; //Stadt fehler
}
if (!checkNumber($anfrage["hausnummer".$suffix])){
$err_code=2; //Hausnummer fehler
}
break;
default:
$err_code = -1;
break;
}
return $err_code;
}

//auslesen der get daten
$von = $_GET["von"];
$nach = $_GET["nach"];

//ueberfluessige leerzeichen entfernen
$von = strtolower(trim($von));
$nach = strtolower(trim($nach));

//ist alles in Ordnung?

$anfrage = array();
$para = array();

$type = getTyp($von);

if($type > 0){
$anfrage = getAnfrage("von",$von,$type,$anfrage);
$err = checkAnfrage("von",$type,$anfrage);
if(!($err == 0)) {
$para[0] = "von";
$para[1] = $anfrage["stadtvon"];
$para[2] = $anfrage["hausnummervon"];
}
} else {
$err=3;
}

$type = getTyp($nach);

if($type > 0 && $err == 0){
$anfrage = getAnfrage("nach",$nach,$type,$anfrage);
$err = checkAnfrage("nach",$type,$anfrage);
if(!($err == 0)) {
$para[0] = "nach";
$para[1] = $anfrage["stadtnach"];
$para[2] = $anfrage["hausnummernach"];
}
} else if($err == 0){
$err = 3;
}

//ansonsten war ein fehler bei den von daten, daher wird nichts
//mehr gemacht, damit dieser ausgeben werden kann

//werden ohne überprüfung übernommen
$anfrage["zeit"] = $_GET["zeit"];
$anfrage["datum"]= $_GET["datum"];

//auswertung
if($err == 0){
echo "<h3>Folgende Daten wurden erfolgreich eingelesen:</h3><table border=\"1\"><tr><th>Attribut</th><th>Wert</th></tr>";

foreach($anfrage as $name=>$value){
echo "<tr><td>".$name."</td><td>".$value."</td></tr>";
}

echo "</table>";
} else {
//ausgabe bei fehlern
print_error($err,$para);
}
?>
</body>
</html>

X

Findet jemand den Fehler

Pozor
Beiträge gesamt: 892

9. Feb 2006, 08:51
Beitrag # 2 von 6
Beitrag ID: #210402
Bewertung:
(1446 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

Ich habe nur kurz die Funktion checkStadt angeschaut und sie funktioniert soweit
richtig, wenn man sie mit Variablen füttert.

Versuche mit print_r() und echo dein Problem zu finden, gib Variablen aus um zu
sehen was drin steht etc. In meiner Signatur hat es ein Link zu einem File, dass ich
schon vor langer Zeit erstellt habe, dort werden sich unter anderem auch ein paar
Tipps für dein Problem finden lassen.


als Antwort auf: [#210073]

Findet jemand den Fehler

happie
Beiträge gesamt: 4

9. Feb 2006, 14:14
Beitrag # 3 von 6
Beitrag ID: #210542
Bewertung:
(1430 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hi Pozor
vielleicht sollte erwähnen ich habe net sehr viel plan von PhP, nur das was ich bisher in dem Lehrgang vermittelt gekriegt habe, aber mit dem wissen wäre ich bestimmt nicht soweit gekommen, und der Tutor akzeptiert das so nicht weil er meint erstens ich sollte nur PHP4 Befehle verwenden, und zum zweiten das die Fehlerausgaben nicht geht, und das man es kürzer machen kann.(ich weiss da leider net mehr weiter),

die function funzt ja auch das Problem ist die Fehlerausgabe die erfolgen soll, wenn bei von und nach eine andere stadt als die erlaubten essen, bochum, oder dortmund, eingegeben werden soll er eigentlich zurückliefern das die Stadt von und/oder nach nicht erlaubt ist. diese funzt nicht.
Ansonsten geht das script nach umbenennung von split auch unter php4 so wie es jetzt ist.Eben nur die fehlerangabe nicht.

Gruss
happie


als Antwort auf: [#210402]

Findet jemand den Fehler

Foggy
Beiträge gesamt: 48

10. Feb 2006, 19:36
Beitrag # 4 von 6
Beitrag ID: #210943
Bewertung:
(1404 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Deine Debugging Tipps sind nett Pozor :)
Dürfte man den Link auch in anderen Foren verbreiten?
Eine kleine Bemerkung hätt ich trotzdem noch:
Code
<?php 
function mysql_debug_output($line = 'None', $file = 'None', $additionalmessage = '')
{
//Diese Funktion gibt nur etwas aus, wenn ein Fehler auftritt.
//mit __LINE__ und __FILE__ kann in ausführenden Script sinnvolle Informationen
//mitgegeben werden, die das Fehlerfinden viel einfacher gestalten
//zusätzlich kann noch eine info mehr übergeben werden um sie auszugeben,
//wie z.B. die gerade ausgeführte SQL-Query.
if('0' != mysql_errno())
{
echo '<br>ERROR: Line: <b>'.$line.'</b> File: <b>'.$file.'</b>';
echo '<br>ERROR: <font color="FF0000"><b>'.mysql_error().'</b></font>';
if('' =! $additionalmessage)
{
echo '<b>'.$additionalmessage.'</b>';
}
}
}
//Aufruf wie folgt im script:
mysql_debug_output(__LINE__, __FILE__, $sqlquery);
?>

Würde ich wohl eher so basteln ;)
Code
<?php 
function mysql_debug_output($additionalmessage = '') {

if('0' != mysql_errno()) {
if('' =! $additionalmessage) {
throw new Exception("<b>SQL Errno: " . mysql_errno() . ", SQL Error: " . mysql_error() . "Additional: $additionalmessage</b>");
} else {
throw new Exception("<b>SQL Errno: " . mysql_errno() . ", SQL Error: " . mysql_error() . "</b>");
}
}
}
//Aufruf wie folgt im script:
mysql_debug_output($sqlquery);
?>

Damit wird die Übergabe des Dateinamens und der Zeilennummer überflüssig ;)


als Antwort auf: [#210542]

Findet jemand den Fehler

Pozor
Beiträge gesamt: 892

10. Feb 2006, 19:47
Beitrag # 5 von 6
Beitrag ID: #210944
Bewertung:
(1401 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
@foggy: ja


als Antwort auf: [#210943]

Findet jemand den Fehler

happie
Beiträge gesamt: 4

10. Feb 2006, 21:42
Beitrag # 6 von 6
Beitrag ID: #210956
Bewertung:
(1392 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
weiss jetzt nur net wie mir das jetzt helfen kann.
Ich habe nun mal etliches probiert auch geändert aber funzt alledem nicht
Gruss


als Antwort auf: [#210944]
X