php auf sql zugreifen (ziemliches durcheinander)

Dieses Thema im Forum "Webentwicklung" wurde erstellt von Punkster, 7. Juli 2006 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 7. Juli 2006
    hi @ all .

    ich steh vor nem problem ...
    und zwar kann ich keine daten aus meiner datenbank auslesen ...
    ich hab hier auch nur so'n doofes buch, aber das hilft mir net weiter ...

    so ... ich versuch so was wie'n news-script zu erstellen ...
    hab auch einige dateien bis jetzt geschrieben ... die sind unten zu sehen ... ist alles ein wenig durcheinander und mit vielen "include" befehlen ...
    das liegt daran, dass ich wenn ich was verändere net immer die ganze datei verändern will, sonder immer nur ne kleine datei hab, die ich ändern muss und hochladen ... (mag zwar unsinnig erscheinen, aber ich hab schon so angefangen )
    so weiter ... es ist verdammt viel und ich hoffe da blickt einer durch, oder kann mir den code vl einfacher gestalten

    hier die datei [dbconfig.php] im ordner/ include/
    PHP:
    <?

    $dbServer  "localhost" ;
    $dbUser  "root" ;
    $dbPass  "" ;
    $dbName  "punkster" ;

    ?>
    ach ich muss dazu sagen, dass die dateien zu hause auf meinem server liegen und net im internet, darum lass ich mal alle angaben drinne :]

    [dbconnect.php] im ordner/ include/
    PHP:
    <?
        include(
    "dbconfig.php" );
        
        @
    mysql_connect ( $dbServer $dbUser $dbPass ) or die( "Verbindung zur Datenbank fehlgeschlagen -> "  mysql_error ());
        @
    mysql_select_db ( $dbName ) or die( "Verbindung zur Datenbank fehlgeschlagen -> "  mysql_error ());
        
    ?>


    [header.php] im ordner/ include/
    PHP:
    <?
    require(
    "include/config.php" );
    ?>

    <head>
    <link rel="stylesheet" href="style.css" type="text/css" media="screen">

    <title><?=$sitename?></title>
    </head>

    [insertnews.php] im ordner/ root/
    PHP:
    <html>                            
    <?
    include( 'include/header.php' );
    ?>
        <div style="width: 100%; height: 100%;" align="center">
            <div class="table">
                <div class="table_row">
                    <div class="left">
                        <div class="name">
                            <div class="co_name"><a href="#"><?=$sitename?></a></div>
                        </div>

                                <? 
                                
    include( 'navi.php' ); 
                                
    ?>

                    
                    <div class="right">
                        <div class="main_right">
                            <div class="head">&nbsp;</div>
                            
                            <?  include( 'search.php' );  ?>
                            
                            </div>
                        <div class="main">
                          
    <?
        
    include( "include/dbconnect.php" );
    ?>




    <?  include( 'inserta.php' );  ?>



                                            </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                </div>
    <br style="line-height: 15px;">

    <br><br>

                            </div>
                        </div>
                    </div>
                        
                    
                </div>
            </div>
        </div>
    </body></html>


    [inserta.php] im ordner/ root/
    PHP:
    <br><br><br>
                                <div class="header">
                                        <div class="header2">
                                    <div class="table2">
                                        <div class="table_row2">
                                            <div class="left2">
                                                <div class="head_txt">
                                                    <br><strong>Hier kannst du News eintragen...<br>Aber bitte achte drauf, dass sie nicht Copyright geschützt sind ;-)</strong><br><br>
                                            </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                </div>
    <br style="line-height: 15px;">

    <?
        $date 
    date ( "d. M Y - h:i:s" );  
    ?>

    <br><br><br>
                                <div class="header">
                                        <div class="header2">
                                    <div class="table2">
                                        <div class="table_row2">
                                            <div class="left2">
                                                <div class="head_txt">
                                                    <br><strong>
    <form method="post" action="">
    <table border="0" align="center">
    <tr>
        <td align=right><div class="head_txt"><strong>Dein Name/Nickname:</strong></div></td>
        <td><input type=text id=name name=name size=25 maxlength=20></td>
    </tr>
    <tr>
        <td align=right><div class="head_txt"><strong>Datum:</strong></div></td>
        <td><input type=text id=date name=date size=25 maxlength=30 value='<?=$date?>' readonly></td>
    </tr>
    <tr>
        <td align=right><div class="head_txt"><strong>Thema:</strong></div></td>
        <td><input type=text id=content name=content size=25 maxlength=100></td>
    </tr>
    <tr>
        <td align=right><div class="head_txt"><strong>Text:<br><br>(Bitte ohne Bilder und Links im Text einfügen)</strong></div></td>
        <td><textarea name=txt id=txt cols=30 rows=8></textarea></td>
    </tr>
    <tr>
        <td align=right><div class="head_txt"><strong>Picture:<br>(optional)</strong></div></td>
        <td><input type=text id=pic name=pic size=25 maxlength=30></td>
    </tr>
    <tr>
        <td align=right><div class="head_txt"><strong>Quelle:<br>(Bitte URL angeben)</strong></div></td>
        <td><input type=text id=quelle name=quelle size=25 maxlength=30></td>
    </tr>
    <tr>
        <td align=right><div class="head_txt"><strong>Kategorie:</strong></div></td>
        <td><select size="1" id=cath name=cath>
                    <option value=""></option>
                    <option value="World News">World News</option>
                    <option value="Szene News">Szene News</option>
                    </select></td>
    </tr>
    </table>

    <table border="0" align="center">
    <tr>
        <td><center><input value="Artikel Einstellen !" name="submit" type="submit"></center></td>
    </tr>
    </table>


    <?
    mysql_query
    ( "INSERT INTO news (thema,date,name,pic,txt,cath,quelle) VALUES (' $thema ',' $date ',' $name ',' $pic ',' $txt ',' $cath ',' $quelle ')" );
    ?>


    </strong><br><br>


                                            </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                </div>
    <br style="line-height: 15px;">

    <br><br>

    [DATENBANK] table: news (die einträge sind beispiel einträge bzw nur zum test)
    {bild-down: http://img56.imageshack.us/img56/3420/sfdgdfhtzjthgj156hj4g56j1dgh56.jpg}



    oh man es ist doch verdammt viel ... und ich bekomme es net hin, dass die formulardaten in die datenbank eingetragen werden ...
    über jegliche hilfe wäre ich verdammt dankbar und es ist auf jeden nen 10er drinne


    liebe grüße punkster
     
  2. 7. Juli 2006
    Code:
    if(isset($_POST["Submit"])) {
    
    mysql_query("INSERT INTO news (newsid , thema , date , name , pic , txt , cath , quelle) VALUES ("", "thema" , "date" , "name" , "pic" , "txt" , "cath" , "quelle")");
    
    echo "Dein Artikel wurde eingetragen.";
    
    }
    Mach aus dem Teil mal folgendes:

    Code:
    if(isset($_POST["Submit"])) {
    
    $insert_string = "INSERT INTO news (thema , date , name , pic , txt , cath , quelle) VALUES ('thema', 'date', 'name' , 'pic' , 'txt' , 'cath' , 'quelle')";
    $result = mysql_query($insert_string);
    
    if($result) {
     echo "Dein Artikel wurde eingetragen.";
    } else {
     echo "Fehler beim Eintragen, mySQL meldet: ". mysql_error() ."<br />\n";
     echo "SQL-String: ". $insert_string;
     echo "<br />\n";
     }
    
    }
    Ungetestet. Zur Info: IDs (weil automatisch hochgezählt) nicht per Query übergeben. Außerdem: Strings etc. im SQL-String durch einfache Hochkomma eingrenzen, denn die doppelten gehören zum mysql_query.
     
  3. 8. Juli 2006
    oder einfach auch so den sql-string via echo ausgeben und schauen, was da falsch sein kann

    Code:
    <?
    mysql_query("INSERT INTO news (thema,date,name,pic,txt,cath,quelle) VALUES ('$thema',".time().",'$name','$pic','$txt','$cath','$quelle')");
    ?>
    
    So würds ich machen an deiner Stelle.
    Die Strings, die du inna Datenbank haben willst, einfach den Wert von $thema, $name etc zuweisen.
    übrigens: wenn du weißt, dass nen wert ne zahl is, brauchste kein hochkomma.
    wenn newsid nen auto_increment is, dann zählt der die id bei jedem eintrag automatisch um eins hoch

    die uhrzeit am besten als timestamp reinspeichern... kannste dann so wieder ausgeben:
    Code:
    <p>Geschrieben am <?=date("d.m.Y u\m H:i",$time)?> Uhr.
    
    Kommt kommt halt:
    Geschrieben am 27.09.2034 um 17:22 Uhr.
     
  4. 8. Juli 2006
    ich habs jetzt so gemacht:
    PHP:
    <?
    mysql_query ( "INSERT INTO news (thema,date,name,pic,txt,cath,quelle) VALUES (' $thema '," . time (). ",' $name ',' $pic ',' $txt ',' $cath ',' $quelle ')" );
    ?>
    allerdings gibt es da 2 probleme ...
    1. das einzigste was nun übertragen wird, ist das datum ... sprich die anderen felder bleiben leer ...
    2. es werden mehrere einträge mit nur einem klick angelegt ... und alle enthalten wie gesagt nur das datum ...

    eine fehlermeldung wird nicht ausgegeben ... ich stelle die überarbeitete datei mal oben rein, bzw editiere die alte ...
     
  5. 8. Juli 2006
    1:
    erstell mal eine datei "dbconnect.php" (oder wie auch immer du sie nennen willst)
    folgendes kommt da rein:
    PHP:
    <?
      
    $host  xxx ;
      
    $user  xxx ;
      
    $passwd  xxx ;
      
    $db  xxx ;

      function 
    GetData ( $sql ) {
        
    $msgQuery      "query failed" ;                 
        
    $msgConnect    "cannot connect to server" ;
        
    $msgDatabase   "cannot find database" ;

        
    $link  mysql_connect ( $host $user $passwd ) or die( $msgConnect );
        
    mysql_select_db ( $db ) or die ( $msgDatabase );

        
    $result  mysql_query ( $sql $link ) or die ( $msgQuery );
        return 
    $result ;
      }
    ?>
    somit hast du alles schonmal in einem, was mögliche fehlerquellen ausschließt


    diese Datei includest du dort, wo sie gebraucht wird (header.php oder insertnews.php)

    mysql-befehle kannst du dann so ausführen:
    PHP:
    $result  GetData ( "INSERT..." );
    (eventuelle rückgabewerte werden in $result gespeichert)

    2:
    der Query sollte im "Idealfall" so aussehen:
    Code:
    INSERT INTO `news` (`thema`,`date`,`name`,`pic`,`txt`,`cath`,`quelle`) VALUES ('$thema',now(),'$name','$pic','$txt','$cath','$quelle')
    dabei ist zu achten, dass die Spalte "date" in einem entsprechendem Datums-Format ist (datetime,date,...).
    Warum? MySQL und auch PHP können mit unserem Datums-Format nix anfangen, wodurch keine zuverlässige sortierung und Auswertung möglich ist.
    Das Datum würd ich erst vor der Ausgabe "eindeutschen".

    3:
    es gibt eine ganz einfache Erklärung, warum nur das Datum eingefügt ist. Er kennt die anderen Variablen einfach noch nicht.
    Wenn man in einem Formular auf "submit" klickt, wird die datei aufgerufen, die unter "action=..." angegeben ist (ich nehm immer <?echo@$PHP_SELF;?> für die Datei selber). Dann werden die im Formular enthaltenen Felder je nach Methode entweder in $_GET['name'] oder $_POST['name'] gespeichert, wobei "name" der unter "name" eingegeben Wert des Feldes ist. Und erst dann sind sie Serverseitig, und somit für PHP und MySQL verfügbar. Davor sind sie nur Clientseitg verfügbar.
    das ganze sollte dann so aussehen:

    dbconnect.php im Ordner /include
    PHP:
    <?
      
    $host  xxx ;
      
    $user  xxx ;
      
    $passwd  xxx ;
      
    $db  xxx ;

      function 
    GetData ( $sql ) {
        
    $msgQuery      "query failed" ;                 
        
    $msgConnect    "cannot connect to server" ;
        
    $msgDatabase   "cannot find database" ;

        
    $link  mysql_connect ( $host $user $passwd ) or die( $msgConnect );
        
    mysql_select_db ( $db ) or die ( $msgDatabase );

        
    $result  mysql_query ( $sql $link ) or die ( $msgQuery );
        return 
    $result ;
      }
    ?>
    header.php im Ordner /include
    PHP:
    <html>
    <head>
    <link rel="stylesheet" href="style.css" type="text/css" media="screen">

    <title><?=$sitename?></title>
    </head>
    insertnews.php im Ordner /
    PHP:
    <?
    include(
    'include/header.php' );
    ?>
        <div style="width: 100%; height: 100%;" align="center">
            <div class="table">
                <div class="table_row">
                    <div class="left">
                        <div class="name">
                            <div class="co_name"><a href="#"><?=$sitename?></a></div>
                        </div>
                                <? 
                                
    include( 'navi.php' ); 
                                
    ?>                
                    <div class="right">
                        <div class="main_right">
                            <div class="head">&nbsp;</div>
                            
                            <?  include( 'search.php' );  ?>
                            
                            </div>
                        <div class="main">
    <?  include( 'inserta.php' );  ?>
                                            </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                </div>
    <br style="line-height: 15px;">
    <br><br>
                            </div>
                        </div>
                    </div>                
                </div>
            </div>
        </div>
    </body>
    </html>
    inserta.php im Ordner /
    PHP:
    <?
    include(
    'include/dbconnect.php' );
    if(
    $_POST [ 'submit' ]){
      
    $result  GetData ( "INSERT INTO `news` (`thema`,`date`,`name`,`pic`,`txt`,`cath`,`quelle`) VALUES (' $_POST [ thema ] ',now(),' $_POST [ name ] ','$ $_POST [ pic ] ',' $_POST [ txt ] ',' $_POST [ cath ] ',' $_POST [ quelle ] ')" );
    }
    ?>
    <br><br><br>
                                <div class="header">
                                        <div class="header2">
                                    <div class="table2">
                                        <div class="table_row2">
                                            <div class="left2">
                                                <div class="head_txt">
                                                    <br><strong>Hier kannst du News eintragen...<br>Aber bitte achte drauf, dass sie nicht Copyright geschützt sind ;-)</strong><br><br>
                                            </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                </div>
    <br style="line-height: 15px;">
    <br><br><br>
                                <div class="header">
                                        <div class="header2">
                                    <div class="table2">
                                        <div class="table_row2">
                                            <div class="left2">
                                                <div class="head_txt">
                                                    <br><strong>
    <form method="post" action="<? echo@ $PHP_SELF ; ?>">
    <table border="0" align="center">
    <tr>
        <td align="right"><div class="head_txt"><strong>Dein Name/Nickname:</strong></div></td>
        <td><input type="text" id="name" name="name" size="25" maxlength="20"></td>
    </tr>
    <tr>
        <td align="right"><div class="head_txt"><strong>Datum:</strong></div></td>
        <td><input type="text" id="date" name="date" size="25" maxlength="30" value="<?  echo@ date ( "d.m.Y - G:i:s" time ()); ?>" readonly></td>
    </tr>
    <tr>
        <td align="right"><div class="head_txt"><strong>Thema:</strong></div></td>
        <td><input type="text" id="content" name="content" size="25" maxlength="100"></td>
    </tr>
    <tr>
        <td align="right"><div class="head_txt"><strong>Text:<br><br>(Bitte ohne Bilder und Links im Text einfügen)</strong></div></td>
        <td><textarea name="txt" id="txt" cols="30" rows="8"></textarea></td>
    </tr>
    <tr>
        <td align="right"><div class="head_txt"><strong>Picture:<br>(optional)</strong></div></td>
        <td><input type="text" id="pic" name="pic" size="25" maxlength="30"></td>
    </tr>
    <tr>
        <td align="right"><div class="head_txt"><strong>Quelle:<br>(Bitte URL angeben)</strong></div></td>
        <td><input type="text" id="quelle" name="quelle" size="25" maxlength="30"></td>
    </tr>
    <tr>
        <td align="right"><div class="head_txt"><strong>Kategorie:</strong></div></td>
        <td><select size="1" id="cath" name="cath">
                    <option value=""></option>
                    <option value="World News">World News</option>
                    <option value="Szene News">Szene News</option>
                    </select></td>
    </tr>
    </table>
    <table border="0" align="center">
    <tr>
        <td><center><input value="Artikel Einstellen !" name="submit" type="submit"></center></td>
    </tr>
    </table>
    </strong><br><br>
                                            </div>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                                </div>
    <br style="line-height: 15px;">
    <br><br>

    pfu... sollte so eigentlich stimmen... habs aber net getestet... der Rest sollte aber einfach sein...
    falls fehlermeldungen mit dieser version erscheinen: bitte genauen(!) Wortlaut posten...

    mfg
    zwutz

    PS: hoffentlich is der Beitrag net zulang geworden ^^

    PS2: wenn du das bisschen Code schon "durcheinander" nennst
    das schlimmste, was dir passieren kann is ein blindes Tag ^^
     
  6. 8. Juli 2006
    @ zwutz :

    es wird folgender fehlercode ausgegeben :

    Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\Programme\Server\xampp\htdocs\xampp\homepages\project_001\punkster.de\test004\include\dbconfig.php on line 12
    cannot connect to server

    ich hab in der dbconfig.php aber alle daten korrekt angegeben ...
    PHP:
    <?
      
    $host  "localhost" ;
      
    $user  "root" ;
      
    $passwd  "" ;
      
    $db  "punkster" ;

      function 
    GetData ( $sql ) {
        
    $msgQuery      "query failed" ;                 
        
    $msgConnect    "cannot connect to server" ;
        
    $msgDatabase   "cannot find database" ;

        
    $link  mysql_connect ( $host $user $passwd ) or die( $msgConnect );
        
    mysql_select_db ( $db ) or die ( $msgDatabase );

        
    $result  mysql_query ( $sql $link ) or die ( $msgQuery );
        return 
    $result ;
      }
    ?>
    das datum wird auch net mehr in die datenbank eingetragen ...
     
  7. 8. Juli 2006
    klar... wenn ein fehler auftritt, dann macht er nicht weiter.. is auch gut so...

    das ist jetzt nicht dein ernst, dass bei dir der root kein passwort hat? SOFORT fixen. Enormes Sicherheitsrisiko!
    Is dass dein eigener Server oder gehostet?

    änder mal testweise die dbconfig.php wie folgt um:
    PHP:
    <?  function  GetData ( $sql ) {
        
    $msgQuery      "query failed" ;                 
        
    $msgConnect    "cannot connect to server" ;
        
    $msgDatabase   "cannot find database" ;

        
    $link  mysql_connect ( "localhost" "root" "" ) or die( $msgConnect );
        
    mysql_select_db ( "punkster" ) or die ( $msgDatabase );

        
    $result  mysql_query ( $sql $link ) or die ( $msgQuery );
        return 
    $result ;
      }
    ?>
     
  8. 8. Juli 2006
    wie gesagt ... der server steht bei mir @ home ... ist net mim inet connected und nur 4 me ^^

    jupie es funktioniert *freu* thxXx ... hab euch allen nen 10er gegeben ... danke für eure mühe
     
  9. 8. Juli 2006
    dann glaub ich dir mal... es gibt aber genug "noobs" bei denen es ohne weiteres möglich ist, über eben dieses loch auf die db zuzugreifen (man brauch nur die IP)
     
  10. 8. Juli 2006
    Als wenn es in Noob-Datenbanken was zu holen gäbe...
     
  11. 8. Juli 2006
    Außerdem tut das mit den Variablen außerhalb der Funktion nicht weil die nicht für die Funktion zugreifbar sind, die sind eben nicht global oder sowas.
     
  12. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.