Mit PHP was in eine MySQL Datenbankschreiben

Alles rund um die Software-Entwicklung: Programme, Skripte, Projekte etc.
Benutzeravatar
varmandra
Commander
Beiträge: 266
Registriert: 24.09.2008, 20:32

Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von varmandra » 11.09.2009, 01:40

Nach langer Ruhepause bin ich mal wieder über mein PHP4-Buch von Galileo Computing gestolpert und wollte damit mal was kleiner machen. Also hab ich mir XAMPP 1.71 drauf gemacht, mit PHP 5.2.9 und MySQL 5.1.33.
Hab dann angefangen meine kram zu tippen wie es halt im Buch beschrieben wird, als ich dann nach einigen stunden soweit war, dass ich es testen konnte, geschah nichts, keine Fehlermeldung, kein Eintrag in der Datenbank(Tabelle blieb leer), nach längerem suchen nach fehlern und keine finden, direkt die Dateien von Buch genommen(Datenbanknamen geändert) auch nichts passiert, also alles exakt so erstellt wie im Buch beschrieben(Datenbank wie im Buch vorgegeben erstellt) und immer noch nichts

Hier die Datei aus dem Buch

Code: Alles auswählen

<html>

<head>
<?php

   if ($gesendet)
   {
      $db = mysql_connect();

      $sqlab = "insert personen";
      $sqlab .= "(name, vorname, personalnummer,";
      $sqlab .= " gehalt, geburtstag) values ";
      $sqlab .= "('$na', '$vn', $pn, $ge, '$gt')";

      mysql_db_query("firma", $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:
<form action = "uf13.php" method = "post">
    <input name="na"> Name<p>
    <input name="vn"> Vorname<p>
    <input name="pn"> Personalnummer (eine ganze Zahl)<p>
    <input name="ge"> Gehalt (Nachkommastellen mit Punkt)<p>
    <input name="gt"> Geburtsdatum (in der Form JJJJ-MM-TT)<p>
    <input type="submit" name="gesendet">
    <input type="reset">
</form>

Alle Datensätze <a href="uf07.php">anzeigen</a>
</body>
</html>
Warum geht das nicht, wo ist der Fehler/Problem?
Wenn es daran liegt das der unterschied zwischen PHP 4.0 vom Buch zum PHP 5.2.9 zu groß ist, bzw MySQL 3.22.33 zu MySQL 5.1.33(wäre schön zu wissen an welchem es liegt), was für ein Buch könnte man sich da dann als ersatz zulegen? Sollte nicht zu umfangreich sein und auch nicht zu teuer.

BdT
Varmandra
Zuletzt geändert von varmandra am 11.09.2009, 01:41, insgesamt 1-mal geändert.

Benutzeravatar
Epfi
Admiral
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 10520
Registriert: 08.03.2004, 11:02
Wohnort: Haus, das Verrückte macht
Kontaktdaten:

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von Epfi » 11.09.2009, 08:19

Füg erstmal ein

Code: Alles auswählen

error_reporting(E_ALL);
ganz oben im Skript ein, das könnte schonmal helfen.

Außerdem vermisse ich in deinem SQL-Dingens ein INTO. Lass dir $sqlab doch mal per echo ausgeben und guck das an.

Außerdem: Umlaute werden in html &uuml; &auml; &ouml; &szlig; ... geschrieben - aber daran liegt es sicher nicht. Kosmetik ;)

Und womöglich ist auch die Option, die ständig Sicherheitslücken reißt, deren Name mir gerade nicht mehr einfällt, nicht mehr per default aktiv. $gesendet und alle Variablen im SQL-String sind dann nicht definiert, sondern nur $_POST['gesendet'] bzw. $_GET['gesendet'].

Ansonsten rate ich auf jeden Fall zu einem neuen Buch. Vor allem einem, das sich auch um Sicherheit Gedanken macht - vom Benutzen des oben genannten Verhaltens (Variablen automatisch zuweisen) wurde abgeraten, seit ich denken kann. Und Strings, die man an SQL übergibt müssen unbedingt vorher escaped werden. So, wie das da steht, kann jeder Mensch beliebige SQL-Befehle auf Deiner Datenbank ausführen.
hartware.net - *** ****** ***, ** ************ **** **** *********** ****.

Benutzeravatar
fassy
Vice Admiral
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 5855
Registriert: 26.01.2004, 20:44
Wohnort: Hamburg

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von fassy » 11.09.2009, 10:35

Epfi hat geschrieben: Außerdem vermisse ich in deinem SQL-Dingens ein INTO. Lass dir $sqlab doch mal per echo ausgeben und guck das an.
Sehe ich auch so - ohne INTO keine Tabelle zum einfügen. Ich denke mal das einzige was du bekommst ist ein SQL Syntax Fehler.
Epfi hat geschrieben: Und womöglich ist auch die Option, die ständig Sicherheitslücken reißt, deren Name mir gerade nicht mehr einfällt, nicht mehr per default aktiv. $gesendet und alle Variablen im SQL-String sind dann nicht definiert, sondern nur $_POST['gesendet'] bzw. $_GET['gesendet'].
register_globals -> http://www.peoplecnc.com/register_globals_off.html

Würd ich aber gleich direkt vom Start an vermeidem mich damit anzufreunden.
Epfi hat geschrieben: Und Strings, die man an SQL übergibt müssen unbedingt vorher escaped werden. So, wie das da steht, kann jeder Mensch beliebige SQL-Befehle auf Deiner Datenbank ausführen.
Am besten direkt alles mit prepared statements machen. Wird in php5 und mysqli soweit ich weiß untersützt. Kurze google antwort: http://www.petefreitag.com/item/356.cfm
Zuletzt geändert von fassy am 11.09.2009, 12:26, insgesamt 2-mal geändert.
Pick up the hammer... pick it up.

Benutzeravatar
varmandra
Commander
Beiträge: 266
Registriert: 24.09.2008, 20:32

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von varmandra » 11.09.2009, 12:48

Das es nicht der sicherheit entspricht die man im internet braucht war mir klar, XAMPP sagt ja auch das sie nur als Entwicklungsoberfläche gedacht ist und nicht als einsatz als produktiver Server. Und es ist halt ein übungscript aus dem ersten drittel vom Buch, das erste wo halt Daten per PHP-script eingetragen werden....

Nachdem ich error_reporting(E_ALL); hinzugefüght habe mekert das script über undefinierte Variablen....

Da es sicher schwieriger ist mit einem vareltetem Buch zu arbeiten und dann dort die Fehler zu beseitigen, jetzt die Frage gibt es da ein Buch was ihr empfelen könnt?
Nicht zu umfangreich, brauche keine 2000 Seiten die alles erklären, aber auch nicht eins was wieder anfängt zu erklären was Internet udn HTML ist.

Bei Amazon bin ich auf
PHP 5.3 und MySQL 5.1
PHP 5 / MySQL 5. Studienausgabe
gestoßen.

Was mir ein wenig aufstößt ist halt bei den Kundenrezensionen das da welche drin sind wo gesagt wird das es mit php5 nicht weit her ist
Dann dem Leser, der ja extra ein PHP5-Buch gekauft hat, auch noch jovial mitzuteilen, dass man ihn dankenswerterweise nicht auch noch mit den Neuerungen von PHP5 "belästigen" will, zeugt wirklich von einem eigenartigen "Humor".
Bloß andere Bücher die das nicht dabei haben, sind meines erachten wieder etwas zu fortgeschritten für mich. Lohnt es sich da zu warten bis ein Einsteigerbuch für PHP5 kommt.

BdT
Varmandra

stanglwirt
Fleet Captain
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 1591
Registriert: 17.03.2004, 07:22

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von stanglwirt » 11.09.2009, 15:01

mysql_* ist veraltet
mysql_connect() erfordert paramater
MfG
everybody´s darling is everybody´s Arschloch. (c) Franz Josef Strauß

Benutzeravatar
fassy
Vice Admiral
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 5855
Registriert: 26.01.2004, 20:44
Wohnort: Hamburg

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von fassy » 12.09.2009, 00:18

varmandra hat geschrieben:Das es nicht der sicherheit entspricht die man im internet braucht war mir klar, XAMPP sagt ja auch das sie nur als Entwicklungsoberfläche gedacht ist und nicht als einsatz als produktiver Server. Und es ist halt ein übungscript aus dem ersten drittel vom Buch, das erste wo halt Daten per PHP-script eingetragen werden....

Nachdem ich error_reporting(E_ALL); hinzugefüght habe mekert das script über undefinierte Variablen....
Stimme ich dir nicht ganz zu. Wenn du eine Programmiersprache lernst, solltest du auch gewisse Fehler direkt vermeiden (selbst wenn sie früher als normal verkauft wurden). Beispielsweise ist das Thema Datenbankanbindung mit Programmiersprachen so eine Sache. Wenn du nicht direkt ein Framework nutzt was dir das Datenbankhandling abnimmt dann solltest du da auf jeden Fall direkt einen Porgrammierstil lernen der dir viele Probleme erspart -> Stichwort "best practice".

Prepared Statements haben mehre Vorteile:
+ macht die klassische SQL Injection unmöglich
+ Parameter müssen nicht escaped werden
+ richtiges Encoding und Typisierung der Parameter, z.B. UTF8 Strings können dich wirklich in den Wahnsinn treiben...
+ das SQL statement muss nicht zusammengebastelt werden und ist
a) auf den ersten Blick lesbar
b) robust gegen Fehler durch evtl fehlerhaftes zusammenbauen des Strings,
c) besser wartbar und wiederverwendbar
d) leichter zu entwickeln für dich. Du schreibst das SQL, testest es und wenn es richtig ist musst du es nur noch in deinen Source kopieren und die Testparameter gegen die bind variablen austauschen
+ wenn du das gleiche Statement oft ausführen musst reicht einmal ein prepare, danach müssen nur noch die parameter neu gebunden werden, erhöht die Performance enorm (soweit in der DB richtig implementiert)

