PHP No database selected

  • Ersteller Ersteller mustermen
  • Erstellt am Erstellt am
M

mustermen

Gast
Hallo also ich habe ein Gästebuch wo alle Einträge drin sind, die gb.php die lädt die Daten aus der MySQL, die Datenbank dafür heißt gb und die Tabelle auch gb, dort in der Tabelle sind folgende Werte gespeichert: id, name, email, text, datum. Wen jemand einen Eintrag verfassen möchte geht er auf die gbentry.html, wo alle Formularfelder sind und wen er die abschickt wird er zur gbentry.php geleitet und ab hier hackt es gbentry.php sagt mir das ich keine database ausgewählt habe, obwohl ich dort eine verbindung dazu habe? Hier mal der Code von der gbentry.php:
PHP:
<?php

// Verbindung zum Datenbankserver aufnehmen
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'gb';
$conn = new mysqli($host, $user, $pass, $db);

//Variablen füllen
$name = mysql_real_escape_string($_POST["name"]);
$email = mysql_real_escape_string($_POST["email"]);
$text = mysql_real_escape_string($_POST["text"]);
$antwort = mysql_real_escape_string($_POST["antwort"]);

// Felder ausgefüllt ?
if(($name == "") OR ($email == "") OR ($text == "") OR ($antwort == ""))
{
echo "Bitte fülle alle Felder aus.";
exit;
}

if($antwort != 10)
{
echo "Falsche Antwort!";
exit;
}

$datum = date("d.m.Y");
$sql = mysql_query("INSERT INTO `gb`(`name`,`email`,`text`,`datum`) VALUES ('".$name."','".$email."','".$text."','".$datum."')") or die (mysql_error());

if($sql)
{
echo 'Eintrag erfolgreich hinzugef&uuml;gt.';

// Zum Gästebuch zurück Achtung funktioniert das hier wirklich?????
header("Location: gb.php");
}

// Datenbankverbindung schließen
$conn->close();

?>

Und hier noch gb.php die funktioniert aber super und lädt die Beispiel Dateien von der MySQL Datenbank:
PHP:
<?php

// Verbindung zum Datenbankserver aufnehmen
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'gb';
$conn = new mysqli($host, $user, $pass, $db);

// SQL-Code an die Datenbank senden
$sql = "SELECT * FROM gb ORDER BY `id` DESC";
$query = $conn->query($sql);

// Abfrageergebnis speichern
$result = array();
while ($row = $query->fetch_assoc()) {
  $result[] = $row;
}

// Datenbankverbindung schließen
$conn->close();

?>
<!DOCTYPE html>
<html>
<head>
    <link href="css/all.css" rel="stylesheet" type="text/css" media="all">
</head>
    
<body>
    	<header>
        </header>
        <article class="gb">
        <h2>Gästebuch</h2>

        <a href="gbentry.html" class="gb-btn">&raquo;Ins Gästebuch eintragen&laquo;</a>
			
	<?php
            
            foreach ($result as $row) {
              echo "<div>";
              echo "<p>";
              echo $row['name'];
              echo "</p>";
              echo "<p>";
              echo $row['datum'];
              echo "</p>";
              echo "<p>";
              echo $row['text'];
              echo "</p>";
              echo "</div>";
            }
            
            ?>
                
      	</article>
      	<footer>
    	</footer>
</body>
</html>

und hier noch gbentry.html wo das formular ist:
PHP:
<article>
          	<h2>Ins Gästebuch eintragen</h2>
            <form action="gbentry.php" method="post">
            	<input type="text" name="name" placeholder="Dein Name" required><br>
                <input type="email" name="email" placeholder="Deine Email" required><br>
                <textarea name="text" placeholder="Deine Nachricht…" required></textarea><br>
                <input type="text" name="antwort" placeholder="7 + 3 = ?" required><br>
                <input type="submit" name="formaction"><br>
            </form>
      	</article>
 
mach mal die hochkomma da weg bei 'gb'

PHP:
$sql = mysql_query("INSERT INTO gb (`name`,`email`,`text`,`datum`) VALUES ('".$name."','".$email."','".$text."','".$datum."')") or die (mysql_error());
 
Zuletzt bearbeitet:
Jo danke für deinen Beitrag aber leider hat das nicht gebracht danach kam dieser Fehler:

Notice: Use of undefined constant gb - assumed 'gb' in C:\xampp\htdocs\cjw\gbentry.php on line 7
No database selected
 
Hi,

bei der gbentry.php machst du die Frage nicht über das $conn Objekt. Versuch mal den Befehl anzupassen auf

