Markus L.: N00b Frage in PHP, bitte helfen!

Also bis vor 2 Wochen konnte ich noch überhaupt kein PHP
und jetz habe ich mir folgendes Skript "zusammengebastelt",
dass die eingaben aus ner Form von vorher übergibt:

<?php
    $passwordmysql=$_POST['passmysql'];
    $user=$_POST['usermysql'];
    /* Connecting, selecting database */
    $link = mysql_connect("*********", "$user", "$passwordmysql")
        or die ("Could not connect : " . mysql_error());
    mysql_select_db("********") or die("Could not select database");
?>

Und ich habe folgende Frage:
Wenn man falschen User oder Passwort eingibt, soll er nur anzeigen
"Wonrg User or Password" und "exit" machen, nun die eigentliche Frage:
Wi kann ich in "or die ("Could not connect : " . mysql_error());"
noch weitere Kommandos verknüpfen? Er soll danach noch print und exit machen!

ich weiss es ist eine Newbie Frage aber ich weiss es halt nicht, ich bringe mit PHP ja selbst bei

  1. pruefe halt den rueckgabewert von mysql_select_db
    also
    if(!mysql_select_db("****")
    anweisung
    else
    anweisung2

    mfg

    1. pruefe halt den rueckgabewert von mysql_select_db
      also
      if(!mysql_select_db("****")

      Fährst Du grundsätzlich immer erst gegen den Baum, bevor Du nachschaust, ob Du noch auf der Straße fährst? Warum prüfst Du den Rückgabewert von mysql_select_db(), wenn Du wissen willst, ob mysql_connect() fehlgeschlagen ist?

      Schönen Tag,
        soenk.e

  2. Noch eine Ergänzungsfrage:
    Wie kann ich die lästingen
    Warning: Access denied for user: '******' (Using password: YES) in /*/*/*/*/*/htdocs/admin/control.php on line 94

    UNTERDRÜCKEN?

    Vielen Dank, die stören mich nämlich sehr!

    1. du solltest den fehler vermeiden...

      1. du solltest den fehler vermeiden...

        Eben nicht, es ist ja kein Fehler! Er kommt ja nur wenn man das falsche Passwort oder User eingibt! Aber ich will die Warnings einfach nicht anzeigen lassen!

        bitte Hilfe!

        1. habs rausgefunden:

          error_reporting (0);

          1. Hallo,

            habs rausgefunden:

            error_reporting (0);

            Das willst Du nicht wirklich, error_reporting muss waehrend der Entwicklung immer volles Programm an sein. Setze, wenn Du Deine Abfrage so machen willst, ein @ vor die my_sql Befehle.

            Dieter

            1. es ist aber nicht mehr in der entwicklung sondern fertig.
              jetzt wird nur noch

              "Wrong Username or Password!
              Cannot connect:" errorzeuch zB Access Denied

              angezeigt

  3. Hello,  <-- Das ist mal eine kurze Begrüßung

    <?php

    $passwordmysql = mysql_escape_sting(stripslashes($_POST['passmysql']));
         $user = mysql_escape_sting(stripslashes($_POST['usermysql']));

    $host="localhost"; ## oder nach Wunsch...

    /* Connecting, selecting database */
        $link = mysql_connect($host, "$user", "$passwordmysql");

    if (!$link)
    {
      echo "Ausgabe<br />";
      echo "Could not connect : " . mysql_error()."<br />";
      echo "noch ´ne Ausgabe<br />";

    exit;
    }

    mysql_select_db("********") or die("Could not select database");
    ?>

    Grüße      <-- Das ist dann die Verabschiedung

    Tom

    1. $passwordmysql = mysql_escape_sting(stripslashes($_POST['passmysql']));
           $user = mysql_escape_sting(stripslashes($_POST['usermysql']));

      $link = mysql_connect($host, "$user", "$passwordmysql");

      Es ist ja schön, daß mal jemand an mysql_escape_string() denkt, aber ausgerechnet hier macht es überhaupt keinen Sinn, sondern könnte ganz im Gegenteil die komplette Einlogprozedur unbrauchbar machen.

      Informiere Dich bitte über Sinn und Einsatzort von mysql_escape_string().

      Akzeptabel mag der Einsatz von strip_slashes() sein, äußerst amüsant an dieser Konstellation ist allerdings, daß Du erst mit strip_slashes() die Rückstriche aus Name und Passwort entfernst, nur um sie anschließend mit mysql_escape_string() wieder rein zu packen.

      Schönen Tag,
        soenk.e

      1. Hello Soenke,

        Es ist ja schön, daß mal jemand an mysql_escape_string() denkt, aber ausgerechnet hier macht es überhaupt keinen Sinn, sondern könnte ganz im Gegenteil die komplette Einlogprozedur unbrauchbar machen.

        Informiere Dich bitte über Sinn und Einsatzort von mysql_escape_string().

        Schön, dass Du das gesehen hast. Ich war mir nachher auch gar nicht mehr so sicher, ob denn die Werte überhaupt in Form eines Querys an MySQL übergeben werden. Leider gibt es zur tieferen Funktionsweise von mysql_connect im Handbich keine Informationen und so habe ich es dann mchher vergessen.

        ----------------------------------------------------------------------
        Welche Zeichen sind denn zulässig und welche können Schaden anrichten?
        ----------------------------------------------------------------------

        Akzeptabel mag der Einsatz von strip_slashes() sein

        Grüße

        Tom

        1. Ich war mir nachher auch gar nicht mehr so sicher, ob denn die Werte überhaupt in Form eines Querys an MySQL übergeben werden. Leider gibt es zur tieferen Funktionsweise von mysql_connect im Handbich keine Informationen und so habe ich es dann mchher vergessen.

          Funktionen aus externen Bibliotheken werden in PHP (leider) mehr oder weniger stur 1:1 übernommen. Von daher ist der richtige Ort zu Details einer Funktion nicht die PHP-Anleitung, sondern die der Funktionsbibliothek, in diesem Fall die von MySQL: http://www.mysql.com/doc/en/C_API_functions.html.

          Welche Zeichen sind denn zulässig und welche können Schaden anrichten?

          Zulässig für SQL-Textargumente sind ausnahmslos alle Zeichen; man sollte nur tunlichst darauf achten, welche Anführungszeichen genutzt werden, um diese Texte einzugrenzen. Diese müssen mit einem Rückstrich maskiert werden, denn beim Auftreten eines Anführungszeichens sucht der SQL-Parser einfach das nächste dieser Art und markiert dort das Ende des Textarguments. Kommt dieses Anführungszeichen jedoch auch im eigentlichen Text vor, würde der Text zu früh beendet werden - auf diese Art und Weise kann man die vorgegebenen Anführungszeichen des Programmieres aushebeln:

          delete from abonnenten where name="$name"

          Würde $name '" or 1=1 or "a"="' enthalten (ohne einfache Anführungszeichen, aber mit den doppelten), hätten wir im Endeffekt ohne escape_string() (oder add_slashes() bzw. deren PHP-Automatik-Äquivalent) folgenden Befehl:

          delete from abonnenten where name="" or 1=1 or "a"=""

          Kurz: Er löscht die komplette Tabelle.

          Zum Einsetzen von Variableninhalten in SQL-Befehle ist mysql_escape_string() _immer_ Pflicht (Ausnahme: Man prüft vorher, ob es sich um einen numerischen Wert handelt).

          Zulässig für Benutzernamen und Passwörter sind, soweit ich das in http://www.mysql.com/doc/en/User_names.html erkenne, ebenfalls alle Zeichen.
          Diese Daten werden direkt an eine eigene MySQL-Funktion übergeben, müssen also nicht mit mysql_escape_string() "gesichert" werden - und dürfen auch nicht, denn sollte ein Name oder Passwort ein Anführungszeichen enthalten (warum auch immer), hat man ein Problem: 'Peter "Lustig"' ist nicht dasselbe wie 'Peter "Lustig"'.

          Gruß,
            soenk.e