Ich würde nie mehr freiwillig SQLs aus einer Menge Parameter und SQL Fragmenten zusammebasteln.

Ebenso die Sache mit den globalen Variablen. Nicht ohne Grund wurde die Option in der Standardconfiguration deaktiviert. Global Varialen nutzen wollen ist meiner Meinung nach das letzte was man irgendwie tun sollte wenn man ein Programm designed.
varmandra hat geschrieben: Da es sicher schwieriger ist mit einem vareltetem Buch zu arbeiten und dann dort die Fehler zu beseitigen, jetzt die Frage gibt es da ein Buch was ihr empfelen könnt?
Nicht zu umfangreich, brauche keine 2000 Seiten die alles erklären, aber auch nicht eins was wieder anfängt zu erklären was Internet udn HTML ist.
Meiner Meinung nach:
Gar kein Buch. Stell dir eine Aufgabe, dann such dir Tutorials per Google, lies Foren und probier vieles aus was dich der Lösung deiner Aufgabe näher bringt, bei Fehlern oder wenn du nicht weiter kommst -> Google, Foren ;)
Ein Buch würd ich erst kaufen wenn du soviel Grundwissen hast das du ein Buch verstehst was sich mit den besonderen Features und Eigenheiten einer Sprache beschöäftigt und die ganz trivialen Dinge ausläßt.
Ansonsten würd ich nach etwas anderen Büchern suchen wie z.B. die Head First Reihe. "Head First PHP & MySQL" klingt ganz viel versprechend.
Zuletzt geändert von fassy am 12.09.2009, 00:20, insgesamt 2-mal geändert.
Pick up the hammer... pick it up.

Benutzeravatar
Epfi
Admiral
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 10520
Registriert: 08.03.2004, 11:02
Wohnort: Haus, das Verrückte macht
Kontaktdaten:

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von Epfi » 12.09.2009, 09:37

Die Gefahr bei Internet-lernerei ist aber immer, dass man sich totalen Blödsinn ergooglet. Ging mir selbst so - register globals (danke für den Namen) ist z.B. ausgesprochen beliebt und wird vielerorts verwendet. Es ist nicht verwunderlich, dass PHP als unsichere Sprache verschrien ist.
hartware.net - *** ****** ***, ** ************ **** **** *********** ****.

Leviathan
Captain
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 872
Registriert: 08.03.2004, 17:09
Wohnort: Kiel
Kontaktdaten:

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von Leviathan » 12.09.2009, 11:15

Als brauchbare Literatur zum Erlernen von PHP, wie auch als umfangreiche Referenz, hat sich das PHP Manual erwiesen (die engl. Variante ist die aktuellste, Übersetzungen hinken teilweise ein wenig hinterher und sind unpräzise).
Wenn dir die Grundlagen von SQL bekannt sind (SELECT, INSERT, UPDATE, JOINs, ...), dann würde ich mich erstmal ausschließlich auf PHP beschränken; um Daten mit PHP in eine MySQL-Datenbank zu schreiben, brauchst du in erster Linie PHP-Wissen, z.B., wie man die von fassy erwähnte MySQLi-Extension verwendet (mit Beispielen).
Hilfreich sind meist auch die User Contributed Notes am Ende jeder Seite im PHP Manual.

PHP-Grundlagen selbst findest du - incl. Best Practices - ausführlich im Kapitel Language Reference erläutert.

Und bei Startschwierigkeiten stehen wir natürlich auch hier im Forum gerne zur Verfügung. :)

Benutzeravatar
varmandra
Commander
Beiträge: 266
Registriert: 24.09.2008, 20:32

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von varmandra » 12.09.2009, 13:07

Epfi hat geschrieben:Die Gefahr bei Internet-lernerei ist aber immer, dass man sich totalen Blödsinn ergooglet. Ging mir selbst so - register globals (danke für den Namen) ist z.B. ausgesprochen beliebt und wird vielerorts verwendet. Es ist nicht verwunderlich, dass PHP als unsichere Sprache verschrien ist.
Das ist es auch was ich als Problem sehe, jeder darf im Internet was schreiben und google findet jeden Schrott. Und ein Buch gibt meist mehr erklärungen als jemand in einem Toturial und das Buch sollte eingentlich auch fundierteres Wissen liefern, denn damit wollen Leute Geld verdienen und wenn nur Müll drin steht wird sich das Buch nicht gut verkaufen.

Eine Aufgabe hab ich schon: Es soll eine DSA3 Charakterdatenbank mit Charaktergenerierung und Ausrüstung werden (fals es wer kennt wie DSA-Tools) und wenn es dann funktinoert, ist der nächste Plan dazu es in ein SMF-Forum zu integrieren und die Benutzerberechtigungen davon zu verwenden.
Ich hatte mir da erstmal nen kleinen Teil raus gepickt, die Waffen, weil das eine recht kleine überschaubare Tabelle ist.


imho Code-Schnipsel zusammen setzen kann jeder, ich würde aber auch gerne wissen warum und nicht nur das es geht (Der Theoretiker weis wie es geht aber es funktioniert nicht, der Praktiker freut sich das es funktioniert, weis aber nicht warum)

ich wer auf jeden fall die TIpps von euch beherzigen und mal schauen das ich damit weiter komme, werd aber auf jeden Fall weiter nach einen Buch suchen...

@Leviathan
Naja Grundlagen der SQL befehle, jain, die Begriffen die du da aufzählst sagen mir was, aber wie man sie wirklich benutzt... hab halt das letzte mal vor 8 Jahren damit beschäftigt.

BdT
Varmandra