$sql = $conn->mysql_query(.....


Sollte das nicht klappen kannst du auch noch die Connection an mysql_query angeben über

mysql_query("sqlbefehl", $conn);

Hoffe das hilft.

Beste Grüße
 
Ach ich habe ganz vergessen zu sagen ich bin ein absoluter Anfänger was PHP betrifft!

Ich habe jetzt das hier geschrieben aber es funktioniert leider immer noch nicht?
Fehler Fatal error: Call to undefined method mysqli::mysqli_query() in C:\xampp\htdocs\cjw\gbentry.php on line 10

Habe das hier geschrieben:

PHP:
// Verbindung zum Datenbankserver aufnehmen
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'gb';
$conn = new mysqli($host, $user, $pass, $db);

$sql = $conn->mysqli_query(); //Das ist die 10 Zeile
 
Danke geodreieck24 die phpbuddy Seite hat mir sehr geholfen das Abschicken funktioniert super! Nur wie bekomme ich es hin das auch noch das datum zur MySql Datenbank gesendet wird. Und wen das Senden erfolgreich war soll er sofort zur gb.php Seite springen?

also der Code von gbentry.php sieht nun so aus:

PHP:
<?php
 
if (isset( $_POST['submit'] ))
{
    // Maskierende Slashes aus POST Array entfernen
    if (get_magic_quotes_gpc()) { $_POST = array_map( 'stripslashes', $_POST ); }
    $name    = $_POST['name'];
    $email = $_POST['email'];
	$text = $_POST['text'];
 
    // Neues Datenbank-Objekt erzeugen
    $db = @new mysqli( 'localhost', 'root', '', 'gb' );
    // Pruefen ob die Datenbankverbindung hergestellt werden konnte
    if (mysqli_connect_errno() == 0)
    {
        $sql = 'INSERT INTO `gb` (`name`, `email`, `text`) VALUES (?, ?, ?)';
        $eintrag = $db->prepare( $sql );
        $eintrag->bind_param( 'sss', $name, $email, $text );
        $eintrag->execute();
        // Pruefen ob der Eintrag efolgreich war
        if ($eintrag->affected_rows == 1)
        {
            echo 'Der neue Eintrage wurde hinzugef&uuml;gt.';
        }
        else
        {
            echo 'Der Eintrag konnte nicht hinzugef&uuml;gt werden.';
        }
    }
    else
    {
        // Es konnte keine Datenbankverbindung aufgebaut werden
        echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';
    }
    // Datenbankverbindung schliessen
    $db->close();
}
 
?>
und so sieht das Formular aus:
PHP:
<form action="gbentry.php" method="post">
           <input type="text" name="name" placeholder="Dein Name" required><br>
           <input type="email" name="email" placeholder="Deine Email" required><br>
           <textarea name="text" placeholder="Deine Nachricht…" required></textarea><br>
           <input type="submit" name="submit" value="Eintragen"><br>
</form>

Ergänzung:

Ich wollte nun auch noch gb.php anpassen, sowie buddyphp das dort hat. Nun ja, es klappt mal wieder nicht?!

Also ich will aus dem wie ich es zurzeit habe :
PHP:
<?php

// Verbindung zum Datenbankserver aufnehmen
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'gb';
$conn = new mysqli($host, $user, $pass, $db);

// SQL-Code an die Datenbank senden
$sql = "SELECT * FROM gb ORDER BY `id` DESC";
$query = $conn->query($sql);

// Abfrageergebnis speichern
$result = array();
while ($row = $query->fetch_assoc()) {
  $result[] = $row;
}

// Datenbankverbindung schließen
$conn->close();

?>

Das hier machen:
PHP:
<?php
 
// Neues Datenbank-Objekt erzeugen
$db = @new mysqli( 'localhost', 'root', '', 'gb' );
// Pruefen ob die Datenbankverbindung hergestellt werden konnte
if (mysqli_connect_errno() == 0)
{
    $sql = 'SELECT `name`, `datum`, `text` FROM `gb` ORDER BY `id` DESC';
    // Statement vorbereiten
    $ergebnis = $db->prepare( $sql );
    // an die DB schicken
    $ergebnis->execute();
    // Ergebnis an Variablen binden
    $ergebnis->bind_result( $name, $datum, $text );
    // Ergebnisse ausgeben
    while ($ergebnis->fetch())
    {
        echo $name. " TEXT HIER" .$bereich ; //Ich glaube hier muss was geändert werden! 
		$result[] = $row;
    }
}
else
{
    // Es konnte keine Datenbankverbindung aufgebaut werden
    echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';
}
// Datenbankverbindung schliessen
$db->close();
 
?>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href="css/all.css" rel="stylesheet" type="text/css" media="all">
</head>
<body>
    	<header>
        </header>
        <article class="gb">
        <h2>Gästebuch</h2>
        <a href="gbentry.html" class="gb-btn">&raquo;Ins Gästebuch eintragen&laquo;</a>
	//FRAGE Hier Sind sehr viele ECHOS KANN MAN DARUAS AUCH EIN ECHO   MACHEN??????????	
	<?php
            
            foreach ($result as $row) {
              echo "<div>";
              echo "<p>";
              echo $row['name'];
              echo "</p>";
              echo "<p>";
              echo $row['datum'];
              echo "</p>";
              echo "<p>";
              echo $row['text'];
              echo "</p>";
              echo "</div>";
            }
            
            ?>
                
        <a href="gbentry.html" class="gb-btn">&raquo;Ins Gästebuch eintragen&laquo;</a>
      	
         </article>
      	<footer>
    	</footer>
</body>
</html>

Kann ich aus den vielen Echos auch nur eins benutzen?
Also ich glaube ich muss aus dem hier
PHP:
// Ergebnisse ausgeben 
    while ($ergebnis->fetch()) 
    { 
        echo $name. " TEXT HIER" .$bereich ; //Ich glaube hier muss was geändert werden!  
        $result[] = $row; 
    }

sowas formen:
PHP:
// Abfrageergebnis speichern 
$result = array(); 
while ($row = $query->fetch_assoc()) { 
  $result[] = $row; 
}
 
Zuletzt bearbeitet:
mustermen schrieb:
Nur wie bekomme ich es hin das auch noch das datum zur MySql Datenbank gesendet wird.
Welches Format bzw welchen Typ hat denn die Spalte in MySQL? Falls die vom Typ datetime ist, kannst du zB mit "NOW()" das aktuelle Datum/Zeit eintragen.
mustermen schrieb:
Und wen das Senden erfolgreich war soll er sofort zur gb.php Seite springen?
Der Location header, der oben bereits in einem deiner Quelltexte auftaucht, sollte funktionieren.
mustermen schrieb:
Kann ich aus den vielen Echos auch nur eins benutzen?
Klar:
PHP:
echo "<div><p>". $row['name'] ."</p><p>". $row['datum'] ."</p><p>". $row['text'] ."</p></div>"
Allerdings bringt das keinerlei Vorteile, höchstens eine schlechtere Lesbarkeit. :p
mustermen schrieb:
Also ich glaube ich muss aus dem hier [...] sowas formen:
Genau richtig! ;)
 
Ok ich habe es doch noch geschafft und zwar musst ich nur das hier schreiben:
PHP:
<!DOCTYPE html>
<html>
<head>
</head>
<body>
    	<header>
        </header>
        <article class="gb">
          	<h2>G&auml;stebuch</h2>
            <a href="gbentry.html" class="gb-btn">&raquo;Ins G&auml;stebuch eintragen&laquo;</a>
			
             <?php
 
			// Neues Datenbank-Objekt erzeugen
			$db = @new mysqli( 'localhost', 'root', '', 'gb' );
			// Pruefen ob die Datenbankverbindung hergestellt werden konnte
			if (mysqli_connect_errno() == 0)
			{
				$sql = 'SELECT `name`, `datum`, `text` FROM `gb` ORDER BY `id` DESC';
				// Statement vorbereiten
				$ergebnis = $db->prepare( $sql );
				// an die DB schicken
				$ergebnis->execute();
				// Ergebnis an Variablen binden
				$ergebnis->bind_result( $name, $datum, $text );
				// Ergebnisse ausgeben
				while ($ergebnis->fetch())
				{
					echo "<div>";
              		echo "<p>";
              		echo $name;
              		echo "</p>";
              		echo "<p>";
              		echo $datum;
              		echo "</p>";
              		echo "<p>";
              		echo $text;
              		echo "</p>";
              		echo "</div>";
				}
			}
			else
			{
				// Es konnte keine Datenbankverbindung aufgebaut werden
				echo 'Die Datenbank konnte nicht erreicht werden. Folgender Fehler trat auf: <span class="hinweis">' .mysqli_connect_errno(). ' : ' .mysqli_connect_error(). '</span>';
			}
			// Datenbankverbindung schliessen
			$db->close();
			 
			?>  
        	<a href="gbentry.html" class="gb-btn">&raquo;Ins G&auml;stebuch eintragen&laquo;</a>
      	</article>
      	<footer>
    	</footer>
</body>
</html>
 
Zuletzt bearbeitet:
Dabei kommt dieser Fehler zustande :
Fatal error: Cannot use object of type mysqli_stmt as array in C:\xampp\htdocs\cjw_TEST\gb.php on line 76
Das liegt daran, dass fetch kein Array mit den Ergebnissen zurückgibt, sondern wie in deiner neuen Lösung die Variablen zuweist. Um ein Array zu bekommen, musst du die Methode fetch_assoc benutzen. Allerdings funktioniert das nicht mit Prepared Statements.
 
So, sry mustermen, war lange nicht mehr eingeloggt, brauchst du noch hilfe? wenn ja, schreib mir icq oder skype per pn, ich werde mich umgehen bei dir melden.
 
Zurück
Oben