Radio-Buttons auswerten

Alles, was PHP betrifft, kann hier besprochen werden.

Radio-Buttons auswerten

Postby airis » 15. November 2004 20:25

Hallo PHP-Gemeinde,

ich möchte die Daten eines Formulares in eine MySQL-Datenbank schreiben. Es funzt auch soweit, bis auf die Radio-Buttons. Irgend etwas ist noch falsch aber was?
Das ist die verkürzte Version meines Scripts:
Code: Select all
<?php
if (isset($action) && ($action == "insert") ) {

$man= $_POST["SEX"];
$woman= $_POST["SEX"];

$dbhost = "localhost";
$dbname = "abc";
$dbpass = "xxx";
$dbuser = "xyz";

mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);

$sql = "INSERT INTO address (SEX)
         VALUES ('" . $_POST['SEX'] . "')";

mysql_query($sql) or die("DB-Abfrage <b>$sql</b> ist fehlgeschlagen");
echo '<p>OK, Daten in die Datenbank geschrieben.</p>';
}
else {
/*** Ansonsten Anzeige des Formulares ***/
?>

<form action="<?php echo $PHP_SELF ?>" method="post">
<input type="hidden" name="action" value="insert">
<table border=0 align=center cellspacing=1 cellpadding=0 class=bmborder width="700">

<tr><td class=bm2><br>
<table border=0 width=90% class=bmborder align=center border="0" cellpadding="1" cellspacing="1">

<tr>
<td class=bm2 align=left><font face="Arial" size="4" color="#000000">GESCHLECHT:</font></td>
</tr>
<tr>
<td class=bm2 align=center><INPUT TYPE="radio" NAME="SEX" VALUE="<?php echo $man ?>">männlich</td>
</tr>
<tr>
<td class=bm2 align=center><INPUT TYPE="radio" NAME="SEX" VALUE="<?php echo $woman ?>">weiblich</td>
</tr>
<tr>
<td class=bm2 align=center><input type="submit"  value="Eintragen" class="bm5"></td>
</tr>

</form>
</table>
</td>
</tr>
</table>


<?php
}
?>


Die Datenbank "Mitglieder", die Tabelle "address" und der Texteintrag "Mitglieder" sind vorhanden.

Als Meldung kommt:
OK, Daten in die Datenbank geschrieben.


Aber es erfolgt kein Eintrag.

Vieleicht kann mal jemand drüber schauen und mir einen Tipp geben.

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Wiedmann » 15. November 2004 21:10

$man= $_POST["SEX"];
$woman= $_POST["SEX"];
...
<td class=bm2 align=center><INPUT TYPE="radio" NAME="SEX" VALUE="<?php echo $man ?>">männlich</td>
</tr>
<tr>
<td class=bm2 align=center><INPUT TYPE="radio" NAME="SEX" VALUE="<?php echo $woman ?>">weiblich</td>


Der Wert von VALUE muss bei beiden Radio-Inputs natürlich verschieden sein.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby airis » 15. November 2004 23:56

Hi Wiedmann,

habs nun so gelöst, es funzt, bin mir aber nicht sicher ob es eine saubere Lösung ist.
Code: Select all
<?php
if (isset($action) && ($action == "insert") ) {

$man= $_POST["GESCHLECHT"];
$woman= $_POST["GESCHLECHT"];

/*** Hier die entsprechenden Werte eintragen. ***/
$dbhost = "localhost";
$dbname = "abc";
$dbpass = "xxx";
$dbuser = "xyz";

mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);

$sql = "INSERT INTO address (GESCHLECHT)
         VALUES ('" . $_POST['GESCHLECHT'] . "')";


mysql_query($sql) or die("DB-Abfrage <b>$sql</b> ist fehlgeschlagen");
echo '<p>OK, Daten in die Datenbank geschrieben.</p>';
}
else {
/*** Ansonsten Anzeige des Formulares ***/
?>

<form action="<?php echo $PHP_SELF ?>" method="post">
<input type="hidden" name="action" value="insert">
<table border=0 align=center cellspacing=1 cellpadding=0 class=bmborder width="700">

<tr><td class=bm2><br>
<table border=0 width=90% class=bmborder align=center border="0" cellpadding="1" cellspacing="1">

<tr>
<td class=bm2 align=left><font face="Arial" size="4" color="#000000">GESCHLECHT:</font></td>
</tr>
<tr>
<td class=bm2 align=center><INPUT TYPE="radio" NAME="GESCHLECHT" VALUE="man">männlich</td>
</tr>
<tr>
<td class=bm2 align=center><INPUT TYPE="radio" NAME="GESCHLECHT" VALUE="woman">weiblich</td>
</tr>
<tr>
<td class=bm2 align=center><input type="submit"  value="Eintragen" class="bm5"></td>
</tr>

</form>
</table>
</td>
</tr>
</table>


<?php
}
?>


Was sagst Du dazu?

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Wiedmann » 16. November 2004 00:09

Glaub, das willst du nicht wissen... ;-)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby airis » 16. November 2004 00:29

Danke für Deine ehrliche Antwort.

Airis

P.S.

Vieleicht kannst Du mir noch einen Tipp geben.
Mit meinem Formular funzt es jetzt mehr schlecht als recht. Eine Sache ist allerdings noch offen und zwar kann man ja nach dem Abschicken des Formulars über einen "header" auf eine Seite weiterleiten. Ich weis allerdings noch nicht wie ich das in Kombination mit den Radio-Buttons hinbekommen soll. Es soll jenachdem auf die Seite woman.php oder man.php weitergeleitet werden.
Kannst Du mir einen Tipp geben?
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Wiedmann » 16. November 2004 01:46