Nachtrag:
PHPinfo
Da soll es schleißlich laufen, wenn PHP5 unbedingt notwendig ist, muß ich mal bei meine Provider nachfragen wegen einem Update.
Stauts der MySQL Datenbank
Und das ist ne Status ausgabe der Datenbank.

PPS: Tutorial das find ich aufs erste lesen recht gut.
Zuletzt geändert von varmandra am 12.09.2009, 14:08, insgesamt 2-mal geändert.

Benutzeravatar
varmandra
Commander
Beiträge: 266
Registriert: 24.09.2008, 20:32

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von varmandra » 13.09.2009, 18:13

Code: Alles auswählen

<?php
error_reporting(E_ALL);
$db = new mysqli('localhost', 'dsa', 'ranas', 'DSA');
if (mysqli_connect_errno()){
	die('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
}

ini_set('display_errors', 1);
echo '<html><head></head><body>';

if ('POST' == $_SERVER['REQUEST_METHOD']){
	if (('' == $autor = trim($_POST['name'])) or
		('' == $inhalt = trim($_POST['tpw'])) or
		('' == $inhalt = trim($_POST['tpf'])) or
		('' == $inhalt = trim($_POST['tpp'])) or
		('' == $inhalt = trim($_POST['gewicht'])) or
		('' == $inhalt = trim($_POST['laenge'])) or
		('' == $inhalt = trim($_POST['bf'])) or
		('' == $inhalt = trim($_POST['wv1'])) or
		('' == $antwort = trim($_POST['wv2']))) {
		die ('Wichtige Werte Fehlen. (Name Trefferpunkte TP+ Gewicht L&auml;nge Bruchfaktor Waffenvergleich');
	}
	$sql = 'INSERT INTO
				dsa_waffen(typ, name, tpw, tpf, tpp, gewicht, laenge, bf, wv1, wv2, beschreibung, oregel, regiono, regioth, regiobo, regiofi, regioel, regioor, regiowe, regioto, regioha, regioga, regiozw, regiopu, regiolf, regiozy, regiokh, regiomh, regioma, regiosu, regiomo, regiowa, regiopp)
			VALUES
				(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
	$statement = $db->prepare($sql);
	if (!$statement) {
		die ('Es konnte kein SQL-Query vorbereitet werden: '.$db->error);
	}
	$statement->bind_param('ssiiiiiiiissiiiiiiiiiiiiiiiiiiiii', $typ, $tname, $tpw, $tpf, $tpp, $gewicht, $laenge, $bf, $wv1, $wv2, $beschreibung, $oregel, $regiono, $regioth, $regiobo, $regiofi, $regioel, $regioor, $regiowe, $regioto, $regioha, $regioga, $regiozw, $regiopu, $regiolf, $regiozy, $regiokh, $regiomh, $regioma, $regiosu, $regiomo, $regiowa, $regiopp);
	if (!$statement->execute()) {
		die ('Query konnte nicht ausgeführt werden: '.$statement->error);
	}
}

echo '<form action="waffen.php" method="post">
Waffenart:
    <select name="typ">
		<option value="aexte">&Auml;xte und Beile
		<option value="dolche">Dolche
		<option value="infanteriewaffen">Infanteriewaffen
		<option value="kettenwaffen">Kettenwaffen
		<option value="peitsche">Peitsche
		<option value="schhiebwaffen">Scharfe Hiebwaffen
		<option value="schwerter">Schwerter
		<option value="speere">Speere und St&auml;be
		<option value="stichwaffen">Stichwaffen
		<option value="sthiebwaffen">Stumpfe Hiebwaffen
		<option value="zweihänder">Zweih&auml;nder
		<option value="lanzen">Lanzen
		<option value="pwaffe">Pers&ouml;nliche Waffe
	</select>
<p>Name:<input name="name" size="30">
<p>Trefferpunkte:<input name="tpw" size="1">W+<input name="tpf" size="1">
<p>TP+: KK-<input name="tpp" size="1">
<p>Gewicht:<input name="gewicht" size="5">
<p>L&auml;nge:<input name="laenge" size="5">
<p>Bruchfaktor:<input name="bf" size="1">
<p>Waffenvergleich<input name="wv1" size="1">/<input name="wv2" size="1">
<p>Beschreibung:<textarea cols="50" rows="5" name="beschreibung"></textarea>
<p>Optionale Regeln:<textarea cols="50" rows="5" name="oregel"></textarea>
<p>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><input type="checkbox" name="regiono">Nordlande</td>
    <td><input type="checkbox" name="regioth">Thorwal</td>
    <td><input type="checkbox" name="regiobo">Bornland</td>
    <td><input type="checkbox" name="regiofi">Firnelfen Gebiete</td>
    <td><input type="checkbox" name="regioel">Au- und Waldelfen Gebiete</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="regioor">Orkland</td>
    <td><input type="checkbox" name="regiowe">Weiden</td>
    <td><input type="checkbox" name="regioto">Tobrien</td>
    <td><input type="checkbox" name="regioha">Havena</td>
    <td><input type="checkbox" name="regioga">Gareth</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="regiozw">Zwergengebiete</td>
    <td><input type="checkbox" name="regiopu">Punin</td>
    <td><input type="checkbox" name="regiolf">Liebliches Feld</td>
    <td><input type="checkbox" name="regiozy">Zyklopeninseln</td>
    <td><input type="checkbox" name="regiokh">Khomw&uuml;ste</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="regiomh">Mhanadistan</td>
    <td><input type="checkbox" name="regioma">Maraskan</td>
    <td><input type="checkbox" name="regiosu">Al\'Anfa</td>
    <td><input type="checkbox" name="regiomo">Mohagebiete</td>
    <td><input type="checkbox" name="regiowa">Waldinseln</td>
  </tr>
  <tr>
    <td><input type="checkbox" name="regiopp">Pers&ouml;nliche Waffen</td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
  </tr>
</table>
<input type="submit" value="Speichern" name="formaction"><input type="reset"></from></body></html>';
?>
Das ist jetzt das was ich habe, aber irgent was passt da nicht, es werden zwar einträge in der datenbank erstellt aber die sind alle leer (NULL).

stanglwirt
Fleet Captain
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 1591
Registriert: 17.03.2004, 07:22

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von stanglwirt » 14.09.2009, 10:16

bei deinen komischen if-anweisungen auch kein wunder.
bevor du hier mit db-verbindungen etc. hantierst, solltest du erstmal verstehen wie if und else funktioniert.

auch kannst du mit $wv1 auch nur in unsicheren umgebungen das eigentliche $_POST['wv1'] ansprechen.
MfG
everybody´s darling is everybody´s Arschloch. (c) Franz Josef Strauß

Benutzeravatar
fassy
Vice Admiral
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 5855
Registriert: 26.01.2004, 20:44
Wohnort: Hamburg

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von fassy » 14.09.2009, 12:48

Denke das es weniger mit verstehen wie if/else zu verwenden ist zu tun hat - eher mit coding style.

Code: Alles auswählen

if (('' == $autor = trim($_POST['name'])) or
Ist extrem schwer lesbar. Solltest du imo vermeiden.

Ich würde um es schrittweise zu machen:
1) Die POST Parameter entsprechenden lokale Variablen zuweisen
2) Dann die Variablen auf Gültigkeit der Werte testen, z.B. was machst du wenn jemand in einem numerischen Feld ein Buchstaben eingibt? Sind Zahlen als teil eines Strings erlaubt, Ober- und Untergrenzen definiert, etc? Kann man ganz gut in eine eigene Funktion auslagern. Da kannst du die dann auch ganz beqeuem einmal rausschreiben um zu sehn ob und was angekommen ist (z.B. könntest du die Übergebenen Regionen oder Kategorien gegen die Datenbank vergleichen. -> Datenmodell erweitern/Überarbeiten und z.B. eine Tablle "Waffenkategorien" und "Regionen" hinzufügen...) - da kannst du dann auch gleich noch SQL JOIN lernen.
3) wenn alle benötigten Variabeln gültige Werte haben in der DB speichern
Pick up the hammer... pick it up.

Benutzeravatar
Lynx
Captain
Beiträge: 699
Registriert: 18.03.2004, 07:48

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von Lynx » 14.09.2009, 14:08

Ich frag mich nur grad wieso du in der if-Anweisung 6 mal $inhalt überschreibst...wenn du die Variable eh nicht benutzt, lass sie doch gleich weg.

Und du solltest wohl in bind_param() auch $_POST['name'] usw. verwenden, die oben verwendeten Variablen definierst du ja nirgends. Bin zwar kein PHP experte, aber mir ist so als wurde hier schon versucht zu erklären dass dieser Automatismus von Post-Variablen offenbar nicht mehr üblich ist, falls er denn je ratsam war.

Btw. das 'INTO' bei 'INSERT'-Anweisungen ist bei MySQL laut Dokumentation optional, aber wer halbwegs kompatiblen SQL Code schreiben will sollte es sich wohl besser angewöhnen, schließlich gibt es noch mehr etablierte SQL-Datenbanken auf der Welt...

Benutzeravatar
varmandra
Commander
Beiträge: 266
Registriert: 24.09.2008, 20:32

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von varmandra » 15.09.2009, 01:07

@lynx $inhalt da war der Haken warum nix an gekommen ist, mist C&P, vergessen die variablen da zu ändern....aber das hat sich jetzt ja eh erledigt.

Also
1) erledigt, seh ich ein und werd versuchen es jetzt immer so zu machen. (hoffe doch das das was ich gemacht habe das war was du gemeint hast)

2) mmh, eigentlich traue ich den Leuten ein bischen Inteligenz zu, um nicht alle und jede blödsinn ausschließen zu müssen, aber recht haste :) der größte Fehler sitzt vor dem Bildschirm.
Ich hab bei php "ctype" gefunden, so wie ich das verstehe kann man damit recht einfach Eingaben überprüfen.
Wie meinst du das mit in eine eigene Funktion auslager? ich würd das bei jeder Variablen einzeln machen in der entsprechende Zeile(hab schon ein paar dazu geschrieben s.u.).

Wenn ich das mit einer Funktion machen müsst ich die ganzen strings usw in ein array() packen und dann mit foreach() ?while()?...., ist das der richtige Ansatz?

Bloß ich habe einmal Felder die ausgefüllt werden müssen, die textarea können müssen aber nicht. Da müst ich dann ja mit drei arrays haben, einmal für die die eine wert bekommen müssen, ein zweites für die könne aber nicht müssen, und dann bleiben da ja noch die Regionen,
Die brauch ich aber eigentlich nicht überprüfen, da ja der wert fest steht, da wäre nur die überprüfung das eins gewählt ist und wenn keins dann halt Persönliche Waffe kann ich aber über html erzwingen. Brauch bei denen halt auch nur ein "false or true" für eine Übersichtskarte (rot oder grün)
den $namen zu vergleichen wäre eine sache, das kommt jeden fall noch, da wenn ein Breitschwert drin steht, braucht kein zweites rein, da mach ich mich laufe der woche noch dran, erstmal die Überprüfung ob die Werte in den bereichen liegne wo sie hin sollen und eventuelle max Werte.

PHP-Script

Code: Alles auswählen

<?php
error_reporting(E_ALL);
$db = new mysqli('localhost', 'dsa', '*****', 'DSA');
if (mysqli_connect_errno()){
	die('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');
}

ini_set('display_errors', 1);
echo '<html><head></head><body>';

