Strato / PHP: Insert funktioniert nicht?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Probier bitte das mal. Wo bei du natürlich die von Strato gegbenen Daten einsetzen musst.

<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
Woher ich das weiß:Berufserfahrung – Web Developer bei einem mittelständischen Portalbetreiber

Du benutzt die Variable $con die nirgendwo definiert ist...

Jakob265 
Fragesteller
 22.07.2021, 10:38

Danke. Jedoch funktioniert der code auch so nicht.

<?php
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('mysql.trace_mode', true);
?>
<?php session_start();
require_once('dbconnection.php');


//Code for Registration 
if(isset($_POST['signup']))
{
	$fname=$_POST['fname'];
	$lname=$_POST['lname'];
$sql=mysqli_query($con,"select id from users where fname='$fname'");
$row=mysqli_num_rows($sql);
if($row>0)
{
	echo "<script>alert('Name schon angemeldet');</script>";
} else{	

	$msg=mysql_query($con,"insert into users(fname,lname) values('$fname','$lname')");

if($msg)
{
	echo "<script>alert('Erfolgreich Eingetragen');</script>";
}
}
}

?>
0
triopasi  22.07.2021, 10:59
@Jakob265

Keine Ahnung was du geändert hast, $con ist weiterhin nicht definiert.

0
php insert funktioniert nicht?

Lösch das $con in dieser Zeile.

Falsch:

$sql=mysqli_query($con,"select id from users where fname='$fname'");

Richtig:

$sql=mysqli_query("select id from users where fname='$fname'");

Alex

regex9  22.07.2021, 11:43

Das ist falsch. Die Funktion braucht als erstes Argument ein Verbindungsobjekt. Das kann nur weggelassen werden, wenn man die query-Methode über ein mysqli-Objekt aufruft.

2
EinAlexander  22.07.2021, 11:46
@regex9
Die Funktion

Ja, das habe ich übersehen. Asche auf mein Haupt :-(

0

1) Zuerst muss sichergestellt werden, dass es überhaupt eine $con-Variable gibt. Laut der Fehlermeldung ist dem nicht der Fall. Schau in deine dbconnection.php.

2) Diesen SQL Query, wie er derzeit ist, solltest du nicht so lassen. Du fügst $fname in den Query ein, ohne den Wert auch nur ansatzweise zu prüfen. Wer Lust und Laune hat, könnte deinem Skript also auch Schadcode zusenden, der bspw. alle Einträge deiner Datenbank löscht.

Verwende ein Prepared Statement stattdessen.

$stmt = mysqli_prepare($con, "select id from users where fname=?");
mysqli_stmt_bind_param($stmt, "s", $fname);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$numberOfRows = mysqli_stmt_num_rows($stmt);

if ($numberOfRows > 0) {
  // ...
}
else {
  // ...
}

3) Bei deinem INSERT solltest du ähnlich vorgehen (die Zeile ist eh falsch). Also statt:

$msg=mysql_query("insert into users(fname,lname) values('$fname','$lname')");

besser:

$stmt = mysqli_prepare($con, "insert into users(fname, lname) values(?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $fname, $lname);

if (mysqli_stmt_execute($stmt)) {
  // success ...
}
else {
  // failed ...
}
Jakob265 
Fragesteller
 22.07.2021, 12:57

Danke ich habe nun diesen code:

<?php session_start:
require_once('dbconnection.php');
$servername = "...";
$username = "...";
$password = "...";

// Create connection
$con = new mysqli($servername, $username, $password);

// Check connection
if ($con->connect_error) {
 die("Connection failed: " . $con->connect_error);
}
echo "Connected successfully";
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('mysql.trace_mode', true);




//Code for Registration 
if(isset($_POST['signup']))
{
	$fname=$_POST['fname'];
	$lname=$_POST['lname'];
$stmt = mysqli_prepare($con, "select id from users where fname=?");
mysqli_stmt_bind_param($stmt, "s", $fname);
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$numberOfRows = mysqli_stmt_num_rows($stmt);

if ($numberOfRows > 0) {
 // ...
}
else {
 $stmt = mysqli_prepare($con, "insert into users(fname, lname) values(?, ?)");
mysqli_stmt_bind_param($stmt, "ss", $fname, $lname);

if (mysqli_stmt_execute($stmt)) {
  
	echo "<script>alert('Erfolgreich Eingetragen');</script>";

}
else {
 echo"<script>alert('Failed');</script>";
}
}

Nun kriege ich einen HTTP ERROR 500.

0
regex9  22.07.2021, 13:42
@Jakob265

Bei einem 500er-Fehler kannst du stets davon ausgehen, dass du Syntaxfehler eingebaut hast. Er wird auch gleich in der ersten Zeile sichtbar:

session_start:

Richtig wäre

session_start();

2) Da du die Verbindung nun direkt im Skript aufbaust, sollte

require_once('dbconnection.php');

raus.

3) Du beginnst prozeduralen und objektorientierten Stil zu vermischen:

$con = new mysqli($servername, $username, $password);

// ...
if ($con->connect_error) {
// ...
$stmt = mysqli_prepare($con, "select id from users where fname=?");

Davon würde ich abraten. Ein uneinheitlicher Stil macht deinen Code nur schwerer lesbar. Schau in die Dokumentation für die einzelnen Funktionen. Dort siehst du beide Stile aufgeführt. Für

new mysqli(...)

bspw.: https://www.php.net/manual/en/mysqli.construct.php.

0