MySQL Schreibrechte

[quote=“timotheus123”]Kann mir vielleicht einer sagen, wesshalb jetzt beim Abschicken das hier als antwort kommt?

Bitte geben Sie einen Namen an.
Bitte geben Sie einen Vornamen an.
Bitte geben Sie eine Position an.
Bitte geben Sie ein Passwort an.
[/quote]
Weil du jetzt Variablen an Stellen benutzt hast, wo keine hingehören (bzw. wo sie in diesem Zusammenhang keinen Sinn ergeben).

[code]if ( isset($_REQUEST[“do”]) && $_REQUEST[“do”] == “insert” )
{

$error_msg    =    "";    

if ( $_REQUEST["$na"] == "" )[/code]

Sag uns, welcher Unterschied dir hier zwischen der ersten und der letzten Zeile auffällt, was den Zugriff auf Inhalte von $_REQUEST angeht.

Stelle bitte das error_reporting auf E_ALL und display_errors auf on während der Entwicklung - dann kann PHP dich schon auf viele Fehler direkt hinweisen.
(Wenn dir das nichts sagt, informiere dich bitte.)

Solltest du weitere Fragen stellen, an denen erkennbar ist, dass du das nicht gemacht hast, dann werde ich dir jedenfalls nicht mehr weiter antworten.

Leg’ los - es wird langsam Zeit …

statt$_REQUEST["$na"] == ""könntest du auchempty($_REQUEST["$na"])nehmen :stuck_out_tongue:
Vorallem schaut empty glaub auch ob ne Variable gesetzt ist^^ Daher man spart sich einen leisen Fehler der besagt man benutzt eine nicht definierte (erstellte) Variable ($_REQUEST["$na"])

ok, ich bin im Tutorial jetzt bei Übunbgen, und weiss, wo der Fehler lieggt:
Es werden keine Daten in den Variablen weitergegeben, oder angenommen! :slight_smile:

Nur, wo liegt der Fehler?

Bei

if ( $_REQUEST["na"] == "" ) habe ich das Dollarzeichen entfernt,
Bei

$query = "INSERT INTO `daten` (`na`,`vo`,`po`,`pw`) VALUES ('" . $na . "','" . $vo . "','" . $po . "','" . $pw . "')"; habe ich ein Dollarzeichen und
Und Bei

[code]Name

[/code] habe ich auch ein Dollarzeichen.

Jetzt kommt als Ausgabe:

Bitte geben Sie einen Namen an.
Bitte geben Sie einen Vornamen an.
Bitte geben Sie eine Position an.
Bitte geben Sie ein Passwort an.

Auch wenn ich bei den Dollarzechen die verschiedensten Variationen durchspiele, kommt entweder in der Datenbank na, vo, po, pw, oder die Felder werden mit neuer ID leer gespeichert. Kann mir bitte einer einen Tipp geben, wo der Fehler liegt?

PS: ich habe eine .php.ini mit den Werten:
error_reporting(E_ALL);
display_errors=on;

in das Verzeichnis kompiert!

Timotheus123

[quote=“timotheus123”]PS: ich habe eine .php.ini mit den Werten:
error_reporting(E_ALL);
display_errors=on;

in das Verzeichnis kompiert![/quote]
Dann teste erst mal per phphinfo() in einer Datei in diesem Verzeichnis, ob die Einstellungen auch angenommen wurden.

Hallo,

display_errors sind on,

nur error_reporting(E_ALL); scheint nicht zu funktionieren!

Aus PHPinfo():

display_errors On
error_reporting 6135

Timotheus123

Ähm … Du hast ja wohl nicht

so in eine php.ini geschrieben …?

Die php.ini kann nichts mit “Funktionsaufrufen” anfangen - die Schreibweise muss analog lauten, wie beim anderen Wert auch:

error_reporting = E_ALL display_errors = On

[quote=“timotheus123”]

[code]Name

[/code] habe ich auch ein Dollarzeichen.

Jetzt kommt als Ausgabe:

Bitte geben Sie einen Namen an.
Bitte geben Sie einen Vornamen an.
Bitte geben Sie eine Position an.
Bitte geben Sie ein Passwort an.
[/quote]das dass kommt ist kein Wunder^^ es müsste ja auch[code]Name

[/code]lauten :stuck_out_tongue: Was bringts dir wenn das Formular Feld jedes mal anders heißt, je-nach Inhalt von $na?

Hallo,

Also, der code sieht jetzt so aus:

[code]<?php

if ( isset($_REQUEST[“do”]) && $_REQUEST[“do”] == “insert” )
{

$error_msg    =    "";   

if ( $_REQUEST["na"] == "" )
{
    $error_msg    =    "Bitte geben Sie einen Namen an.<br>";
}

if ( $_REQUEST["vo"] == "" )
{
    $error_msg    .=    "Bitte geben Sie einen Vornamen an.<br>";
}

if ( $_REQUEST["po"] == "" )
{
    $error_msg    .=    "Bitte geben Sie eine Position an.<br>";
}
    if ( $_REQUEST["pw"] == "" )
{
    $error_msg    .=    "Bitte geben Sie ein Passwort an.<br>";
}
if ( $error_msg    == "")
{

$status = mysql_connect(“localhost”, “timotheus123”, “DOMino123”);

    if ( ! $status )
    {
        die("Konnte die Datenbank nicht erreichen!");
    }
   
    $status    =    mysql_select_db("timotheus123");
   
    if ( ! $status )
    {
        die("Konnte die Datenbank nicht &&auml;ndern: " . mysql_error() );
    }


  $query = "INSERT INTO `daten` (`na`,`vo`,`po`,`pw`) VALUES ('" . $na . "','" . $vo . "','" . $po . "','" . $pw . "')";

$result = mysql_query( $query );

    if ( ! $result )
    {
    die("Konnte den Datensatz nicht eintragen: " . mysql_error() );
    }
    else{

     echo "<font color='#00aa00'>";
     echo "Es wurde 1 Datensatz hinzugefügt<p>";
     echo "</font>";
  }

}

}
?>

<?php if ( $error_msg != "") { echo $error_msg; } ?> "> Name

Vorname

Position

Passwort

[/code]

Beim Amschicken schreibt der code in die MySQL Tabelle “daten” nur leere Felder, bei steigender ID. Das Formular meldet aber, dass es erfolgreich war (Es wurde 1 Datensatz hinzugefügt)

Nach meinem jetztigen Wissen, dank des Tutorials (php-einfach.de/php-tutorial/php-tutorial.php) arbeitet das Skript richtig, nur die Variablen haben keinen Wert in sich, und speichern dadurch auch nur leere Felder in der MYSQL-DB. Ich versteh nur nicht, wesshalb der überprüfungs Teil keine Meldung herausgibt. Also ist haben die Variablen doch einen Wert? :astonished: Wo liegt der Fehler?

Im Formular heisst es:

<label>Name <input type="text" name="na"> </label>

Nach meinem jetztigen Wissen muss es doch name="$na"> (mit $ ) heissen, weil “na” doch eine Variable ist, oder? Warum schreibt White-Tiger, es muss kein $ hin?

Timotheus123

Du überprüfst ganz andere Variablen, als die, welche du in der Query einsetzt.

Die, die du überprüfst, haben einen Inhalt - also keine Meldung.
Die, die du in die Query einsetzt, haben keinen Wert, sind nicht mal vorhanden - deshalb kommen in der Datenbank auch keine Werte an.

Und error_reporting=E_ALL würde dich auf letzteres auch hinweisen, wenn du’s endlich eingestellt hättest - also kümmere dich darum jetzt bitte zuerst!

3 Sachen fallen mir noch ein :stuck_out_tongue:

  1. statt <?php echo 'bla'; ?>kann man auch[quote]<?='bla'?>[/quote]nutzen
    Aber iwie kommst du mit den sehr sehr sehr einfachen Variblen noch nicht so klar :smiley: Ich wüsste echt ma gerne was du denkst bzw. wie du auf $na z.B. kommst :stuck_out_tongue:

  2. eigentlich kannst du dir das versteckte Formular feld sparen^^ Denn einfach schauen ob z.B. if(!empty($_POST["na"])) würde es auch tun^^
    und genau genommen solltest du auch nie eine Variable dessen Inhalt vom User bestimmt wird direkt in eine Datenbank o.ä. eintragen. Besser htmlspecialchars() oder htmlentities() rüber knallen :stuck_out_tongue: Stichwort SQLInjection (mysql_escape_string() die eigens dafür vorgesehene Funktion tuts natürlich auch :smiley:)

Noch Tipp am Rande :wink: Kp ob du es weißt, aber wenn dir mal jemand irgendwelche Funktionen nennt oder du diese nicht mehr genau kennst, hilft dir www.php.net die seite von PHP dort kann man oben rechts ganz einfach Funktionen suchen

Kann man, ist aber nicht generell empfehlenswert - short_open_tags steht oftmals auf off, um bspw. Probleme mit XML-Prologen zu vermeiden.

ich nutze fürs normale php auch immer<?php ?>
Nur allgemein sind “short_open_tags” nicht so schlimm, nur wenn man XML nutzen sollte könnte es für den Scripter praktisch sein es aus zu haben :stuck_out_tongue:

Schade eigentlich das “<?=” von “short_open_tags” abhängig ist da es nicht stört :stuck_out_tongue: Im Gegenteil ich finds übersichtlicher und PHP muss weniger parsen :smiley:

Naja dann soll er das mit “<?=” lieber vergessen^^ Muss vielleicht aber ma den PHPlern vortragen das <?= auch ohne short tags laufen könnte^^

Aber eine Optimierung gibts für dich noch^^
Du solltest auf jeden Fall Tabs statt Leerzeichen für die Formatierung nehmen, da die Dateien kleiner sind.
Auch wäre eigentlich ‘text’ besser als “text”, da PHP “text” parst und ‘text’ nicht.
Nachteil wenn man Variablen nutzen will muss man ‘text ‘.$var.’ text’ nutzen statt “text $var text” Aber man nutzt sowieso früher oder später zwangsweise '. oder ". z.B. für '.function() oder '.KONSTANTE oder '.(true?‘wenn true’:‘wenn false’)
Hoffe das ist jetzt nicht alles verwirrend ;D

übertreibs nicht, das macht vll. 0,0001% performancegewinn aus…

würde nicht sagen das es nur so wenig ist^^ Hatte glaub sogar mal was gelesen wo es jemand debugt hat… also was schneller ist^^ Natürlich versteht sich das es ne menge Text war etc :wink: Also nen Großes Script :stuck_out_tongue:
Außer ich irr mich :stuck_out_tongue: Müsste ma Googlen :smiley:

edit:
hier z.B.^^ 1. Ergebnis bei google :smiley:
marko-roeper.de/tutorials/ph … ichen.html
Allerdings ist das schon recht heavy^^ Kenne nur das Ergebnis nicht… laut ihm ists aber ein Großer unterschied (man müsste dazu sagen das es vermutlich nicht PHP 5.3 ist :wink:)

edit²:
Korrektur… links ist ein Ergebnis^^ Wow das überrascht sogar mich. Hätte ich echt nicht erwartet das es so groß ist^^ Aber ich nutz es so oder so da ich Performance Orientiert arbeite :stuck_out_tongue: Außerdem bei der Masse der User auf bplaced, macht es schon nen gewaltigen unterschied.

Sie sind deshalb “schlimm”, weil sie die Portierbarkeit von Scripten auf andere Systeme einschränken.

[quote]Schade eigentlich das “<?=” von “short_open_tags” abhängig ist […]
Muss vielleicht aber ma den PHPlern vortragen das <?= auch ohne short tags laufen könnte[/quote]
D’oh - die Konfigurations-Option short_open_tag ist extra dafür da, einstellen zu können, ob eben <? erlaubt sein soll oder nicht …

Deine Aussage folgt (mal wieder) in etwa der gleichen Logik wie “Schade, dass auf Bierflaschen Pfand ist - sonst könnt’ man die besser wegschmeissen” …

Und zum Rest gilt, was Michi gerade schon sagte - zumal wir hier einen Einsteiger vor uns haben, den du sicher nur noch mehr verwirrst, wenn du zu diesem Zeitpunkt mit solchen Nebensächlichkeiten ankommst, die für sein aktuelles Problem höchst irrelevant sind.

Da möchte ich einfach mal kurz woanders hin verweisen - forum.de.selfhtml.org/?t=189924&m=1265557
Lies dir mal durch, was dedlfix dort zum Thema Performance-Messungen schreibt.

zu dem "<?="
sry wenn ich mich irr [size=85](btw keine große Diskussion hier gehört hier nicht hin außer du verbesserst mich[/size]) <?= wird aber in XML nicht verwendet zumindest wüsste ich grade nicht wo (irgendwas ist da aber, glaub ich^^ Misst hilf mir, habs vor Augen :smiley:)

Es ist ja auch nicht XML, das damit im Zweifelsfalle ein Problem hat, sondern umgekehrt PHP.

das XML kein Problem hat is klar^^ PHP aber auch nicht wenn <?= immer gültig wäre auch wenn short tags aus sind. Denn wie gesagt XML verwendet <?= nicht sondern nur <? wegen <?xml
Verstehst du worauf ich hinaus will :ps:

Ja - du willst mal wieder so lange diskutieren, bis es doch wieder irgendwie so aussehen könnte, als ob du Recht hast … also das übliche.

short_open_tag ist eben nicht nur <?=, sondern auch <?
Gut, man könnte das so ändern, dass es ersteres nicht mehr betrifft, und nur noch letzteres - aber das wäre dann wiederum ziemlich inkonsequent.

Ganz oder gar nicht, basta, aus, fertig.

Hallo,

Mit den Variablen schaue ich nochmal, ob ich das selber hinbekomme!

Es hat etwas mit dem Code zu tun :p

$query = "INSERT INTO `daten` (`na`,`vo`,`po`,`pw`) VALUES ('" . $na . "','" . $vo . "','" . $po . "','" . $pw . "')";

@ chrisb: Ich habe in eine .php.ini den Inhalt:

error_reporting = E_ALL display_errors = On

reingeschrieben. Wie es in einem Forum gesagt wurde. (der Post war von 2007 - kann es sein, dass es desshalb nicht funktioniert?)

PS: ich kann meine .php.ini nicht hochladen. Nochmal die einzelheiten:

–>Name: .php.ini
–>Kompletter Inhalt:
error_reporting = E_ALL
display_errors = On

Timotheus123