if ('POST' == $_SERVER['REQUEST_METHOD']){
if(isset($_POST['typ'])) {$typ=$_POST['typ'];}
if(isset($_POST['name'])) {$name=$_POST['name'];}
if(isset($_POST['tpw'])) {$tpw=$_POST['tpw'];}if(!ctype_digit($tpw)){die('Keine Zahl bei der Anzalh der W&uuml;rfel');}
if(isset($_POST['tpf'])) {$tpf=$_POST['tpf'];}if(!ctype_digit($tpf)){die('Keine Zahl bei den festen Trefferpunkte');}
if(isset($_POST['tpp'])) {$tpp=$_POST['tpp'];}if(!ctype_digit($tpp)){die('Keine Zahl f&uuml;r den K&ouml;perkraftzuschlag angegeben');}
if(isset($_POST['gewicht'])) {$gewicht=$_POST['gewicht'];}if(!ctype_digit($gewicht)){die('Keine Zahl f&uuml;r das Gewicht eingegeben');}
if(isset($_POST['laenge'])) {$laenge=$_POST['laenge'];}if(!ctype_digit($laenge)){die('Keine Zahl f&uuml;r die L&auml;nge eingegeben');}
if(isset($_POST['bf'])) {$bf=$_POST['bf'];}if(!ctype_digit($bf)){die('Keine Zahl bei dem Bruchfaktor eingegeben');}
if(isset($_POST['wv1'])) {$wv1=$_POST['wv1'];}if(!ctype_digit($wv1)){die('Keine Zahl f&uuml;r den Atackenwaffenvergleich eingegeben');}
if(isset($_POST['wv2'])) {$wv2=$_POST['wv2'];}if(!ctype_digit($wv2)){die('Keine Zahl f&uuml;r den Paradewaffenvergleich eingegeben');}
if(isset($_POST['beschreibung'])) {$beschreibung=$_POST['beschreibung'];}
if(isset($_POST['oregel'])) {$oregel=$_POST['oregel'];}
if(isset($_POST['regiono'])) {$regiono=$_POST['regiono'];}
if(isset($_POST['regioth'])) {$regioth=$_POST['regioth'];}
if(isset($_POST['regiobo'])) {$regiobo=$_POST['regiobo'];}
if(isset($_POST['regiofi'])) {$regiofi=$_POST['regiofi'];}
if(isset($_POST['regioel'])) {$regioel=$_POST['regioel'];}
if(isset($_POST['regioor'])) {$regioor=$_POST['regioor'];}
if(isset($_POST['regiowe'])) {$regiowe=$_POST['regiowe'];}
if(isset($_POST['regioto'])) {$regioto=$_POST['regioto'];}
if(isset($_POST['regioha'])) {$regioha=$_POST['regioha'];}
if(isset($_POST['regioga'])) {$regioga=$_POST['regioga'];}
if(isset($_POST['regiozw'])) {$regiozw=$_POST['regiozw'];}
if(isset($_POST['regiopu'])) {$regiopu=$_POST['regiopu'];}
if(isset($_POST['regiolf'])) {$regiolf=$_POST['regiolf'];}
if(isset($_POST['regiozy'])) {$regiozy=$_POST['regiozy'];}
if(isset($_POST['regiokh'])) {$regiokh=$_POST['regiokh'];}
if(isset($_POST['regiomh'])) {$regiomh=$_POST['regiomh'];}
if(isset($_POST['regioma'])) {$regioma=$_POST['regioma'];}
if(isset($_POST['regiosu'])) {$regiosu=$_POST['regiosu'];}
if(isset($_POST['regiomo'])) {$regiomo=$_POST['regiomo'];}
if(isset($_POST['regiowa'])) {$regiowa=$_POST['regiowa'];}
if(isset($_POST['regiopp'])) {$regiopp=$_POST['regiopp'];}

	$sql = 'INSERT INTO
				dsa_waffen(typ, name, tpw, tpf, tpp, gewicht, laenge, bf, wv1, wv2, beschreibung, oregel, regiono, regioth, regiobo, regiofi, regioel, regioor, regiowe, regioto, regioha, regioga, regiozw, regiopu, regiolf, regiozy, regiokh, regiomh, regioma, regiosu, regiomo, regiowa, regiopp)
			VALUES
				(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
	$statement = $db->prepare($sql);
	if (!$statement) {
		die ('Es konnte kein SQL-Query vorbereitet werden: '.$db->error);
	}
	$statement->bind_param('ssiiiiiiiissiiiiiiiiiiiiiiiiiiiii', $typ, $name, $tpw, $tpf, $tpp, $gewicht, $laenge, $bf, $wv1, $wv2, $beschreibung, $oregel, $regiono, $regioth, $regiobo, $regiofi, $regioel, $regioor, $regiowe, $regioto, $regioha, $regioga, $regiozw, $regiopu, $regiolf, $regiozy, $regiokh, $regiomh, $regioma, $regiosu, $regiomo, $regiowa, $regiopp);
	if (!$statement->execute()) {
		die ('Query konnte nicht ausgeführt werden: '.$statement->error);
	}
}
Datenbankstruktur

Code: Alles auswählen

  ID int(10)   UNSIGNED Nein Kein auto_increment               
  typ char(35) latin1_german1_ci  Ja NULL                
  name char(35) latin1_german1_ci  Ja NULL                
  tpw int(1)   Ja NULL                
  tpf int(1)   Ja NULL                
  tpp int(1)   Ja NULL                
  gewicht int(5)   Ja NULL                
  laenge int(3)   Ja NULL                
  bf int(1)   Ja NULL                
  wv1 int(2)   Ja NULL                
  wv2 int(2)   Ja NULL                
  beschreibung text latin1_german1_ci  Ja NULL                
  oregel text latin1_german1_ci  Ja NULL                
  regiono tinyint(1)   Ja NULL                
  regioth tinyint(1)   Ja NULL                
  regiobo tinyint(1)   Ja NULL                
  regiofi tinyint(1)   Ja NULL                
  regioel tinyint(1)   Ja NULL                
  regioor tinyint(1)   Ja NULL                
  regiowe tinyint(1)   Ja NULL                
  regioto tinyint(1)   Ja NULL                
  regioha tinyint(1)   Ja NULL                
  regioga tinyint(1)   Ja NULL                
  regiozw tinyint(1)   Ja NULL                
  regiopu tinyint(1)   Ja NULL                
  regiolf tinyint(1)   Ja NULL                
  regiozy tinyint(1)   Ja NULL                
  regiokh tinyint(1)   Ja NULL                
  regiomh tinyint(1)   Ja NULL                
  regioma tinyint(1)   Ja NULL                
  regiosu tinyint(1)   Ja NULL                
  regiomo tinyint(1)   Ja NULL                
  regiowa tinyint(1)   Ja NULL                
  regiopp tinyint(1)   Ja NULL                

Benutzeravatar
varmandra
Commander
Beiträge: 266
Registriert: 24.09.2008, 20:32

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von varmandra » 21.09.2009, 20:34

Hier mit müsst ich doch überprüft haben ob die eingaben passend sind.

Code: Alles auswählen

function zahl1($zahl1)
{
if(empty($zahl1)){die('leeres Feld');}
if(!ctype_digit($zahl1)){die('keine zahl');}
if(strlen($zahl1)<=1){die('zu große zahl');}
}
1. das feld ist nicht leer
2. es handelt sich um eine Zahl
3. die zahl ist nicht zu groß (SQL: int(1))

nur 3. klappt nicht. eigentlich sollte es doch funktionieren, wenn strlen($zahl1) einen Wert von kleiner gleich 1 hat, sprich man nur eine zahl eingetippt hat.

Und noch eine weitere frage, wenn in der datenbank NULL steht, ist es dann nur "NULL" oder auch "0"?

BdT
Varmandra
Zuletzt geändert von varmandra am 21.09.2009, 21:09, insgesamt 1-mal geändert.

Benutzeravatar
Epfi
Admiral
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 10520
Registriert: 08.03.2004, 11:02
Wohnort: Haus, das Verrückte macht
Kontaktdaten:

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von Epfi » 21.09.2009, 21:13

<= ist "kleiner gleich. Du willst vermutlich >=, das größer-gleich-zeichen. Ansonsten schlage ich für zahlen vor, dass du einfach guckst, ob die zahl kleiner 10 und größer 0 ist.
hartware.net - *** ****** ***, ** ************ **** **** *********** ****.

Benutzeravatar
varmandra
Commander
Beiträge: 266
Registriert: 24.09.2008, 20:32

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von varmandra » 21.09.2009, 22:23

Epfi hat geschrieben:<= ist "kleiner gleich. Du willst vermutlich >=, das größer-gleich-zeichen. Ansonsten schlage ich für zahlen vor, dass du einfach guckst, ob die zahl kleiner 10 und größer 0 ist.
Naja eigenlich will ich ja das "kleiner gleich" haben, den für die Zahlen 0-9 liefert strlen() als Ausgabe eine "1", empty() schließt ja die 0 aus, somit müsste ja "<=1" eine Wahre aussagen sein, also kein "DIE".

ich benutze die Funktion ein wenig geändert auch noch um damit Zahlen von 0-99 abdecken, da sollte dann strlen() dann 1 oder 2 liefern und somit <=2 sein usw....

aber irgendwie geht das nicht, bei keiner Funktion, ich hab mir auch mal per echo die Werte von strlen() angeben lassen, und die passten auch, spich wenn ich eine zahl von 0-9 eingebe bekomme ich eine 1 und wenn ich 10-99 eingeben bekomme ich eine 2, von 100-999 eine 3, 1000-9999 eine 4 und 10000-99999 eine 5.

Fals kein andere einen Einfall hat warum das so nicht geht, werd ich wohl deinem Vorschlag folgen, wo bei ich halt 0<=$zahl<10 brauche, für diesen Fall.

BdT
Varmandra
Zuletzt geändert von varmandra am 21.09.2009, 22:26, insgesamt 1-mal geändert.

stanglwirt
Fleet Captain
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 1591
Registriert: 17.03.2004, 07:22

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von stanglwirt » 22.09.2009, 08:42

http://www.ibm.com/developerworks/library/os-debug/

mach das mal, dann findest deine fehler. und auf richtige zahlenwerte prüft man z.b. mit $zahl < 10 und nicht anhand der stringlänge.
Zuletzt geändert von stanglwirt am 22.09.2009, 08:46, insgesamt 2-mal geändert.
MfG
everybody´s darling is everybody´s Arschloch. (c) Franz Josef Strauß

Benutzeravatar
varmandra
Commander
Beiträge: 266
Registriert: 24.09.2008, 20:32

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von varmandra » 28.09.2009, 20:27

So nach langem probieren usw. hab ich nun das eintragen feritg, zumindest funktioniert alles und die Überprüfing der Eingaben sollte eigentlich alles verhinder was nicht den Regeln enspricht (von DSA Regelwerk her).
Nur noch mal ein frage, wenn jetzt von einem anderem Server die anfrage ans formular geschickt wird, kann/sollte man die abblocken?

Code: Alles auswählen

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
global $typ, $name, $tpw, $tpf, $tpp, $gewicht, $laenge, $bf, $wv1, $wv2, $beschreibung, $oregel, $regiono, $regioth, $regiobo, $regiofi, $regioel, $regioor, $regiowe, $regioto, $regioha, $regioga, $regiozw, $regiopu, $regiolf, $regiozy, $regiokh, $regiomh, $regioma, $regiosu, $regiomo, $regiowa, $regiopp, $magiw, $zwerg1w, $zwerg2w, $zwergnw, $prevw, $region, $a, $fehler;

if ('POST' == $_SERVER['REQUEST_METHOD'])
	{
		if(isset($_POST['typ'])) {$typ=$_POST['typ'];}
		if(isset($_POST['name'])) {$name=$_POST['name'];}
		if(isset($_POST['tpw'])) {$tpw=$_POST['tpw'];}
		if(isset($_POST['tpf'])) {$tpf=$_POST['tpf'];}
		if(isset($_POST['tpp'])) {$tpp=$_POST['tpp'];}
		if(isset($_POST['gewicht'])) {$gewicht=$_POST['gewicht'];}
		if(isset($_POST['laenge'])) {$laenge=$_POST['laenge'];}
		if(isset($_POST['bf'])) {$bf=$_POST['bf'];}
		if(isset($_POST['wv1'])) {$wv1=$_POST['wv1'];}
		if(isset($_POST['wv2'])) {$wv2=$_POST['wv2'];}
		if(isset($_POST['beschreibung'])) {$beschreibung=$_POST['beschreibung'];}
		if(isset($_POST['oregel'])) {$oregel=$_POST['oregel'];}
		if(isset($_POST['regiono'])) {$regiono=$_POST['regiono'];}
		if(isset($_POST['regioth'])) {$regioth=$_POST['regioth'];}
		if(isset($_POST['regiobo'])) {$regiobo=$_POST['regiobo'];}
		if(isset($_POST['regiofi'])) {$regiofi=$_POST['regiofi'];}
		if(isset($_POST['regioel'])) {$regioel=$_POST['regioel'];}
		if(isset($_POST['regioor'])) {$regioor=$_POST['regioor'];}
		if(isset($_POST['regiowe'])) {$regiowe=$_POST['regiowe'];}
		if(isset($_POST['regioto'])) {$regioto=$_POST['regioto'];}
		if(isset($_POST['regioha'])) {$regioha=$_POST['regioha'];}
		if(isset($_POST['regioga'])) {$regioga=$_POST['regioga'];}
		if(isset($_POST['regiozw'])) {$regiozw=$_POST['regiozw'];}
		if(isset($_POST['regiopu'])) {$regiopu=$_POST['regiopu'];}
		if(isset($_POST['regiolf'])) {$regiolf=$_POST['regiolf'];}
		if(isset($_POST['regiozy'])) {$regiozy=$_POST['regiozy'];}
		if(isset($_POST['regiokh'])) {$regiokh=$_POST['regiokh'];}
		if(isset($_POST['regiomh'])) {$regiomh=$_POST['regiomh'];}
		if(isset($_POST['regioma'])) {$regioma=$_POST['regioma'];}
		if(isset($_POST['regiosu'])) {$regiosu=$_POST['regiosu'];}
		if(isset($_POST['regiomo'])) {$regiomo=$_POST['regiomo'];}
		if(isset($_POST['regiowa'])) {$regiowa=$_POST['regiowa'];}
		if(isset($_POST['regiopp'])) {$regiopp=$_POST['regiopp'];}
		if(isset($_POST['magiw'])) {$magiw=$_POST['magiw'];}
		if(isset($_POST['zwergw'])) {$zwergw=$_POST['zwerg1w'];}
		if(isset($_POST['zwergw'])) {$zwergw=$_POST['zwerg2w'];}
		if(isset($_POST['zwergw'])) {$zwergw=$_POST['zwergnw'];}
		if(isset($_POST['prevw'])) {$prevw=$_POST['prevw'];}
	if (empty($typ)) {$fehler = $fehler.'Waffentyp w&auml;hlen, ';}
	if (empty($name)) {$fehler = $fehler.'kein Namen, ';}
	if (empty($tpw)){$fehler = $fehler.'W&uuml;rfelanzahl fehlt, ';} 
	else{
		if(ctype_digit($tpw))
			{
			if($tpw<10){}
			else{$fehler = $fehler.'W&uuml;rfelanzahl ist zu hoch (max. 9), ';}
			}
		else{$fehler = $fehler.'W&uuml;rfelanzahl ist keine Zahl, ';}
		}
	if($tpf!=NULL)
		{
		if(is_numeric($tpf))
			{
			if($tpf<10){}
			else{$fehler = $fehler.'Festentrefferpunkten zu hoch (max. 9), ';}
			}
		else{$fehler = $fehler.'Festentrefferpunkten ist keine Zahl, ';}
		}
	if ($tpp==NULL){$fehler = $fehler.'keine KK-Zuschlag, ';} 
	else
		{
        if(ctype_digit($tpp))
			{
			if($tpp<25){}
			else{$fehler = $fehler.'KK-Zuschlag zu hoch (max. 24), ';}
			}
		else{$fehler = $fehler.'KK-Zuschlag ist keine Zahl, ';}
		}
	if ($gewicht==NULL){$fehler = $fehler.'Gewicht fehlt, ';} 
	else
		{
        if(ctype_digit($gewicht))
			{
			if($gewicht<15001){}
			else{$fehler = $fehler.'Gewicht zu hoch (max. 15000 Unzen), ';}
			}
		else{$fehler = $fehler.'Gewicht ist keine Zahl, ';}
		}
	if ($laenge==NULL){$fehler = $fehler.'L&auml;nge fehlt, ';} 
	else
		{
        if(ctype_digit($laenge))
			{
			if($laenge<501){}
			else{$fehler = $fehler.'L&auml;nge zu gro&szlig; (max. 500 Halbfinger), ';}
			}
		else{$fehler = $fehler.'L&auml;nge ist keine Zahl, ';}
		}
	if ($bf==NULL){$fehler = $fehler.'Bruchfaktor fehlt, ';} 
	else
		{
        if(ctype_digit($bf))
			{
			if($bf<10){}
			else{$fehler = $fehler.'Bruchfaktor zu hoch (max. 9), ';}
			}
		else{$fehler = $fehler.'Bruchfaktor ist keine Zahl, ';}
		}
	if ($wv1==NULL){$fehler = $fehler.'Waffenvergleich fehlt, '; } 
	else
		{
		if(ctype_digit($wv1))
			{
			if($wv1<19){}
			else{$fehler = $fehler.'Waffenvergleich zu hoch (max. 18), ';}
			}
		else{$fehler = $fehler.'Waffenvergleich ist keine Zahl, ';}
		}
	if ($wv2==NULL){$fehler = $fehler.'Waffenvergleich fehlt, '; } 
	else
		{
		if(ctype_digit($wv2))
			{
			if($wv2<19){}
			else{$fehler = $fehler.'Waffenvergleich zu hoch (max. 18), ';}
			}
		else{$fehler = $fehler.'Waffenvergleich ist keine Zahl, ';}
		}
	if (empty($beschreibung)){$beschreibung='Keine Beschreibung eingegeben';}
	if (empty($oregel)){$oregel='Keine Optionale Regel eingegeben/vorhanden';}
	$region=array ($regiono, $regioth, $regiobo, $regiofi, $regioel, $regioor, $regiowe, $regioto, $regioha, $regioga, $regiozw, $regiopu, $regiolf, $regiozy, $regiokh, $regiomh, $regioma, $regiosu, $regiomo, $regiowa, $regiopp);
	foreach ($region as $value) { $a = $value+$a;}if ($a==0){$fehler = $fehler.'<br> Bitte Herkunftsregion w&auml;hlen, bzw. ob es eine Pers&ouml;nliche Waffe handelt.';}
	if ($fehler==NULL)
		{
		$db = new mysqli('localhost', 'dsa', '*************', 'DSA');
		if (mysqli_connect_errno()){die('Konnte keine Verbindung zur Datenbank aufbauen: '.mysqli_connect_error().'('.mysqli_connect_errno().')');}
		$sql = 'INSERT INTO dsa_waffen(typ, name, tpw, tpf, tpp, gewicht, laenge, bf, wv1, wv2, beschreibung, oregel, regiono, regioth, regiobo, regiofi, regioel, regioor, regiowe, regioto, regioha, regioga, regiozw, regiopu, regiolf, regiozy, regiokh, regiomh, regioma, regiosu, regiomo, regiowa, regiopp, magiw, zwerg1w, zwerg2w, zwergnw, prevw)
			VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)';
		$statement = $db->prepare($sql);
		if (!$statement){die ('Es konnte kein SQL-Query vorbereitet werden: '.$db->error);}
		$statement->bind_param('ssiiiiiiiissiiiiiiiiiiiiiiiiiiiiiiiiii', $typ, $name, $tpw, $tpf, $tpp, $gewicht, $laenge, $bf, $wv1, $wv2, $beschreibung, $oregel, $regiono, $regioth, $regiobo, $regiofi, $regioel, $regioor, $regiowe, $regioto, $regioha, $regioga, $regiozw, $regiopu, $regiolf, $regiozy, $regiokh, $regiomh, $regioma, $regiosu, $regiomo, $regiowa, $regiopp, $magiw, $zwerg1w, $zwerg2w, $zwergnw, $prevw);
		if (!$statement->execute()){die ('Query konnte nicht ausgeführt werden: '.$statement->error);}
		else{echo 'Eintag erfolgreich';}
		}
	}
function formular_ausgabe($typ, $name, $tpw, $tpf, $tpp, $gewicht, $laenge, $bf, $wv1, $wv2, $beschreibung, $oregel, $regiono, $regioth, $regiobo, $regiofi, $regioel, $regioor, $regiowe, $regioto, $regioha, $regioga, $regiozw, $regiopu, $regiolf, $regiozy, $regiokh, $regiomh, $regioma, $regiosu, $regiomo, $regiowa, $regiopp, $magiw, $zwerg1w, $zwerg2w, $zwergnw, $prevw,$fehler)
	{
	echo '<html><head></head><body>
		<form name="formular" action="waffen.php" method=post>Waffenart:<select name="typ">
			<option value="" ';if ($fehler!=NULL){if(empty($typ)){echo'selected';}} echo'>Bitte Waffentyp w&auml;len</option>
			<option value="aexte" ';if ($fehler!=NULL){if($typ=='aexte'){echo'selected';}} echo'>&Auml;xte und Beile</option>
			<option value="dolche" ';if ($fehler!=NULL){if($typ=='dolche'){echo'selected';}} echo'>Dolche</option>
			<option value="infanteriewaffen" ';if ($fehler!=NULL){if($typ=='infanteriewaffen'){echo'selected';}} echo'>Infanteriewaffen</option>
			<option value="kettenwaffen" ';if ($fehler!=NULL){if($typ=='kettenwaffen'){echo'selected';}} echo'>Kettenwaffen</option>
			<option value="peitsche" ';if ($fehler!=NULL){if($typ=='peitsche'){echo'selected';}} echo'>Peitsche</option>
			<option value="schhiebwaffen" ';if ($fehler!=NULL){if($typ=='schhiebwaffen'){echo'selected';}} echo'>Scharfe Hiebwaffen</option>
			<option value="schwerter" ';if ($fehler!=NULL){if($typ=='schwerter'){echo'selected';}} echo'>Schwerter</option>
			<option value="speere" ';if ($fehler!=NULL){if($typ=='speere'){echo'selected';}} echo'>Speere und St&auml;be</option>
			<option value="stichwaffen" ';if ($fehler!=NULL){if($typ=='stichwaffen'){echo'selected';}} echo'>Stichwaffen</option>
			<option value="sthiebwaffen" ';if ($fehler!=NULL){if($typ=='sthiebwaffen'){echo'selected';}} echo'>Stumpfe Hiebwaffen</option>
			<option value="zweihaender" ';if ($fehler!=NULL){if($typ=='zweihaender'){echo'selected';}} echo'>Zweih&auml;nder</option>
			<option value="lanzen" ';if ($fehler!=NULL){if($typ=='lanzen'){echo'selected';}} echo'>Lanzen</option>
	</select>
		<p>Name:<input name="name" size="30" value="';if ($fehler!=NULL){echo $name;}echo'">
		<p>Trefferpunkte:<input name="tpw" size="1" value="';if ($fehler!=NULL){echo $tpw;}echo'">W+<input name="tpf" size="1" value="';if ($fehler!=NULL){echo $tpf;}echo'">
		<p>TP+: KK-<input name="tpp" size="1" value="';if ($fehler!=NULL){echo $tpp;}echo'">
		<p>Gewicht:<input name="gewicht" size="5" value="';if ($fehler!=NULL){echo $gewicht;}echo'">
		<p>L&auml;nge:<input name="laenge" size="3" value="';if ($fehler!=NULL){echo $laenge;}echo'">
		<p>Waffenvergleich<input name="wv1" size="1" value="';if ($fehler!=NULL){echo $wv1;}echo'">/<input name="wv2" size="1" value="';if ($fehler!=NULL){echo $wv2;}echo'">
		<p>Bruchfaktor:<input name="bf" size="1"  value="';if ($fehler!=NULL){echo $bf;}echo'">
		<p>Beschreibung:<textarea cols="50" rows="5" name="beschreibung">';if ($fehler!=NULL){echo $beschreibung;}echo'</textarea>
		<p>Optionale Regeln:<textarea cols="50" rows="5" name="oregel">';if ($fehler!=NULL){echo $oregel;}echo'</textarea>
		<p>
		<table width="100%" border="0" cellspacing="0" cellpadding="0">
		<tr>
			<td><input type="checkbox" name="regiono" value="1" ';if ($fehler!=NULL){if($regiono==1){echo'checked';}}echo'>Nordlande</td>
			<td><input type="checkbox" name="regioth" value="1" ';if ($fehler!=NULL){if($regioth==1){echo'checked';}}echo'>Thorwal</td>
			<td><input type="checkbox" name="regiobo" value="1" ';if ($fehler!=NULL){if($regiobo==1){echo'checked';}}echo'>Bornland</td>
			<td><input type="checkbox" name="regiofi" value="1" ';if ($fehler!=NULL){if($regiofi==1){echo'checked';}}echo'>Firnelfen Gebiete</td>
			<td><input type="checkbox" name="regioel" value="1" ';if ($fehler!=NULL){if($regioel==1){echo'checked';}}echo'>Au- und Waldelfen Gebiete</td>
		</tr>
		<tr>
			<td><input type="checkbox" name="regioor" value="1" ';if ($fehler!=NULL){if($regioor==1){echo'checked';}}echo'>Orkland</td>
			<td><input type="checkbox" name="regiowe" value="1" ';if ($fehler!=NULL){if($regiowe==1){echo'checked';}}echo'>Weiden</td>
			<td><input type="checkbox" name="regioto" value="1" ';if ($fehler!=NULL){if($regioto==1){echo'checked';}}echo'>Tobrien</td>
			<td><input type="checkbox" name="regioha" value="1" ';if ($fehler!=NULL){if($regioha==1){echo'checked';}}echo'>Havena</td>
			<td><input type="checkbox" name="regioga" value="1" ';if ($fehler!=NULL){if($regioga==1){echo'checked';}}echo'>Gareth</td>
		</tr>
		<tr>
			<td><input type="checkbox" name="regiozw" value="1" ';if ($fehler!=NULL){if($regiozw==1){echo'checked';}}echo'>Zwergengebiete</td>
			<td><input type="checkbox" name="regiopu" value="1" ';if ($fehler!=NULL){if($regiopu==1){echo'checked';}}echo'>Punin</td>
			<td><input type="checkbox" name="regiolf" value="1" ';if ($fehler!=NULL){if($regiolf==1){echo'checked';}}echo'>Liebliches Feld</td>
			<td><input type="checkbox" name="regiozy" value="1" ';if ($fehler!=NULL){if($regiozy==1){echo'checked';}}echo'>Zyklopeninseln</td>
			<td><input type="checkbox" name="regiokh" value="1" ';if ($fehler!=NULL){if($regiokh==1){echo'checked';}}echo'>Khomw&uuml;ste</td>
		</tr>
		<tr>
			<td><input type="checkbox" name="regiomh" value="1" ';if ($fehler!=NULL){if($regiomh==1){echo'checked';}}echo'>Mhanadistan</td>
			<td><input type="checkbox" name="regioma" value="1" ';if ($fehler!=NULL){if($regioma==1){echo'checked';}}echo'>Maraskan</td>
			<td><input type="checkbox" name="regiosu" value="1" ';if ($fehler!=NULL){if($regiosu==1){echo'checked';}}echo'>Al\'Anfa</td>
			<td><input type="checkbox" name="regiomo" value="1" ';if ($fehler!=NULL){if($regiomo==1){echo'checked';}}echo'>Mohagebiete</td>
			<td><input type="checkbox" name="regiowa" value="1" ';if ($fehler!=NULL){if($regiowa==1){echo'checked';}}echo'>Waldinseln</td>
		</tr>
		<tr>
			<td><input type="checkbox" name="regiopp" value="1" ';if ($fehler!=NULL){if($regiopp==1){echo'checked';}}echo'>Pers&ouml;nliche Waffen</td>
			<td><input type="checkbox" name="magiw" value="1" ';if ($fehler!=NULL){if($magiw==1){echo'checked';}}echo'>magiwsche Waffen</td>
			<td><input type="checkbox" name="zwerg1w" value="1" ';if ($fehler!=NULL){if($zwerg1w==1){echo'checked';}}echo'>Zwergen 1. Handwaffen</td>
			<td><input type="checkbox" name="zwerg2w" value="1" ';if ($fehler!=NULL){if($zwerg2w==1){echo'checked';}}echo'>Zwergen 2. Handwaffen</td>
			<td><input type="checkbox" name="zwergnw" value="1" ';if ($fehler!=NULL){if($zwergnw==1){echo'checked';}}echo'>Nicht f&uuml;r Zwerge geeignet</td>
		</tr>
		<tr>
			<td><input type="checkbox" name="prevw" value="1" ';if ($fehler!=NULL){if($prevw==1){echo'checked';}}echo'>Previligierten Waffen</td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
		</tr>
	</table>
	<p><input type="submit" value="Speichern" name="speichern"><input type="reset"></from></body></html>';
	}
echo $fehler;
formular_ausgabe($typ, $name, $tpw, $tpf, $tpp, $gewicht, $laenge, $bf, $wv1, $wv2, $beschreibung, $oregel, $regiono, $regioth, $regiobo, $regiofi, $regioel, $regioor, $regiowe, $regioto, $regioha, $regioga, $regiozw, $regiopu, $regiolf, $regiozy, $regiokh, $regiomh, $regioma, $regiosu, $regiomo, $regiowa, $regiopp, $magiw, $zwerg1w, $zwerg2w, $zwergnw, $prevw, $fehler);
?>
Das wollt ich dann noch rauswerfen wenn es in funktion tretten soll

Code: Alles auswählen

error_reporting(E_ALL);
ini_set('display_errors', 1);
global $typ, $name, $tpw, $tpf, $tpp, $gewicht, $laenge, $bf, $wv1, $wv2, $beschreibung, $oregel, $regiono, $regioth, $regiobo, $regiofi, $regioel, $regioor, $regiowe, $regioto, $regioha, $regioga, $regiozw, $regiopu, $regiolf, $regiozy, $regiokh, $regiomh, $regioma, $regiosu, $regiomo, $regiowa, $regiopp, $magiw, $zwerg1w, $zwerg2w, $zwergnw, $prevw, $region, $a, $fehler;
Zuletzt geändert von varmandra am 28.09.2009, 20:32, insgesamt 2-mal geändert.

