WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   mit PHP Zugriff auf MySQL prüfen (http://www.wcm.at/forum/showthread.php?t=104515)

row 04.08.2003 16:38

mit PHP Zugriff auf MySQL prüfen
 
Bevor ich noch verzweifle, ich will mit diesem PHP Script schauen ob ich zugriff zu meiner MySQL Datenbank habe, aber es funkt. nicht.
Ist der Syntax in Ordnung?

<?php
$linkID = mysql_connect("localhost", "USERNAME", "PASSWORT");
if (!$linkID) die("Keine Verbindung zur Datenbank.");
?>

Danke!

schera 04.08.2003 18:01

Probier mal das:

$db = @MYSQL_CONNECT($db_server,$db_user,$db_passwort) or die ("Konnte keine Verbindung zur Datenbank herstellen");
$db_check = @MYSQL_SELECT_DB($db_name);

if($db) echo "Verbindung zur Datenbank wurde hergestellt";

Hoffe geholfen zu haben,

lG,

schera

AlexanderFX 04.08.2003 22:41

PHP-Code:

<?php

      $db 
mysql_connect($mysql_host $mysql_username $mysql_passwort);

       
$res mysql_query("show databases");

       
$num mysql_num_rows($res);
       echo 
"$num Datenbanken gefunden
"
;
    echo 
"
"
;

        for(
$i=0;$i<$num;$i++)
        {
            
$datenbank mysql_result($res$i);
            echo 
"

 +-----------------+
"
;
            echo 
" [b]    $datenbank[/b]
"
;
            
                   
$res1 mysql_db_query$datenbank"show tables");
                
$num1 mysql_num_rows$res1 );
                                    
                    
                    
                    for(
$j=0;$j<$num1;$j++)
                        {
                            
$tabellen mysql_result$res1$j );
                            echo
" --->  $tabellen
"
;
                        }
        }        
        

    
mysql_close($db);
?>

das zeigt dir die datenbanken und deren tabellen an

row 05.08.2003 09:56

@Schera
Super, mit Deinem Script habe ich es jetzt endlich geschafft zur Datenbank durchzudringen, danke!!!

@AlexanderFX
Danke für das Script - ist (noch) ein bissl komplex für mich.
Aber jetzt da ich weiss wie ich zur Datenbank komme kann ich mich ja mal damit rumspielen.

row 05.08.2003 15:19

Also das geht ja besser als befürchtet - ich kann schon mittels Formular in meine MySQLTabelle schreiben :)

Hätte da noch eine Frage - ich möchte eine Befragung (mittels Radiobuttons) machen, die über mehrere Seiten geht (immer eine Frage pro Seite). Das gesammelte Ergebnis der Fragen soll dann pro User in meine Tabelle geschrieben werden.
Nach dem System:
user1 - ergebnis frage 1 - ergebnis frage 2 - ergebnis frage 3 - ...
user2 - ergebnis frage 1 - ergebnis frage 2 - ergebnis frage 3 - ...
...

Wie mache ich den das am Besten dass der User über mehrere Seiten seine ID behält. Gibt's bei PHP sowas wie eine global Variable?
Any ideas?

tamiko 05.08.2003 18:05

Hmm, das müsste dann mit Sessions gehen

mehr unter http://at.php.net/manual/de/ref.session.php ;)


So gibst du ihm dann zb eintragen.php?sid=seinesession an, und die ID speicherst du im Script in die Session hinein also $SESSION[db_id]=$id


Ist eine recht sichere Methode,weil wenn du die ID direkt im Link übermitteln würdest könnte er mit eintragen.php?id=37 andere Einträge überschreiben :cool:

Who-T 06.08.2003 03:42

um etwas pingelig zu sein

die variable heißt

$_SESSION


bps:
index.php
Code:


<?php
  session_start();
  $_SESSION["username"] = "row";
  // now username is availiable on all session sites
?>
...
view username
...

next.php:
Code:

<?php
 session_start();
 echo $_SESSION["username"];

 doOtherStuff();

 session_destroy ();
 // now username is not availiable any more
?>


row 06.08.2003 15:57

Hey, danke für die Antworten, werde das mal ausprobieren!