Code: Select all
<?php
    $dbhost = '';
    $dbname = 'foobar';
    $dbpass = 'foo';
    $dbuser = 'bar';

    if (isset($_POST['geschlecht'])) {
        switch ($_POST['geschlecht']) {
            case 'm':
                $geschlecht = 'man';
                break;
            case 'w':
                $geschlecht = 'woman';
                break;
            default:
                $geschlecht = false;
                break;
        }
    } else {
        $geschlecht = false;
    }

    if (isset($_POST['insert'])) {

        if (false !== $geschlecht) {
            $link = mysql_connect($dbhost, $dbuser, $dbpass)
                or die(mysql_error($link));

            mysql_select_db($dbname, $link)
                or die(mysql_error($link));

            $result = mysql_query("
                INSERT INTO `address` (`GESCHLECHT`)
                VALUES ('$geschlecht')
            ", $link) or die(mysql_error($link));

            if (0 < mysql_affected_rows($link)) {
               $url = strtr(dirname($_SERVER['PHP_SELF']).'/', array('\\/'=>'/', '//'=>'/'));
                if (!empty($_SERVER['HTTPS']) && ('on' == $_SERVER['HTTPS'])) {
                   $url = 'https://'.$_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'].$url;
                } else {
                   $url = 'http://'.$_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'].$url;
                }
                header('Location: '.$url.$geschlecht.'.php');
                exit;
            }
        }
    }
?>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title></title>
</head>

<body>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
        <table border="0" cellpadding="5" cellspacing="0">
            <tr valign="top">
                <td>
                    GESCHLECHT:
                </td>
                <td>
                    <input type="radio" name="geschlecht" value="m">männlich
                    <br>
                    <input type="radio" name="geschlecht" value="w">weiblich
                </td>
            </tr>
            <tr>
                <td>
                    &nbsp;
                </td>
                <td>
                    <input type="submit" name="insert" value="Eintragen">
                </td>
            </tr>
        </table>
    </form>
<?php
    if (false === $geschlecht) {
        echo '    <p>Erforderliche Auswahl fehlt!</p>'."\n";
    }
?>
</body>
</html>
Last edited by Wiedmann on 16. November 2004 13:41, edited 1 time in total.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby airis » 16. November 2004 02:23

Hallo Wiedmann,

Morgenstund hat Gold im Mund, besten Dank für die große Arbeit die Du für mich machst.
Ich habe Dein Script eingebaut, eine man.php und eine woman.php angelegt, aber es kommt folgende Meldung:
Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in D:\server\xampp\htdocs\Dateien\addressen\12.php on line 37


Ich komme allerdings nicht klar damit.

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby airis » 16. November 2004 02:50

hatte vergessen, das Geschlecht wird in die Tabelle eingetragen. Es erfolgt keine Weiterleitung nach man.php oder woman.php.

Gute Nacht

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Wiedmann » 16. November 2004 03:14

Sorry, da sieht man mal was passiert wenn man etwas blind hinschreibt. :wink:

Zeile 37:
Code: Select all
            if (0 < mysql_affected_rows($result)) {


muss sein:
Code: Select all
            if (0 < mysql_affected_rows($link)) {


BTW:
bei dem Location sucht er gerade die Dateien im DocumentRoot. Wenn du das folgendermaßen abänderst, sucht er sie im selben Verzeichnis wie die Hauptdatei (oder relativ dazu):
Code: Select all
            if (0 < mysql_affected_rows($link)) {
               $url = strtr(dirname($_SERVER['PHP_SELF']).'/', array('\\/'=>'/', '//'=>'/'));
                if (!empty($_SERVER['HTTPS']) && ('on' == $_SERVER['HTTPS'])) {
                   $url = 'https://'.$_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'].$url;
                } else {
                   $url = 'http://'.$_SERVER['HTTP_HOST'].':'.$_SERVER['SERVER_PORT'].$url;
                }
                header('Location: '.$url.$geschlecht.'.php');
                exit;
            }
Last edited by Wiedmann on 16. November 2004 05:35, edited 4 times in total.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby airis » 16. November 2004 03:27

Fehlermeldung ist weg, aber die Seiten werden nicht angezeigt. Es kommt:
Die Seite wurde nicht gefunden.


Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Wiedmann » 16. November 2004 03:41

Was steht denn in Browser drin welche Seite er aufrufen will?

EDIT:
Schau dir nochmal den Code mit dem Location-Header von grad an.
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby airis » 16. November 2004 07:11

Guten Morgen Wiedmann,

nun muß ich SORRY sagen, den ich hatte nicht deinen ganzen Thread vom
04:14 gelesen oder übersehen. Es funzt prima.
Nochmals Danke.

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby airis » 18. November 2004 14:44

Hallo Wiedmann,

ich habe doch noch eine Frage zu dem Formular.
Folgendes hast Du mir geschrieben:
<?php
if (false === $ZAHLUNGSWEISE) {
echo ' <p>Erforderliche Auswahl fehlt!</p>'."\n";
}
?>

Ist es möglich, das die Meldung erst erscheint, wenn der Absende-Button betätigt wurde und es wurde nichts ausgefüllt.

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Postby Wiedmann » 18. November 2004 14:54

mal allgemein:
Ob eine Variable leer ist, könnte man überprüfen mit:
if (empty($variable))

oder:
if (0 === strlen($variable))
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby airis » 18. November 2004 15:11

besten Dank für Deine schnelle Antwort.

Airis
airis
 
Posts: 134
Joined: 18. May 2004 12:33

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 12 guests