stanglwirt
Fleet Captain
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 1591
Registriert: 17.03.2004, 07:22

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von stanglwirt » 29.09.2009, 08:23

varmandra hat geschrieben: Nur noch mal ein frage, wenn jetzt von einem anderem Server die anfrage ans formular geschickt wird, kann/sollte man die abblocken?
das kannst du nur via http-referer machen. da man diesen aber manipulieren kann, kannst du das auch gleich weglassen...
MfG
everybody´s darling is everybody´s Arschloch. (c) Franz Josef Strauß

Benutzeravatar
varmandra
Commander
Beiträge: 266
Registriert: 24.09.2008, 20:32

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von varmandra » 15.11.2009, 11:57

So, weiter gehts...
hab mal wieder was, wo ich nen Brett vor dem kopf habe und nicht weiter weis.

und zwar hab ich ja ein <select> und da will ich mit onchange gerne die Seite neuladen und ne variable mit geben.

Hab da auch schon im internet was gesucht aber das hat mich nicht wirklich weiter gebracht.

gibt es bei javascript eine möglickeit wie bei php sachen zusammenzusetzen, z.B. PHP: echo'blabal '.$var.' blala'; das ich die url zusammen fügen kann: onchange="location.href=\'index.php?action=waffeneingabe&typ=this.value\'"

Das onchange funktioniert, nur this.value bekomme ich nicht als das hin was es sein soll, am liebsten halt direkt in dem onchange ohne eine extra funktion zu schreiben.

die url der seite von wo es aufgerufen wird lautet index.php?action=waffeneingabe

brauch da mal eine stoß in die richtige richtung.

BdT
Frank

Leviathan
Captain
Turtleboard Veteran
Turtleboard Veteran
Beiträge: 872
Registriert: 08.03.2004, 17:09
Wohnort: Kiel
Kontaktdaten:

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von Leviathan » 15.11.2009, 14:18

Was du suchst, ist der String-Konkatenator. Bei PHP ist es der Punkt, bei JavaScript das Plus-Zeichen.

Benutzeravatar
varmandra
Commander
Beiträge: 266
Registriert: 24.09.2008, 20:32

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von varmandra » 15.11.2009, 15:39

Leviathan hat geschrieben:Was du suchst, ist der String-Konkatenator. Bei PHP ist es der Punkt, bei JavaScript das Plus-Zeichen.
recht herzlichen dank das wars was mir gefehlt hat.

Code: Alles auswählen

onchange="location.href(\'index.php?action=waffeneingabe&typ=\'+this.value)"
damit gehts :)

BdT
Varmandra

Benutzeravatar
varmandra
Commander
Beiträge: 266
Registriert: 24.09.2008, 20:32

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von varmandra » 17.11.2009, 19:17

Hab da wieder ein kleines problem

Code: Alles auswählen

if($enah!=NULL)
   {
     if(is_numeric($enah))
        {
         if($enah<10 || $enah>-10){}
         else{$fehler = $fehler.'Entfernugsschaden zu hoch/niedrig (+9/-9), ';}
         }
     else{$fehler = $fehler.'Entfernugsschaden ist keine Zahl, ';}
   }
else{$enah=0;}
ich weis nicht wie so aber bei dieser überprüfung kommt am ende immer 0 raus egal was ich eingebe. es soll aber Zahlen von -9 bis 9 rauskommen wenn man was eingibt und eine 0 wenn man nichts eingibt.
Ich seh bloß nicht warum da immer eine 0 raus kommt

BdT
Frank

Benutzeravatar
varmandra
Commander
Beiträge: 266
Registriert: 24.09.2008, 20:32

Re: Mit PHP was in eine MySQL Datenbankschreiben

Ungelesener Beitrag von varmandra » 17.11.2009, 19:28

Sorrry fehler gefunden...man sollte bei der übergabe der variablen auch gucken was man schreibt *grml*

Antworten