Irv 06.08.2003 18:03

also ich verwende diesen script (in eigener datei, hier: "connDB.php"), und binde ihn bei jedem benötigten DB-Connect mit

PHP-Code:

<?php require 'connDB.php'?>

in mein script ein. die flush() bzw. ob_flush() anweisungen* verwende ich, damit die statusmeldungen sofort ausgegeben werden:

PHP-Code:

<?php
  
echo "<table width='100%'><tr><td align='center'>";
    
//Connect to Database
    
$db="DATABASE"$table="TABLE";
    echo 
"Datenbankverbindung aufbauen...";ob_flush();flush();
  
$link mysql_connect("SERVER""USER""PASS");
  
mysql_select_db($db)
    or die (
"fehlgeschlagen! Verbindung zur Datenbank konnte nicht hergestellt werden!)");
  echo 
"[b]OK![/b]";ob_flush();flush();
  echo 
"</td></tr></table>
"
;
?>

*) wenn jemand weis, wieso in meiner umgebung (w2k-adv-server, IIS, PHP4) die flush() alleine nicht funkt, bitte melden!

row 08.08.2003 12:48

@Who-T

Also ich habe jetzt dieses $_session ausprobiert.
Auf der Seite index.php kennt er noch den usernamen,
wenn ich den usernamen dann aber per next.php aufrufe, ist der username leer- da dürfte er das nicht als globale Variable übergeben oder?

käptn 08.08.2003 13:14

Zitat:

Original geschrieben von Irv
*) wenn jemand weis, wieso in meiner umgebung (w2k-adv-server, IIS, PHP4) die flush() alleine nicht funkt, bitte melden!
Naja, vom Script zum Browser hast du einen langen Weg vor dir:

Code:

PHP-Script OutputBuffer (optional) => ob_flush();
    |
    V
WebServer OutputBuffer => flush();
    |
    V
"InputBuffer" Browser
(muss zu einem gewissen Teil gefüllt sein, bis er was anzeigt)

~

Who-T 09.08.2003 09:31

hast du genau den code von mir?
der müsst funken

wenn nein post mal deinen code

wichtig:

hast du session_start()?

und kein session_destroy() vor deinem zugriff?

hast du php version > 4.1.0?

jonix 09.08.2003 11:52

Zitat:

Original geschrieben von Irv
*) wenn jemand weis, wieso in meiner umgebung (w2k-adv-server, IIS, PHP4) die flush() alleine nicht funkt, bitte melden!
imho liegts daran:
Zitat:

Apache for Windows version 1.3 series is implemented in synchronous calls. This poses an enormous problem for CGI authors, who won't see unbuffered results sent immediately to the browser. This is not the behavior described for CGI in Apache, but it is a side-effect of the Windows port. Apache 2.0 is making progress to implement the expected asynchronous behavior, and we hope to discover that the NT/2000 implementation allows CGI's to behave as documented.
(http://httpd.apache.org/docs/windows.html)
ps: "$_SESSION" ist auf jeden Fall case sensitive (muss gross geschrieben werden). achte auch darauf...

row 11.08.2003 10:21

Also Leute, nachdem es noch immer nicht funktioniert poste ich mal meinen Code, vielleicht übersehe ich ja was. Es kann aber sein das Lycos bestimmte PHP Funktionen sperrt, da es ein Freewebspace Account ist, oder?

INDEX.PHP:
<HTML>
<HEAD>
</HEAD>
<?php
session_start ();
$_SESSION["username"] = "row";
// now user name is available on all session sites
echo $_SESSION["username"];
?>
<BODY>


view username
</body>
</HTML>

NEXT.PHP:
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
</HEAD>


<BODY>

<?php
session_start ();
echo $_SESSION["username"];
echo " ist der aktuelle Username";
session_destroy ();
//now username is not available any more
?>

</BODY>
</HTML>

Who-T 11.08.2003 10:31

der code dürfte eigentlich gar net ausführbar sein.


session_start() muss aufgerufen werden, bevor ein output zum client stattfindet.

ergo
Code:


<?php
 session_start();
?>
<html>
 <head>
 </head>
 <body>
  <?php
    // register name, do other stuff
  ?>
 </body>
</html>


Alex1 11.08.2003 10:32

Probier einmal, die Session zu starten, bevor Du irgendwelchen HTML-Code an den Browser schickst.

Alex1 11.08.2003 10:32

Ups, da war jemand schneller :D

row 11.08.2003 10:45

@Who-T

Es funktioniert!!!
:bier: Jetztlade ich Dich aber auf ein virtuelles Bier ein, danke! :bier:

Who-T 11.08.2003 10:53

nur ein virtuelles? :( ;)

row 11.08.2003 15:48

Es läuft jetzt alles brav unter der selben Session-ID.

Und wie funktioniert das dann wenn ich sagen wir mal auf Seite 1 Name, Adresse und Telefonnummer eingeben lasse und auf Seite 2 verschiedene andere Angaben mir geben lasse?

Ich schätze mal ich muss das dann einfach unter der selben UserID in die Felder der MySQL Datenbank eintragen lassen. Lieg ich da richtig?

@Who-T
Ich werd mich mal erkundigen wieviel ein Bierdose per Post so kostet. Nur derzeit wird die wahrscheinlich kochen wenn sie ankommt...

Irv 11.08.2003 18:20

Zitat:

Original geschrieben von käptn


Naja, vom Script zum Browser hast du einen langen Weg vor dir:

Code:

PHP-Script OutputBuffer (optional) => ob_flush();
    |
    V
WebServer OutputBuffer => flush();
    |
    V
"InputBuffer" Browser
(muss zu einem gewissen Teil gefüllt sein, bis er was anzeigt)

~

d.h. wenn ich den outputbuffer von php deaktiviere, kann ich mir das ob_flush() sparen? das wäre genau das was ich will. ich werds nach frequency ausprobieren. danke auf jeden fall.

Irv 11.08.2003 18:23

Zitat:

Original geschrieben von jonix
[b]
imho liegts daran:

Apache for Windows version 1.3 series is implemented in synchronous calls. This poses an enormous problem for CGI authors, who won't see unbuffered results sent immediately to the browser. This is not the behavior described for CGI in Apache, but it is a side-effect of the Windows port. Apache 2.0 is making progress to implement the expected asynchronous behavior, and we hope to discover that the NT/2000 implementation allows CGI's to behave as documented.
(http://httpd.apache.org/docs/windows.html)
ich verwende IIS 5

Who-T 12.08.2003 03:24

Zitat:

Original geschrieben von row
Es läuft jetzt alles brav unter der selben Session-ID.

Und wie funktioniert das dann wenn ich sagen wir mal auf Seite 1 Name, Adresse und Telefonnummer eingeben lasse und auf Seite 2 verschiedene andere Angaben mir geben lasse?

Ich schätze mal ich muss das dann einfach unter der selben UserID in die Felder der MySQL Datenbank eintragen lassen. Lieg ich da richtig?
ja, wenn ich das richtig verstanden hab müssts so stimmen.

Zitat:

@Who-T
Ich werd mich mal erkundigen wieviel ein Bierdose per Post so kostet. Nur derzeit wird die wahrscheinlich kochen wenn sie ankommt...
belassen wirs beim virtuellen. ich bin dzt am anderen ende der welt und da könnt die post teuer werden ;)
außerdem sind die mit der quarantäne ganz schön happig da, weiß net ob die ein ausländisches bier durch den zoll lassen :D
auch wenns besser schmeckt als die biere hier

row 14.08.2003 09:59

Hi Leute,
bräuchte nochmals PHP Unterstützung.

Ich habe jetzt ein Eingabeformular mit mehreren Fragen und dazugehörigen Checkoxen.
Mit einem PHP Script kann ich dann ja überprüfen ob eh alles angekreuzelt wurde.
Aber wenn was fehlt und ich die Leute zurückschicke zum Formular fehlen natürlich wieder alles Eingaben die eh gepasst haben.
Ich denke dass das die Besucher nerven wird...

Habt ihr jemand eine Idee wie man das verbessern kann, so dass die Sachen einfach wieder automatisch bis auf die fehlenden Angaben eingetragen werden?

Who-T 14.08.2003 10:03

werte merken und beim zurückleiten ausgeben


bsp

<input type="text" value="<?php echo $username ?>" name="username">

jonix 14.08.2003 10:19

Zitat:

Original geschrieben von Irv
ich verwende IIS 5
lol - sorry, entweder wars spaet oder ich war auch tagsueber muede, is eh nur dreimal zu lesen gwesen :-(

Zitat:

Original geschrieben von Who-T
<input type="text" value="<?php echo $username ?>" name="username">
ich wuerd vorschlagen, zuerst die verfuegbarkeit der variablen zu ueberpruefen, also zb so:

Code:

echo '<INPUT type="text" value="';
echo (isset($_REQUEST['username']) ? $_REQUEST['username'] : '');
echo '" name="username">';


Who-T 14.08.2003 10:23

bzw, weil ich den code grad sehe.

spätestens jetzt würd ich mir gedanken über die verwendung von templates machen ;)

je früher du damit umgehen lernst, desto gut.

row 14.08.2003 10:29

Auch auf die Gefahr schallendes Gelächter zu erzeugen:
Was sind den Templates?

jonix 14.08.2003 10:29

rein interessehalber, tendiert die wcm-gemeinde in sachen template-verwaltung zu grossen dingen wie smarty (smarty.php.net) oder wird eher im kleinen rahmen agiert? ich hab bislang meine eigene kleine "template-engine" in verwendung...

ps: templates sind vorlagen, mit deren hilfe man versucht, die technische realisierung von der grafischen zu trennen (oder fuer php zumindest die php-skripts vom html-ramsch zu trennen)...

row 14.08.2003 10:36

@WHO-T

Nur damit klar ist ob ich's kapiert habe:
<input type="text" value="<?php echo $username ?>" name="username">

= Schreibt $username hin wenn es ihn schon gibt, sonst warten auf username

Dass mit dem Merken der Variable ist mir hoffentlich klar, aber wie kann ich zurückleiten, ohne dass dabei die Variable verloren geht?

Who-T 14.08.2003 10:44

entweder du hast die sachen in der session gespeichert oder du gibst sie per GET zurück.

ich würd ein objekt mit den daten anlegen und in der session speichern das is übersichtlicher.

bzw das ganze eben mit templates lösen, da kannst du dir u.U. das umleiten auf eine andere php seite überhaupt ersparen.

jonix 14.08.2003 10:46

da kommen wieder die sessions ins spiel.

1.teil (formular)
Code:

session_start();

// formularfeld ausgeben
echo '<INPUT type="text" value="';
echo (isset($_SESSION['username']) ? $_SESSION['username'] : '');
echo '" name="username">';

2.teil (formular-auswertung)
Code:

session_start();

// uebergebenen username als session-var speichern
$_SESSION['username'] = $_REQUEST['username'];

ps: ich machs meist so, dass ich alle mittels POST uebergebenen variablen in eine session-var mit dem form-name als key speichere - somit kann man relativ einfach ueber mehrere seiten (schritte eines vorganges) hinweg die daten bereithalten:

Code:

// auf der verarbeitenden seite
$_SESSION['formname'] = $_POST;


row 14.08.2003 16:38

Danke Leute für die Anregungen, ist ja ziemlich komplex das Zeug.
Werde das jetzt mal in Ruhe studieren ob ich's behirne ;)

row 01.09.2003 13:11

session again
 
Mein Fragebogen funktioniert jetzt recht brav.
Jeder User bekommt eine Session-ID (einen UNIX timestamp) und hupft von Page zu Page bis zum Schluss. Das funktioniert brav vom meinem Rechner in der Arbeit (LAN & IE5.5)

Interessanterweise funktioniert das mit den Sessions von daheim per Modem und IE6 nicht so ganz - d.h er legt immer zweimal die selbe Session an - nachdem ich manchmal die Daten auch aus der Session anzeigen lasse stehen dann die Sachen oft doppelt da, z.B. Frage 1 von 1414 (besonders ärgerlich :mad: )

Ich befürchte dass hat mit dem Proxie oder Browser-Cache zu tun - vielleicht habt ihr ja eine Idee???


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag