Es werden keine Datensätze angelegt

Alles, was PHP betrifft, kann hier besprochen werden.

Es werden keine Datensätze angelegt

Postby Bushranger » 17. May 2006 00:56

Hallo,

ich habe mcih so etwas in php und mysql eingearbeitet und ein prog erstellt, mit dem ich neue datensätze anlegen will und diese mit dann anschauen kann.
Ich habe das prog aus einem tutorial für meine zwecke abgewandelt, haut aber leider nicht hin, denn es gibt weder eine Fehlermeldung noch werden neue Datensätze angelegt.
Hier die beiden Progs:

Prog datenneu.php

<html>
<head>
<?php
if ($gesendet)
{
$db = mysql_connect('localhost','root');

$sqlab = "insert dicomstudies";
$sqlab .= "(patientnam, patientbir, patientid,";
$sqlab .= " patientbir, studymodal, studydescr ,studydate, referphysi, patientsex) values ";
$sqlab .= "('$nn', '$pb', '$pi', '$sm', '$sd', '$st', '$rf', '$ps')";

mysql_db_query("conquest", $sqlab);

$num = mysql_affected_rows();
if ($num>0)
echo "Es wurde 1 Datensatz hinzugefügt<p>";
else
{
echo "Es ist ein Fehler aufgetreten, ";
echo "es wurde kein Datensatz hinzugefügt<p>";
}
mysql_close($db);
}
?>
</head>

<body>
Geben Sie einen vollständigen Datensatz ein und senden Sie das
Formular ab:
<br>
<form action = "datenneu.php" method = "post">
<input name="nn"> Name, Vorname<p>
<input name="pb"> Geburtstag (in der Form JJJJ-MM-TT)<p>
<input name="pi"> Ident-Nr.<p>
<input name="sm"> Modalität<p>
<input name="sd"> Untersuchung<p>
<input name="st"> U-Datum (in der Form JJJJ-MM-TT)<p>
<input name="rf"> Überweiser<p>
<input name="ps"> Geschlecht<p>

<input type="submit" name="gesendet">
<input type="reset">
</form>
<br>
<br>
Alle Datensätze <a href="abfrage.php">anzeigen</a>
</body>
</html>
--------------------------------------------------------------------------------------------
Prog Abfrage.php

<html>
<body bgcolor="#99ffcc">
<br>
<br>
<br>
<?php
$db = mysql_connect('localhost','root');
$res = mysql_db_query("conquest", "select * from dicomstudies");
$num = mysql_num_rows($res);

// Tabellenbeginn
echo "<table border>";

// Überschrift
echo "<tr><td>Lfd.Nr.</td> <td>Name, Vorname</td>";
echo "<td>Geburtsdatum</td> <td>Ident-Nr.</td>";
echo "<td>Modalität</td> <td>Untersuchung</td> </td>";
echo "<td>U-Datum</td> <td>Zuweiser</td> <td>Geschlecht</td></tr>";

for ($i=0; $i<$num; $i++)
{
$nn = mysql_result($res, $i, "PatientNam");
$pb = mysql_result($res, $i, "Patientbir");
$pi = mysql_result($res, $i, "Patientid");
$sm = mysql_result($res, $i, "StudyModal");
$sd = mysql_result($res, $i, "StudyDescr");
$st = mysql_result($res, $i, "StudyDate");
$rf = mysql_result($res, $i, "ReferPhysi");
$ps = mysql_result($res, $i, "Patientsex");

$lf = $i + 1;

// Tabellenzeile mit -zellen
echo "<tr> <td>$lf</td> <td>$nn</td> <td>$pb</td>";
echo "<td>$pi</td> <td>$sm</td> <td>$sd</td> </td>";
echo "<td>$st</td> <td>$rf</td> <td>$ps</td> </tr>";
}

// Tabellenende
echo "</table>";

mysql_close($db);
?>
</body>
</html>

kann mir jemand sagen, wo der Fehler liegen könnte?
Bushranger
 
Posts: 102
Joined: 15. April 2005 17:35
Location: Niedersachsen

Postby deepsurfer » 17. May 2006 01:39

bin jetzt kein Experte aber was ich beim gegentest gesehen habe ist schonmal das dein PHP5 (gehe mal von aus das es XAMPP 1.5.2 ist)
mit register_globals Off arbeitet und daher schonmal etwas nicht funktionieren kann.

Trifft aber eher dem Lehrbuch die schuld !!
http://faq.kwm-web.info/doku.php?id=php ... er_globals

------ ------- -------- -------- ------
Es gibt da eine schöne "zeig mir alle fehler" funktion, bin grad auf der suche wie der nochmal genau geschrieben wird.... setze es dann gleich hier rein.

So... http://de.php.net/error_reporting

setze einfach unter deinem

Code: Select all
..
...
<?php

error_reporting(E_ALL);
..
...
....

Damit wird dir zeielenweise angezeigt wo ein Fehler im php Code vorliegt der PHP5 nicht versteht.
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby gfaust » 17. May 2006 07:14

Hallo,

auf den ersten blick fallen mir ein paar Dinge auf, die nicht falsch sind, aber Dir das programmieren erschweren:

1.) Arbeite mit Einrückungen, damit Du den Überblick behälst (ok, es kann sein, dass sie beim einfügen in das Forum verloren gegangen sind...)

2.) Benutze immer geschweifte Klammern um die Zugehörigkeit zur Funktion zu verdeutlichen
(Bsp:
Code: Select all
         if(Bedingung)
         {
           <irgendetwas>
         }
         else
         {
           <etwasanderes>
         }


3.) In Deiner SQL-Syntax fehlt ein INTO
Code: Select all
$sqlab = "insert INTO dicomstudies";
$sqlab .= "(patientnam, patientbir, patientid,";
$sqlab .= " patientbir, studymodal, studydescr ,studydate, referphysi, patientsex) values ";
$sqlab .= "('$nn', '$pb', '$pi', '$sm', '$sd', '$st', '$rf', '$ps')";


4.) Bei vielen Wertepaaren benutze lieber die
Code: Select all
INSERT INTO <tabellenname> SET <feldname1> = <wert1>,
                               <feldname2> = <wert2>;
Syntax http://dev.mysql.com/doc/refman/4.0/de/handler.html

5.) In PHP gibt es einen foreach-Befehl, der alle Einträge eines Arrays abhandelt und Dir damit die for-Schleife mit Zähler und Ermitteln der Datensätze erspart.
http://de2.php.net/manual/de/control-structures.foreach.php

Guido
gfaust
 
Posts: 41
Joined: 06. December 2005 18:31

Postby Bushranger » 18. May 2006 16:29

Hallo,

ich habe die Zeile geändert auf
$sqlab = "insert INTO dicomstudies"
da tat sich auch nichts.
Dann habe ich
error_reporting(E_ALL);
eingestzt und erhalte folgende Fehlermeldung
Notice: Undefined variable: gesendet in C:\Programme\xampp\htdocs\datenneu.php on line 6
kann mir da jetzt einer weiterhelfen?
Bushranger
 
Posts: 102
Joined: 15. April 2005 17:35
Location: Niedersachsen

Postby Wiedmann » 18. May 2006 16:43

eingestzt und erhalte folgende Fehlermeldung
Notice: Undefined variable: gesendet in C:\Programme\xampp\htdocs\datenneu.php on line 6

Ist doch eigentlich simpel ;-) Du verwendest da in einer Condition (Vergleich) eine Variable, die PHP gar nicht kennt.
--> damit du eine Variable benutzen kannst, musst du ihr vorher schon einen Wert zuweisen (definieren).

In deinem speziellen Fall hab ich aber eher die befürchtung, dass du eigentlich eine falsche Variable nimmst:
- Du hast im HTML ein Formularelement mit dem Namen "gesendet".
- Das Formular verschickst du über "POST"
--> Also ist in PHP die Variable "$_POST['gesendet']" vorhanden.

Dies aber nur, wenn du das Formular auch wegschickst. Also musst du hier prüfen, ob die Variable überhaupt existiert:
Code: Select all
if (isset($_POST['gesendet'])) {...}


(Analog natürlich im Rest vom Code)
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Bushranger » 18. May 2006 17:17

verstehe ich leider nur halb, wie sähe das denn richtig aus?
ich hatte das aus einem Lehrbuch abgewandelt, da ging es aber auch schon im Orginal nicht.
Bushranger
 
Posts: 102
Joined: 15. April 2005 17:35
Location: Niedersachsen

Postby Wiedmann » 18. May 2006 18:11

wie sähe das denn richtig aus?

ohne Gewähr:
Code: Select all
<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    <title>Datensatz einfügen</title>
</head>

