[PHP]erstes "Programm"-Auswertung

berry3

Star Trek Fan
2 Juli 2007
32
0
Hi,
ich hab mal etwas geschrieben und dachte, mann könnte mir hier noch ein paar Tipps geben. Zumal das ganze nicht funktioniert....
Code:
<?php

include 'db.php';
$fehler = array();
//Kontrolle ob $name korrekt ist
$query = mysql_query("SELECT name FROM users WHERE name LIKE ('".$_POST['name']."')"); 
if (mysql_error()) die ("MySQL-Error: " . mysql_error());
$namequery = mysql_num_rows($query);
mysql_freeresult($query);
if(strlen($_POST['name']) == 0)
  {
  $fehler[] = '<b><font color=red>Bitte geben Sie Ihren Namen ein.<br></font></b>';
  }
  elseif($namequery == true)
  {
  $fehler[] ='<b><font color=red>Ihr Name ist bereits vorhanden. Sie können nicht mehr         teilnehmen.<br></font></b>';
  }
  else
  {
  echo "<b><font color=green>Ihr Name ist gültig.<br></font></b>";
  }
//E-Mail-adresse kontrollieren
$query = mysql_query("SELECT email FROM users WHERE email LIKE ('".$_POST['email']."')"); 
if (mysql_errno()) die ("MySQL-Error: " . mysql_error());
$emailquery = mysql_num_rows($query);
mysql_freeresult($query);
if(!preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i',$_POST['email']))
  {
 $fehler[] = '<b><font color=red>Bitte geben Sie eine gültige E-Mail-Adresse ein.<br></font></b>';
  }
  elseif ($emailquery == true)
  {
  $fehler[] = '<b><font color=red>Ihr E-Mail ist bereits vorhanden. Sie können nicht mehr am Spiel teilnehmen.<br></font></b>';
  }
  else
  {
  echo "<b><font color=green>Ihre E-Mail ist gültig.<br></font></b>";
  }
  
//Passwoerter kontrollieren
if(strlen($_POST['pass']) != 0){
  if(strlen($_POST['pass2']) != 0){
    if($_POST['pass'] == $_POST['pass2']){
      echo "<b><font color=green>Die Passwörter stimmen überein.<br></font></b>";
    }
  }
}
else
{
$fehler[]= '<b><font color=red>Bitte überprüfen Sie ihre Passwörter.<br></font></b>';
}
//registrierfunktion
echo $fehler;
if($fehler == false) 
  { 
$eintrag = "INSERT INTO users (name, email, pass) VALUES ('" . $_POST['name'] . "', '" . $_POST['email'] . "', '" . $_POST['pass'] . "')"; 
$eintragen = mysql_query($eintrag); 
  }
if(isset($eintragen))
  {
  echo "<b><font color=red>Die Registrierung konnte nicht durchgeführt werden.</font></b>";
  }
  else
  {
  echo "<b><font color=green>Die Registrierung konnte durchgeführt werden.</font></b>";
  }

  
include('reg.html');


 ?>
Das Problem ist die Fehlerauswertung. Ich hab schon einiges probiert, allerdings hat nicht wirklich funktioniert.
Die Registration soll nur durchgeführt werden, wenn es voher keine Fehler gab. Irgendwo habe ich mal gelesen, weiß leider nicht mehr wo, dass man das Ganze in ein array packen kann, welches bei der auswertung etweder true oder false zurückgibt, je nachdem ob Fehler vorhanden oder nicht. Scheint aber nicht ganz so gut zu klappen.
Vielleicht hat ja jemand ein paar Tipps.

Gruß
 
wird in der db.php schon ein connect zur db durchgeführt?

wenn nein ist das vl ein fehler... ich guck noch weiter... abgesehen davon muss auch noch ein mysql_close(); hin...

Mfg
Sebmaster
 
ja, connect wird durchgeführt...er trägt auch Daten ein...jedoch nicht dann wenn er soll. Auch wenn ein Fehler vorliegt, trägt er das Ganze in die Datenbank ein...irgendwas ist bei der Auswertung falsch.
 
wird in der db.php schon ein connect zur db durchgeführt?

wenn nein ist das vl ein fehler... ich guck noch weiter... abgesehen davon muss auch noch ein mysql_close(); hin...

Mfg
Sebmaster

Normalerweise braucht eine MySQL Verbindung nicht manuell geschlossen werden, das geschieht am Ende des Scripts automatisch.
Eigendlich wirds nur gebraucht wenn man mit mehreren Datenbanken arbeitet.
So hab ich es zumindest gelernt :mrgreen:

mfg Raze
 
Der Fehler, dass immer was eingetragen wird, liegt daran, dass $fehler ein Array ist und Du auf == false prüfst. Prüf statt dessen lieber mittels empty(), ob das Array leer ist.
 
Hab den code nochmal etwas geändert. Nur leider trägt er jetzt nichts mehr in die Tabelle ein...egal ob fehler da oder nicht...jemand eine Idee?

Code:
<?php

include 'db.php';
$fehler = array("'<b><font color=red>Bitte geben Sie Ihren Namen ein.<br></font></b>'", "<b><font color=red>Ihr Name ist bereits vorhanden. Sie können nicht mehr         teilnehmen.<br></font></b>'", "<b><font color=red>Bitte geben Sie eine gültige E-Mail-Adresse ein.<br></font></b>", "<b><font color=red>Bitte überprüfen Sie ihre Passwörter.<br></font></b>", "<b><font color=red>Bitte überprüfen Sie ihre Passwörter.<br></font></b>'");
//Kontrolle ob $name korrekt ist
$query = mysql_query("SELECT name FROM users WHERE name LIKE ('".$_POST['name']."')"); 
if (mysql_error()) die ("MySQL-Error: " . mysql_error());
$namequery = mysql_num_rows($query);
mysql_freeresult($query);
if(strlen($_POST['name']) == 0)
  {
  echo $fehler[0];
  }
  elseif($namequery == true)
  {
  echo $fehler[1];
  }
  else
  {
  echo "<b><font color=green>Ihr Name ist gültig.<br></font></b>";
  }
//E-Mail-adresse kontrollieren
$query = mysql_query("SELECT email FROM users WHERE email LIKE ('".$_POST['email']."')"); 
if (mysql_errno()) die ("MySQL-Error: " . mysql_error());
$emailquery = mysql_num_rows($query);
mysql_freeresult($query);
if(!preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i',$_POST['email']))
  {
 $fehler[2];
  }
  elseif ($emailquery == true)
  {
echo $fehler[3];
  }
  else
  {
  echo "<b><font color=green>Ihre E-Mail ist gültig.<br></font></b>";
  }
  
//Passwoerter kontrollieren
if(strlen($_POST['pass']) != 0){
  if(strlen($_POST['pass2']) != 0){
    if($_POST['pass'] == $_POST['pass2']){
      echo "<b><font color=green>Die Passwörter stimmen überein.<br></font></b>";
    }
  }
}
else
{
echo $fehler[4];
}
//fehler;
if(empty($fehler)) 
  { 
$eintrag = "INSERT INTO users (name, email, pass) VALUES ('" . $_POST['name'] . "', '" . $_POST['email'] . "', '" . $_POST['pass'] . "')"; 
$eintragen = mysql_query($eintrag); 
  }
if(isset($eintragen))
  {
  echo "<b><font color=green>Die Registrierung konnte durchgeführt werden.</font></b>";
  }
  else
  {
  echo "<b><font color=red>Die Registrierung konnte nicht durchgeführt werden.</font></b>";
  }

  
include('reg.html');


 ?>
 
Code:
<?php

include 'db.php';
$fehler = array("'<b><font color=red>Bitte geben Sie Ihren Namen ein.<br></font></b>'", "<b><font color=red>Ihr Name ist bereits vorhanden. Sie können nicht mehr         teilnehmen.<br></font></b>'", "<b><font color=red>Bitte geben Sie eine gültige E-Mail-Adresse ein.<br></font></b>", "<b><font color=red>Bitte überprüfen Sie ihre Passwörter.<br></font></b>", "<b><font color=red>Bitte überprüfen Sie ihre Passwörter.<br></font></b>'");
//Kontrolle ob $name korrekt ist
$query = mysql_query("SELECT name FROM users WHERE name LIKE ('".$_POST['name']."')"); 
if (mysql_error()) die ("MySQL-Error: " . mysql_error());
$namequery = mysql_num_rows($query);
mysql_freeresult($query);
if(strlen($_POST['name']) == 0)
  {
  echo $fehler[0];
  }
  elseif($namequery == true)
  {
  echo $fehler[1];
  }
  else
  {
  echo "<b><font color=green>Ihr Name ist gültig.<br></font></b>";
  }
//E-Mail-adresse kontrollieren
$query = mysql_query("SELECT email FROM users WHERE email LIKE ('".$_POST['email']."')"); 
[B]if (mysql_errno())[/B] die ("MySQL-Error: " . mysql_error());
$emailquery = mysql_num_rows($query);
mysql_freeresult($query);
if(!preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i',$_POST['email']))
  {
 $fehler[2];
  }
  elseif ($emailquery == true)
  {
echo $fehler[3];
  }
  else
  {
  echo "<b><font color=green>Ihre E-Mail ist gültig.<br></font></b>";
  }
  
//Passwoerter kontrollieren
if(strlen($_POST['pass']) != 0){
  if(strlen($_POST['pass2']) != 0){
    if($_POST['pass'] == $_POST['pass2']){
      echo "<b><font color=green>Die Passwörter stimmen überein.<br></font></b>";
    }
  }
}
else
{
echo $fehler[4];
}
//fehler;
if(empty($fehler)) 
  { 
$eintrag = "INSERT INTO users (name, email, pass) VALUES ('" . $_POST['name'] . "', '" . $_POST['email'] . "', '" . $_POST['pass'] . "')"; 
$eintragen = mysql_query($eintrag); 
  }
if(isset($eintragen))
  {
  echo "<b><font color=green>Die Registrierung konnte durchgeführt werden.</font></b>";
  }
  else
  {
  echo "<b><font color=red>Die Registrierung konnte nicht durchgeführt werden.</font></b>";
  }

  
include('reg.html');


 ?>


da vl. der fehler;)
 
Der Fehler, dass immer was eingetragen wird, liegt daran, dass $fehler ein Array ist und Du auf == false prüfst. Prüf statt dessen lieber mittels empty(), ob das Array leer ist.

Das ist nicht das Problem... man kann auch mit if($array) prüfen ob in dem Array was drin steht oder nicht. Finds aber in form von $array == false ein wenig unglücklich formuliert.

@berry3

dein Code ergibt jetzt keinen sinn mehr. Ansatz 1 war schon ok. Du speicherst aufgetretene Fehler in einem Array und prüfst am Ende ob ein Fehler aufgetreten ist oder nicht. Jetzt tust du Fehler Nachrichten am Anfang definieren und am ende prüfst du ob die Fehler Nachrichten gesetzt sind :ugly:
 
Scheint jetzt zu funktionieren.
@ZeroCCC:
Gut. Ich dachte, ich lege die Fehler fest, damit php weiß welche fehlermeldung ausgegeben werden soll...aber deine Erklärung ist einleuchtend :)
 
Ich benutze dieses Thema einfach weiter...
Ich bin jetzt wieder etwas weiter, hackt aber wieder an meinem Lieblingsthema MySQL...
Code:
<?php
require 'db.php';
$abfrage = "SELECT quiz_name, question_one, answer_one, answer_two, answer_three FROM quiz_one";
$ergebnis = mysql_query($abfrage);?>
<html>
<h1><?php while($row = mysql_fetch_object($ergebnis))
    {
    echo $row->quiz_name;
    }
 ?></h1>
<br />
<br />
Kreuze die richtigen Antworten an!
<br />
<br />
<b><?php
while($row = mysql_fetch_object($ergebnis))
    {
    echo $row->question_one;
    }
     ?><br />
<input type="radio" name="name_one" value="1">
<br /><?php while($row = mysql_fetch_object($ergebnis))
    {
    echo $row->answer_one;
    }
     ?>
<input type="radio" name="name_one" value="2">
<br /><?php while($row = mysql_fetch_object($ergebnis))
    {
    echo $row->answer_two;
    }
   ?>
<input type="radio" name="name_one" value="3"><?php while($row = mysql_fetch_object($ergebnis))
    {
    echo $row->answer_three;
    }
      ?>

Sinn ist klar: Bestimmte Texte hinter HTML code ausgeben...
Dass heißt, question_one ist in der Datenbank, soll ausgelesen werden und dann eingefügt werden.
Jedoch zeigt mir das Script nur die erste Abfrage an, d.h den Quiznamen (quiz_name) wird angezeigt, der Rest (z.B. question_one, answer_one, usw..) jedoch nicht.

Hat jemand eine (bestimmt einfache und einleuchtende Lösung, welche ich nicht kenne) Idee?
 
Überleg erstmal was du da machst und was mysql_fetch_* macht. Deutlich wird es spätesten wenn in der Tabelle mehr als ein Datensatz steht.

So macht das mehr sinn:

PHP:
<?php
require 'db.php';
$abfrage = "SELECT quiz_name, question_one, answer_one, answer_two, answer_three FROM quiz_one";
$ergebnis = mysql_query($abfrage);

$row = mysql_fetch_object($ergebnis));
?>
<html>
<h1><?=$row->quiz_name;?></h1>
<br />
<br />
Kreuze die richtigen Antworten an!
<br />
<br />
<b><?=$row->question_one;?><br />

<input type="radio" name="name_one" value="1"><br />
<?=$row->answer_one;?>
<input type="radio" name="name_one" value="2"><br />
<?=$row->answer_two;?>
<input type="radio" name="name_one" value="3"><br />
<?=$row->answer_three;?>
 
Danke.
Ich habe da noch eine Frage, bzw. funktioniert etwas nicht.
Um festzustellen, ob bestimmte Fragen richtig oder falsch beantwortet wurden, wollte ich value bestimmen

Code:
<input type="radio" name="name_one" value="<?php $row1->value_one ?>">
<?=$row1->answer_one;?> <br />
<input type="radio" name="name_one" value="<?php $row1->value_two ?>">
<?=$row1->answer_two;?><br />
<input type="radio" name="name_one" value="<?php $row1->value_three ?>">
<?=$row1->answer_three;?><br />
d.h, der Wert ist in der MySQL Tabelle. Diesen Wert wollte ich dann übergeben, um zu prüfen, ob z.b. Radiobutton name_one true oder false (dass sind die Wert in der Datenbank) ist.
Jedoch scheint es nicht zu funktionieren bzw. werden die Daten ncht übergeben (in der GET-url werden jedenfalls keine Werte ausgegeben).
Ich bin mir mal wieder nicht sicher, ob man mySQL -Daten so übergeben kann...
 
Was lasMiranda meint: Du musst deine Veränderlichen Felder in ein Formular packen, dass dann abgeschickt wird. Das Formular wird eröffnet mit "<form method="post" name="DEIN NAME" >" da könnten dann auch noch weitere Attribute drin stehen... danach kommt alles, was irgendwie an PHP übergeben werden soll also InputFelder, Textareas, ..... und beendet wird das mit "</form>"

Erst dann kannst du die Variablen mit "$_GET['VALUE']" (Value für jeweils den namen von dem Input Feld) in PHP verwenden. Aber vorsicht: immer schön prüfen, dass du keine Injection bekommst (also eingeschleuster Fremdcode).