Es wurde kein Datensatz ausgewählt...

derilzemer

Grünschnabel
Hallo,

ich weiss nicht ob ich hier richtig bin, ich hoffe es. Wenn off topic, dann sagt mir bescheid. Ich bin kin Crack was Programmierung angeht. Deshalb ist es wahrscheinlich, daß gewisse Sachen so heute nicht gemacht werden, also sorry. Aber Grundsätzlich sollte es auch über diesen Weg funktionieren.
Ich habe folgendes Problem. Ich habe eine DB, welche bis aufs editieren funktioniert. Alle Vorgänge wie löschen, neu anlegen geht über Formular. Beim editieren benutze ich folgendes (Dateiname edit.php):


<?php
include("dbconnect.php");
?>
<html>
<head>
<title>Datensatz &auml;ndern</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="css/style.css">
</head>
<?php


$auswahl = $_POST["auswahl"];

if ($auswahl)
{

$sqlab = "select * from spiel where id = $auswahl";
$res = mysql_db_query("quartis", $sqlab);

/* echo "sqlab";
exit;
*/

$altprod = mysql_result($res, 0, "verlag");
$alttit = mysql_result($res, 0, "titel");
$altsnum = mysql_result($res, 0, "nummer");
$altform = mysql_result($res, 0, "format");
$alteyear = mysql_result($res, 0, "ejahr");
$altkzahl = mysql_result($res, 0, "kzahl");
$altkateg = mysql_result($res, 0, "kategor");
$altserie = mysql_result($res, 0, "serie");
$altzusatz = mysql_result($res, 0, "zusatz");
$altcard = mysql_result($res, 0, "karte");
$altpdate = mysql_result($res, 0, "ddatum");
$altvari = mysql_result($res, 0, "variante");
$altcond = mysql_result($res, 0, "zustand");
$altcost = mysql_result($res, 0, "kosten");
$altinf = mysql_result($res, 0, "text");
$alterstellt = mysql_result($res, 0, "erstellt");

echo "Fuehre deine Aenderungen durch und bestaetige mit dem Button <b>Aenderungen speichern</b><p>";
echo "<form action = 'editok.php' method = 'post'>";

echo "<input name='neuid' value='$auswahl'>";
echo " id<p>";
echo "<input name='neuprod' value='$altprod'>";
echo " verlag<p>";
echo "<input name='neutit' value='$alttit'>";
echo " titel<p>";
echo "<input name='neusnum' value='$altsnum'>";
echo " nummer<p>";
echo "<input name='neuform' value='$altform'>";
echo " format<p>";
echo "<input name='neueyear' value='$alteyear'>";
echo " ejahr<p>";
echo "<input name='neukzahl' value='$altkzahl'>";
echo " kzahl<p>";
echo "<input name='neukateg' value='$altkateg'>";
echo " kategor<p>";
echo "<input name='neuserie' value='$altserie'>";
echo " serie<p>";
echo "<input name='neuzusatz' value='$altzusatz'>";
echo " zusatz<p>";
echo "<input name='neucard' value='$altcard'>";
echo " karte<p>";
echo "<input name='neupdate' value='$altpdate'>";
echo " ddatum<p>";
echo "<input name='neuvari' value='$altvari'>";
echo " variante<p>";
echo "<input name='neucond' value='$altcond'>";
echo " zustand<p>";
echo "<input name='neucost' value='$altcost'>";
echo " kosten<p>";
echo "<textarea name='neuinf' cols='50' rows='20'>$altinf</textarea>";
echo " text<p>";
echo "<input name='neuerstellt' value='$alterstellt'>";
echo " erstellt<p>";
echo "<input type='hidden' name='oriid' value='$auswahl'>";
echo "<input type='submit' ";
echo "value='Aenderungen speichern'><p>";
echo "<input type='reset'>";
echo "</form>";

}
else
echo "Es wurde kein Datensatz ausgew&auml;hlt<p>";

?>
</body>
</html>

