» Ausgabe von MySQL-Daten (SELECT) mit echo() klappt nicht

Wordpress Blogs werden per Bruteforce angegriffenNeuen Thread eröffnenNeue Antwort erstellenHBCI Client in PHP realisieren - ohne Java und Co.
2>
AutorNachricht
Beobachter 
Anmeldedatum: 27.06.2012
Beiträge: 7
18.07.2013, 14:38
zitieren

Hallo Leute, bin Anfänger im Bereich PHP MYSQL.

Habe ein DB mit einer Tabelle die heißt stellen mit id ( auto_increment ) und beschreibung ( varchar ) !

Mach ein kleines Adminseite mit INSERT ( DATEN über Forlumalr einfügen ), SELECT ( DATEN anzeigen lassen und UPDATE (DATEN bearbeiten lassen).

Mein Problem ist folgendes, ich kriege es nicht hin die daten aus 'beschreibung' auszulesen um zu bearbeiten!!!

Das ist mein PHP Code:


<?php

$con = mysql_connect("xxxxx","xxxx","xxxxx");
if (!$con){

die ("Konnte nicht verbunden werden! ".mysql_error());

}

mysql_select_db("xxxxxx",$con);


if (isset($_POST['update'])){
//Datensätze ändern
$UpdateQuery = "UPDATE stellen SET beschreibung='$_POST[beschreibung]' WHERE beschreibung=='$_POST[hidden]'";
mysql_query($UpdateQuery, $con);



};
// Datensätze anzeigen
$sql = "SELECT * FROM stellen";
$myData = mysql_query($sql,$con);
echo "<table border=1>


 <tr>
<th>Beschreibung</th>
</tr>";

//Update formular
while($record = mysql_fetch_array($myData)){

echo"<form action=bearbeiten.php method=post>";
echo "<tr>";
echo "<td>" . "<input type=text name=beschreibung value=" . $record['beschreibung'] . "</td>";
echo "<td>" . "<input type=hidden name=hidden value=" . $record['beschreibung'] . "</td>";

echo "<td>" . "<input type=submit name=update value=update" . "</td>";
echo "</tr>";
echo "</form>";
}

echo "</table>";
mysql_close($con) ;


?>






pn
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52423
Wohnort: Lohmar


Meine eBay-Auktionen:
18.07.2013, 18:57
zitieren

Dein HTML Code ist nicht richtig. Deine INPUT besitzen alle keine schließende spitze Klammer.

Schau Dir mal den Quelltext von der Ergebnisseite an, dann solltest Du feststellen, dass alles korrekt ausgegeben wird (auch die Daten aus der MySQL Datenbank), aber Deine HTML Elemente nicht korrekt geschlossen sind, damit Du es anständig im Browser angezeigt bekommen kannst.

Dann gleich noch ein paar Tipps:

  1. Niemals etwas an die Datenbank übergeben, ohne dass Du die Variable mit mysql_real_escape_string() (bei Zeichenketten) oder intval() (bei Zahlen) abgesichert hast. Ansonsten könnte jemand die Variable so befüllen, dass er Dir in ein INSERT noch ein verschachteltes DELETE, SELECT, etc. einbaut und damit Deine Seite hackt. Dies nennt man SQL-Injection.
  2. Niemals den Inhalt einer Variable als HTML ausgeben ohne es mit htmlspecialchars() abzusichern. Ansonsten könnte jemand HTML Code in Deine Datenbank einspeisen und bei der Ausgabe dessen würde diese direkt ausgegeben. z.B. könnte jemand folgendes ausgeben:
    <script>alert('Angriff');</script>

    Das nennt man übrigens XSS.
Achte darauf, dass Du einfache und doppelte Anführungszeichen escapen lässt. Also so (der Zeichensatz "UTF-8" muss evtl. gegen Deinen angepasst werden, wenn Du z.B. "ISO-8859-1" verwendest):
echo htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES, 'UTF-8');

3.) Beim Schreiben ist Dir vermutlich aufgefallen, dass Du ein Problem mit einfachen und doppelten Anführungszeichen hast, weshalb Du bei den Attributen ganz auf die doppelten Anführungszeichen verzichtet hast. Das solltest Du natürlich nicht machen. Denn dann hilft Dir auch nicht mehr htmlspecialchars. Es könnte dann jemand die Variable mit einem Leerzeichen ausstatten und dann ein weiteres Attribut übergeben, dass Du gar nicht haben willst. z.B.:
$variable = "Hallo! onload=alert(document.cookie)"

4.) Bezugnehmend auf 3.) wäre es auch einfacher statt jede Zeile mit einem extra echo() auszugeben, stattdessen den PHP-Code zu beenden und auf HTML zu switchen und innerhalb von HTML einzelne Variablen per echo auszugeben. Das sieht dann so aus:
<?php
// hier ganz viel PHP
$i = 1;
while ($i <= 10) {
   $i++;
?>
<!-- Hier kann man nun ganz normalen HTML Code schreiben -->
<div class="myCSSclass">
   <!-- Nun geben wir eine Variable aus: -->
   <?php echo $i; ?>. Zeile
</div>
<?php
}
// und ab hier noch mehr PHP
?>

Wenn Du innerhalb von PHP doch mal per echo HTML Code mit Anführungszeichen ausgeben musst, dann escape sie. Also so:
echo "<div id=\"myID\">Das ist ein 'Test'</div>";
echo '<div id="myID">Das ist noch ein \'Test\'</div>';

Das Beispiel zeigt Dir, dass Du je nach Einsatz von Anführungszeichen entsprechend escapen musst.

5.) Nicht mega wichtig, aber ein sauberer Code setzt voraus, dass man vor der Nutzung einer Variable prüft, ob er wirklich existiert. Du hast z.B. mit dem folgenden Code geprüft ob die Variable in $_POST existiert:
if (isset($_POST['update'])){

Das ist korrekt, aber im nachfolgenden Code nimmst Du die Variablen, egal ob sie existieren oder nicht:
	$UpdateQuery = "UPDATE stellen SET beschreibung='$_POST[beschreibung]' WHERE beschreibung=='$_POST[hidden]'";
mysql_query($UpdateQuery, $con);

entweder baust Du Deine Bedingung an oder Du prüfst vorab ob jede Variable existiert:
$update = isset($_POST['update']) ? true : false;
$beschreibung = isset($_POST['beschreibung']) ? $_POST['beschreibung'] : '';
$hidden = isset($_POST['hidden']) ? $_POST['hidden'] : '';

Danach die Bedingung und der MySQL Code sehen auch gleich sauberer aus:
if ($update && $beschreibung && $hidden) {
// usw.

6.) Dein UPDATE ist nicht wirklich performant geschrieben. Du vergleichst mit hidden, wie die Beschreibung vorher hieß. Texte als WHERE Parameter zum Vergleich zu nutzen ist sehr langsam. Auch ist es denkbar, dass wenn die Beschreibung durch einen 2. Admin zwischenzeitlich geändert wurde, dass Deine Änderung im Nirvana verschwindet.

Besser wäre es, wenn Du einen autoincrement-Wert in der MySQL Datenbank einsetzt und diese ID dann in einem hidden-Feld zum Vergleich heranziehst. Die ist dann als PRIMARY dann auch indexiert und der Vergleich ist sehr schnell erledigt.


 5x  bearbeitet
pn email
Beobachter 
Anmeldedatum: 27.06.2012
Beiträge: 7
18.07.2013, 19:07
zitieren

Vielen Dank für eine ausführlich Erklärung!!!

pn
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52423
Wohnort: Lohmar


Meine eBay-Auktionen:
18.07.2013, 19:13
zitieren

Ich habe noch zwei Punkte hinzugefügt.


Verfasst am: 18.07.2013, 19:15
zitieren

Zum Lernen ist das erstmal ok was Du machst, aber mit Deinem Code solltest Du nicht online gehen. Dafür fehlen Dir aktuell die Erfahrungen. Ich würde Dir daher empfehlen fertige OpenSource Lösungen zu nutzen. Es gibt ja fertige Scripte für CMS, Blog, Forum, usw. Da kannst Du dann auch den Code selber sichten und durch Anpassungen lernen.
pn email
Beobachter 
Anmeldedatum: 27.06.2012
Beiträge: 7
18.07.2013, 19:26
zitieren

Danke!, arbeite mit XAMPP! CMS klingt sehr interessant! Vielen Dank, dass du Dir Zeit genommen hast!!!

 1x  bearbeitet

Verfasst am: 20.07.2013, 10:39
zitieren

Andere Frage zu UPDATE

Woran könnte es liegen wenn meine daten in einem input feld nicht vollständig zu "bearbeiten" - angezeigt werden?
Es wird meistens nur ein teil des inhalts ausgelesen!!!

 1x  bearbeitet
pn
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52423
Wohnort: Lohmar


Meine eBay-Auktionen:
21.07.2013, 07:53
zitieren

Hast Du den Quelltext der Seite angeschaut? Also bist Du sicher, dass nur ein Teil der Daten ausgegeben wird? Ich vermute eher, dass Du Quotes im Inhalt hast und kein htmlspecialchars() verwendest, weil eine Art Längenbeschränkung gibt es nicht. Außer Dein Datenbankfeld ist von der Größe her begrenzt, aber das siehst Du ja über phpmyadmin, wenn Du Dir die Datenbank mal anschaust. In dem Fall musst Du einen anderen Zellentyp wählen. z.B. "text".

pn email
Beobachter 
Anmeldedatum: 27.06.2012
Beiträge: 7
21.07.2013, 08:09
zitieren

Also im phpmyadmin ist alles okay. Das Proble tritt auf, wenn ich Datensatz bearbeiten will, er wird ja im input angezeigt und dort kann ich es updaten. Das Problem ist, manche Datensätze werden nicht vollständig angezeigt. Ich schaue gerade wegen dem htmlspecialchars(); nach!

pn
Administrator 

Name: Marc
Geschlecht:
Anmeldedatum: 28.08.2004
Beiträge: 52423
Wohnort: Lohmar


Meine eBay-Auktionen:
21.07.2013, 11:01
zitieren

Wie gesagt. Was steht im Quelltext. Wenn da der Inhalt voll drin steht, ist das Problem Dein Escaping.

pn email
Gast 
21.07.2013, 11:15
zitieren

Mach mit!

Wenn Dir die Beiträge zum Thread "Ausgabe von MySQL-Daten (SELECT) mit echo() klappt nicht" gefallen haben oder Du noch Fragen hast oder Ergänzungen machen möchtest, solltest Du Dich gleich bei uns anmelden:



Registrierte Mitglieder genießen die folgenden Vorteile:
✔ kostenlose Mitgliedschaft
keine Werbung
✔ direkter Austausch mit Gleichgesinnten
✔ neue Fragen stellen oder Diskussionen starten
✔ schnelle Hilfe bei Problemen
✔ Bilder und Videos hochladen
✔ und vieles mehr...


Neuen Thread eröffnenNeue Antwort erstellen
2>
Ähnliche BeiträgeRe:
Letzter Beitrag
MySQL Timeout für einzelne SELECT Queries
Erst MySQL 5.7.4 macht es möglich in Datenbankabfragen ein Timeout zu definieren: SELECT MAX_STATEMENT_TIME = 1000 --in milliseconds &#x2A; FROM...
[Allgemein]von mgutt
0
451
06.02.2017, 21:09
mgutt
 Einfaches MySQL Benchmark PHP Skript (SELECT BENCHMARK)
Einfaches Skript um MySQl zu benchmarken: <?php $link = mysqli_connect&#40;"localhost", "root", ""&#41;; /&#x2A; check connection &#x2A;/ if &#40;mysqli_connect_errno&#40;&#41;&#41;...
[Allgemein]von mgutt
0
275
19.01.2017, 12:19
mgutt
zweitschlüssel (rot) klappt nicht!
wollte gerade mit meinem drittschlüssel (der rote) mein auto starten was aber nicht geklapt hat.... der schlüssel war noch original verpackt (eingeschweißt) muss der noch codiert werden o.ä.? zündung radio und alles ging an nur das auto nicht^^ hat sich...
von maddes
7
337
12.06.2009, 11:25
silent
ertransferdruck es klappt einfach nicht..
Hallo ich bin ratlos nach zich versuchen... ich schaffe es nicht die folie geht entwederkaputt bevor sie auf den sachen ist oder sie löst sich auf.. es ist echt der helle wahnsinn wie verhext.. ich wollte meine innenaustattung bekleben im auto.....
von na4alnik
3
534
30.06.2010, 18:14
na4alnik
PS3 Internet-Verbindung klappt nicht
Wie schon gesagt, ich werd paar fragen haben. hier die erste: Internetanschluss funktioniert nicht. ich habe ein Lankabel vom Router zu meinem Pc. Inet funktioniert. Also dachte ich ich klemm das kabel am Rechner ab und steck es an die ps3. bis zu...
von emiliofree
8
19.898
25.05.2009, 16:34
mgutt
v tech klappt nicht mehr : (
hi leute.habe ja den de sol vti.und eben nach der arbeit zog der schlecht.da bemerkte ich das er ab 5500udm nicht mehr abgeht wie die post,also v-tech schaltet sich nicht ein wie es aussieht.kann das daran liegen das das v tech undicht ist?das er kein...
von honda102010
29
918
18.04.2012, 18:41
Akuma777
Gewindefahrwerk eintragen klappt nicht
Hallo zusammen, ich habe ein Riesenproblem! Ich habe eine Mängelkarte bekommen mit dem Inhalt: "Fahrwerk nicht eingetragen" Ich hab dafür gestern Abend mein Fahrwerk soweit hochgeschraubt wie es ging. Währenddessen ist eine Kante von der...
von not so Fani
14
2.261
26.07.2012, 12:26
not so Fani
Funkfernbedinung klappt nicht mehr (EK3)
Hi fahre nen ek3 mit orginall Honda funkfernbedinung neuer dings klappt díe nicht mehr also die klappt schon aber nur wenn ich die fernbedinung direkt vor den empfänger halte im innenraum und das ist ja nicht sinn der sache. Was könnte das sein neue...
von V-tec driver
2
469
19.05.2007, 14:54
V-tec driver
Hilfe.... Rücksitzbank klappt nicht mehr um :( Was nun?
Hallo, letztens wollte ich mit einem Kumpel meine Anlage im Auto verbauen. Ich wollte wegen der Kabelverlegung die Rücksitzbank umklappen und schon hatte ich den Pin in der Hand :wall: Was kann ich machen? Habe schon probiert mit dem Schraubenzieher...
von Joshivinyljunky
7
418
22.08.2008, 08:53
Joshivinyljunky
Entpacken und Installation von Mediawiki klappt nicht
Hallo an das Forum, ich glaube ich habe ein total dummes und einfaches problem aber leider komme ich irgendwie nicht weiter. habe mir das media wiki paket heruntergeladen, entpackt und in den Ordner htdocs meiner xampp installation geschoben. Dort...
von MTH81
1
360
02.07.2009, 17:26
mgutt
© 2004 - 2025 www.programmierer-forum.de | Communities | Impressum |