<body>
    <?php
        if (isset($_POST['gesendet'])) {
            $db = mysql_connect('localhost', 'root', '') or die(mysql_error($db));
            mysql_select_db('conquest', $db) or die(mysql_error($db));

            $sqlab = "
                INSERT INTO `dicomstudies`
                    (`patientnam`, `patientbir`, `patientid`, `studymodal`,
                     `studydescr`, `studydate`, `referphysi`, `patientsex`)
                VALUES
                    ('{$_POST['nn']}', '{$_POST['pb']}', '{$_POST['pi']}', '{$_POST['sm']}',
                     '{$_POST['sd']}', '{$_POST['st']}', '{$_POST['rf']}', '{$_POST['ps']}')
            ";

            mysql_query($sqlab, $db) or die(mysql_error($db));

            $num = mysql_affected_rows($db);
            if ($num > 0) {
                echo "<p>Es wurde {$num} Datensatz hinzugefügt.</p>";
            } else {
                echo "<p>Es ist ein Fehler aufgetreten, es wurde kein Datensatz hinzugefügt.</p>";
            }

            mysql_close($db);
        }
    ?>

    <p>Geben Sie einen vollständigen Datensatz ein und senden Sie das Formular ab:</p>

    <form action="datenneu.php" method="post">
        <input type="text" name="nn"> Name, Vorname<br>
        <input type="text" name="pb"> Geburtstag (in der Form JJJJ-MM-TT)<br>
        <input type="text" name="pi"> Ident-Nr.<br>
        <input type="text" name="sm"> Modalität<br>
        <input type="text" name="sd"> Untersuchung<br>
        <input type="text" name="st"> U-Datum (in der Form JJJJ-MM-TT)<br>
        <input type="text" name="rf"> Überweiser<br>
        <input type="text" name="ps"> Geschlecht<br>

        <input type="submit" name="gesendet"  value="gesendet"> <input type="reset">
    </form>

    <p>Alle Datensätze <a href="abfrage.php">anzeigen</a>.</p>
</body>
</html>


ich hatte das aus einem Lehrbuch abgewandelt

Besorg dir ein gescheites ;-)
Oder nimm das offizelle Handbuch für PHP und MySQL und die Beispiele daraus...
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Bushranger » 19. May 2006 00:32

vielen Dank, klappt.
werde deinen Tip befolgen, mein Lehrbuch ist auf dem Stand von php 4
Bushranger
 
Posts: 102
Joined: 15. April 2005 17:35
Location: Niedersachsen

Postby Bushranger » 23. May 2006 16:59

ich bekomme jetzt hier plötzlich die fehlermeldung
duplicate entry "for key 1
was hat das zu bedeuten? geändert hab ich nichts.
Bushranger
 
Posts: 102
Joined: 15. April 2005 17:35
Location: Niedersachsen

Postby Bushranger » 23. May 2006 18:26

die meldung kommt dann wenn ich einen neu en datensatz eigegeben habe.
Bushranger
 
Posts: 102
Joined: 15. April 2005 17:35
Location: Niedersachsen

Postby Wiedmann » 23. May 2006 18:30

Schätzungsweise hast du eine Spalte mit einem primären (unique) Index?
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Bushranger » 23. May 2006 19:02

an der mysql datenbank habe ich nicht geändert. wie könnte ich das denn herausfinden, ob ich einen index habe?
Bushranger
 
Posts: 102
Joined: 15. April 2005 17:35
Location: Niedersachsen

Postby Wiedmann » 23. May 2006 19:12

an der mysql datenbank habe ich nicht geändert.

Möglich, aber da du die ja angelegt hast, müsstest du das eigentlich wissen ab es einen gibt.

wie könnte ich das denn herausfinden, ob ich einen index habe?

Mit jeden Client mit dem du zurecht kommst. z.B. "phpMyAdmin" oder "mysql console client".
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Bushranger » 23. May 2006 20:03

in der Datenbankstruktur kann ich mit phpadmin nichts von einem index erkennen. Komisch ist auch, dass dieser fehler beim gleichen prog vorher nicht da war.
Die datendankstruktur wurde allerdings durch ein anderes prog automatisch erstellt.
Bushranger
 
Posts: 102
Joined: 15. April 2005 17:35
Location: Niedersachsen

Postby Bushranger » 24. May 2006 13:14

ja, es existiert ein Schlüssel.
Nur warum bekomme ich eine solche Fehlermeldung?
und was kann ich programmtechn tun damit der Datensatz angelegt wird?
Bushranger
 
Posts: 102
Joined: 15. April 2005 17:35
Location: Niedersachsen

Next

Return to PHP

Who is online

Users browsing this forum: No registered users and 3 guests