Wie schon gesagt, wahrscheinlich macht man das heute anderst, einfacher etc., aber dazu fehlt mir die Erfahrung und das KnowHow :(.
Es ist so, daß gleich die else Schleife zieht. Wo ist der Fehler :confused:? Das fatale ist, daß ich diese Art der Dateneditierung schon in einer anderen DB mit weniger Felder nutze und dort auch funktional ist. Aber ich finde selbst bei mehrmaligem darüberschauen/vergleichen den Fehler nicht. Habt ihr einen Tip für mich? Danke für eure Hilfe vorab.

Gruß Andreas
 
Hi,

abgesehen davon, dass das tatsächlich unsicher und sehr umständlich ist, müssten wir jetzt wissen, wie das Script überhaupt aufgerufen wird.

LG
 
Kann es sein, daß du das Script teilweise aus dem anderen kopiert hast und nicht alles mitgenommen hast?
Es ist eindeutig, daß $auswahl leer ist. Entweder wird wirklich nichts übergeben, oder es wird falsch übergeben. Mir ist heute sowas ähnliches passiert, weil ich per GET übergeben aber mit POST angenommen habe. Prüf auf jeden das absendende Script.
 
Hallo,

hmm steht ein wenig auf dem Schlauch weil ihr fragt
a.) wie wird das Script aufgerufen
b.) ob ich eventuell nur teile aus der "funktionierenden" DB übernommen habe.

Was ist gemeint mit "....Es ist eindeutig, daß $auswahl leer ist"?
Hier die Datei der DB die geht. Änderungen sind lediglich, daß ich keine datei für den connect benutze, ansonsten sehe ich den Unterschied nicht :-(.

<?php

$auswahl = $_POST["auswahl"];

if ($auswahl)
{
$dbptr = mysql_connect ("localhost", "user", "passwort") or die(mysql_error());

$sqlab = "select * from datarecord where";
$sqlab .= " id = $auswahl";
$res = mysql_db_query("chmgmt", $sqlab);

$altkat = mysql_result($res, 0, "Kategorie");
$althard = mysql_result($res, 0, "Geraet");
$altsol = mysql_result($res, 0, "SolMan");
$altpfo = mysql_result($res, 0, "PfOrganet");
$altfwa = mysql_result($res, 0, "FWAntrag");
$altdate = mysql_result($res, 0, "Datum");
$alttime = mysql_result($res, 0, "Uhrzeit");
$alteff = mysql_result($res, 0, "Wirkung");
$altuser = mysql_result($res, 0, "Benutzer");
$altinf = mysql_result($res, 0, "Anmerkung");


echo "Fuehre deine Aenderungen durch und bestaetige mit dem Button <b>Aenderungen speichern</b><p>";
echo "<form action = 'editok.php' method = 'post'>";

echo "<input name='neuid' value='$auswahl'>";
echo " id<p>";
echo "<input name='neukat' value='$altkat'>";
echo " Kategorie<p>";
echo "<input name='neuhard' value='$althard'>";
echo " Geraet<p>";
echo "<input name='neusol' value='$altsol'>";
echo " SolMan<p>";
echo "<input name='neupfo' value='$altpfo'>";
echo " PfOrganet<p>";
echo "<input name='neufwa' value='$altfwa'>";
echo " FWAntrag<p>";
echo "<input name='neudate' value='$altdate'>";
echo " Datum<p>";
echo "<input name='neutime' value='$alttime'>";
echo " Uhrzeit<p>";
echo "<input name='neueff' value='$alteff'>";
echo " Wirkung<p>";
echo "<input name='neuuser' value='$altuser'>";
echo " Benutzer<p>";
echo "<textarea name='neuinf' cols='60' rows='20'>$altinf</textarea>";
echo " Anmerkung<p>";
echo "<input type='hidden' name='oriid'";
echo " value='$auswahl'>";

echo "<input type='submit' ";
echo "value='Aenderungen speichern'><p>";
echo "<input type='reset'>";
echo "</form>";

mysql_close($dbptr);
}
else
echo "Es wurde kein Datensatz ausgewaehlt<p>";

?>
</body>
</html>


Die Datei/Formular editok.php ist ja noch nicht nötig, da die Übergabe ja erst gar nicht stattfindet. Vielleicht könnt ihr mich ein wenig draufstoßen was ihr genau meint, sorry.

Gruß Andreas
 
Hi,

was verstehst Du denn an "wie wird das Script aufgerufen" nicht? :confused:
Du wirst die URL ja kaum in die Adresszeile eintippen. Du musst irgendeine Seite haben, auf der Du den zu ändernden Eintrag auswählen kannst, die dann das Script aufruft. Diese Seite müssen wir sehen.

Und bitte setze PHP-Code in die dafür vorgesehenen Tags.

LG
 
Hallo,

ich habe den Fehler gefunden. Es lag daran, daß ich wirklich die Datei Auswahledit komplett vermurkst habe, sorry. Daß ich wegen dem Script nachgefragt habe liegt wohl daran, daß ich mich nicht an den gängigen Jargon der Programmierer halte, weil ich nicht viel damit zu tun habe. Ich lerne eben noch und bin wie schon erwähnt newbie. Also wenn ich dich genervt habe, dann sorry.

Gruß Andreas
 
Hallo,
dann bin ich ja beruhigt. Aber dennoch möchte ich dich fragen, da du im ersten Beitrag was von unsicher und umständlich erwähnt hast, ob du mir anhand eines Hinweises aufzeigen kannst, was man da modifizieren kann bzw. wie man das "kürzer" gestalten könnte. Ich benutze für den Edit eines Datensatzes derzeit 3! Dateien (auswahledit.php, edit.php und editok.php). Gibt es eventuell eine Beispiel im Netz, wie man dies sinnvol gestalten kann? Ich habe trotz googlen nichts gefunden bis auf das Beispiel, welches meine Grundlage war :-(.
http://openbook.galileocomputing.de/php4/kapf.htm#t26 dort Abschnitt F.6.2.

Gruß Andreas
 
Hi,

Hallo,
dann bin ich ja beruhigt. Aber dennoch möchte ich dich fragen, da du im ersten Beitrag was von unsicher und umständlich erwähnt hast, ob du mir anhand eines Hinweises aufzeigen kannst, was man da modifizieren kann bzw. wie man das "kürzer" gestalten könnte.

Anhand eines Hinweises wird das schwierig. Das Openbook, das Du da erwähnst, ist hoffnunglos veraltet und in der Übersicht gar nicht mehr zu finden.
"Praktischer Einstieg in MySQL mit PHP" wäre aktueller und Du kannst die Beispiele zum Ausprobieren herunterladen.

Du solltest ausserdem die Funktionen, die Du verwendest, im Manual nachschlagen (Du kannst einfach nach dem Funktionsnamen suchen), dann hättest Du schonmal gesehen, das mysql_db_query() veraltet ist und dass es für das Auslesen ganzer Datensätze Alternativen zu mysql_result() gibt.

Dann solltest Du Dich über Sicherheit informieren (einfach mal googeln). Du benutzt vom User gesendete Daten ungeprüft und unbehandelt in einer DB-Abfrage (-> SQL-Injection) und gibst Daten aus der Datenbank unbehandelt auf der Seite wieder aus (-> Cross Site Scripting).

Nach ein paar Verbesserungen könnte es schon so aussehen:

PHP:
<?php

/* $auswahl = $_POST["auswahl"];  <-- überflüssig */

if (isset($_POST['auswahl']) && $_POST['auswahl'] == intval($_POST['auswahl'])) {
   $dbptr = mysql_connect ("localhost", "user", "passwort") or die(mysql_error());
   mysql_select_db('chmgmt', $dbptr) or die(mysql_error());
   $sqlab = 'select * from datarecord where';
   $sqlab .= ' id = ' . intval($_POST['auswahl']);
   $res = mysql_query($sqlab) or die($sqlab . "<br>\n" . mysql_error());
   $row = mysql_fetch_object($res);
   if ($row != false) {   
?>

      Fuehre deine Aenderungen durch und bestaetige mit dem Button <b>Aenderungen speichern</b><p>
      <form action='editok.php' method='post'>
	     <input name='neuid' value='<?php echo htmlspecialchars($row->id); ?>'> id<p>
	     <input name='neukat' value='<?php echo htmlspecialchars($row->Kategorie); ?>'> Kategorie<p>
	     <input name='neuhard' value='<?php echo htmlspecialchars($row->Geraet); ?>'> Geraet<p>
	     ...
	     <input type='submit' value='Aenderungen speichern'><p>
	     <input type='reset'>
      </form>
      
<?php
   } else {
      echo 'Datensatz nicht gefunden...';
   }
   mysql_close($dbptr);
} else {
   echo "Es wurde kein Datensatz ausgewaehlt<p>";
}
?>
   </body>
</html>

Ach ja, und auf SelfHTML kannst Du Dir anschauen, wie ein HTML-Dokument aufgebaut sein muss.

LG
 
Zurück